2012-05-02 9 views
0

私はセッションからユーザーをログアウトするためにJavaコントローラサーブレットを作成しようとしています。 2つのメソッドがあり、1つはsendRedirectを使用し、もう1つはRequestDispatcherです。私の場合は、ドメイン外のページにそれらを送信したいと思っています。私の限られたJava知識では、sendRedirectを使用する必要があります。sendRedirect not redirecting

ただし、エラー302が発生し、ページがリダイレクトされません。私はチュートリアルのバージョンを試して、それは動作しますが、私は私のサーブレット内で実装すると、それは私にエラーを返し、リダイレクトしません。

誰かが正しい方向に向けることを願っています。

私が使用しているコードは以下の通りです。私は、NetBeansのテンプレートを使用しています:


protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    try { 
     HttpSession session = request.getSession(false); 
     if (session == null) { 
      System.out.println("Invalid"); 
      response.sendRedirect("http://www.google.com"); 
      return; 
     } else { 
      System.out.println("Invalidated"); 

      session.invalidate(); 
      response.sendRedirect("http://www.google.com"); 
      return; 
      /* 
      String url = "/logout.jsp"; 

      ServletContext sc = getServletContext(); 
      RequestDispatcher rd = sc.getRequestDispatcher(url); 
      rd.include(request, response); 

      */ 
     } 
     /* TODO output your page here 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet LogOut</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet LogOut at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
     */ 
    } finally {    
     out.close(); 
    } 
} 

編集:私は<a href>タグを介してサーブレットを呼び出していますが。サーブレット名はLogOut.javaです。

 <div data-role="header" data-position="fixed"> 
      <h1>Menu</h1> 
      <a href="LogOut" data-theme="i">Log Out</a> 
     </div> 

doGetとdoPostはprocessRequestを呼び出します。

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

/** 
* Handles the HTTP <code>POST</code> method. 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 
+2

'302'はエラーではありません。リダイレクトするようにブラウザに指示するステータスコードです。 – skaffman

+0

こんにちはskaffman、すばやい返信をいただきありがとうございます。私は火かき棒で見つけたものをグーグル・グーグルに基づいているので、自分自身を確信していません。しかし、何がブラウザのリダイレクトを妨げているのですか? jspページでjQueryMobileを使用していることが原因ですか? – Rax

答えて

0

応答の標準リダイレクトは、アプリケーション内の参照です。 は、私は外部のページへのメタデータの更新を持つ単純なHTMLページを作成しましたこの問題を解決するには、次の http://www.w3schools.com/tags/tag_meta.asp
例:
<meta HTTP-EQUIV="refresh" CONTENT="2; URL=http://www.google.be;">

は、自動転送に障害が発生した場合、外部ページにアクセスするには、単純なハイパーリンクを確認してください。

は一度テストし、サーブレットからの応答は、私自身の転送ページにリダイレクトされ、出来上がり...

+0

こんにちはJan、余分なHTMLページを使わずにサーブレットからすぐにリダイレクトする方法はないのですか?しかし、私がチュートリアルに従っていたとき、うまくいきました。私は自分のサーブレット内で実装しようとした後になぜこれが起こるのか分かりません。 – Rax

+1

'response.sendRedirect'が正しい方法です。問題を引き起こす' doPost() 'や' doGet() 'に他のコードがあるかもしれません。 'processRequest'を呼び出すコードを提供してください。 –

+0

こんにちはHardik、私は情報を投稿に追加しました。すぐにあなたからお聞きしたいと思います。 – Rax

関連する問題