2010-12-29 23 views
0

いくつかの機能を処理し、その結果をjspページに送るjava HttpServletクラスと一緒に動作する「look up」htmlページがあります。セッション属性を維持する方法

ルックアップを実行するには、別のサーブレットでセッションに入れたloginresultオブジェクトが必要です。

これは、ログインサーブレットで何が起こるかです:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     // get attributes that were filled in on the login webpage 
     request.getAttribute("username"); 
     request.getAttribute("password"); 
     String username = request.getParameter("username"); 
     String password = request.getParameter("password"); 
     LoginManager loginManager = new LoginManager(username.trim(), password.trim()); 
     if (loginManager.doLogin() == true) { 
      javax.servlet.http.HttpSession session = request.getSession(); 
      session.setAttribute("loginResult", loginManager.getLoginResult()); 
      session.setAttribute("binding", loginManager.getBinding()); 
      response.sendRedirect("lookup.html"); 

これは私のJSPページ内のルックアップサーブレットに何が起こるか

request.setCharacterEncoding("UTF-8"); 
      response.setContentType("text/html"); 
      javax.servlet.http.HttpSession session = request.getSession(); 
      LoginResult lr = (LoginResult) session.getAttribute("loginResult"); 
      if(lr == null) 
      { 
       throw new Exception("Your session has expired, please log in again"); 
      } 

      // some look up code 

      RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp"); 
      request.setAttribute("result", result); 
      request.setAttribute("question", question); 
      request.setAttribute("xml", xml); 
      dispatcher.forward(request, response); 

では、次のない入力ボタンです:ONCLICK = "window.location.href = 'lookup.html'"//

時には結果ページを非表示にするか最小化するか、何か待つか、あまりにも長く待ってからルックアップページに戻るそれは私のloginresultオブジェクト== nullが表示されます。 私の意見では、それは期限が切れています。 Apache Tomcatサーバーは、セッションを30分間標準で生き続けると考えましたが、

私のセッション属性が消える原因は何ですか?

+0

私は、賢明な提案をするために、セッション属性の作成方法と後での使用方法を含むコードを投稿する必要があります。 –

+0

「検索ページに戻る」というフレーズが不明です。あなたはログインしてから、ルックアップページに行き、しばらくの間ページを離れると、開いているページをもう一度見る(ルックアップページです)とセッションが消えますか?あなたは "返品"を正確に意味しますか? –

+0

ログイン後、ルックアップページにアクセスします。ルックアップページから何かを照会することができます。結果は結果ページに表示されます。結果ページでは、検索ページに戻ることができます。セッション属性が存在する限り、再度照会することができます。だから私は、ユーザーのブラウザが開いている限り、セッションを最後にしたい。 –

答えて

1

まず、実際に同じセッションを取得しているかどうかを判断する必要があります。私はこれを行うために考えることができる2つの簡単な方法があります。

1. JSESSIONIDクッキーの内容を見てください。ほとんどのブラウザはこれを簡単にします。コンテンツが変更された場合は、別のセッションを受け取りました。

2.)セッションが破棄されたときにログに記録するために、HttpSessionListenerを接続することができます。

新しいセッションを取得している場合は、設定の問題(Tomcat、web.xml、コンテキストスニペットなど)またはアプリの問題に絞り込む必要があります。設定に問題がある場合は、言及しているページ以外のページでも問題が繰り返されるはずです。

getSession(false)の使用を検討してください。まだ存在していない場合は新しいセッションを作成しません。これからヌルを得ると、それはあなたのセッションがタイムアウトしているという別の指標です。

同じセッションであると判断したが、何らかの理由で属性が消えていると判断した場合は、セッションからアイテムを削除するときに、HttpSessionAttributeListenerとログまたはブレークポイントを実装できます。

+0

これは私に多くの助けてくれてありがとう。結果ページにアクセスして新しいブラウザウィンドウを開いたときに、結果ページが表示されないままになってしまったようです.1分または2分後にhttpsessionが破棄されるようです。 –

関連する問題