OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

セッションタイムアウト時のページ表示

  • 困ってます
  • 質問No.133873
  • 閲覧数1434
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 33% (2/6)

 セッションタイムアウト時、その旨のページを表示すること考えてい
ます。表示方法をご存知の方、もしくは別のアプローチをご存知の方、
御教授下さい。

(1)セッションタイムアウトの検知はHttpSessionBindingListenerを使用。
(2)セッションタイムアウトしたときに表示するページは、用意している
  sessiontimeout.htmlにRequestDispatcherを用い、ディスパッチ。
(3)ディスパッチ処理は、セッションタイムアウト時に呼ばれる
  valueUnbound(...)メソッドに記述。
<問題点>
 RequestDispatcherを用いてディスパッチするときのメソッドは引数にHttpServletRequest,HttpServletResponseが必要です。
 これをvalueUnbound(...)メソッド内で行う場合、
上記2つの引数をどのように取得すればよいのでしょうか?
--------------------------------------------------------------------

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

HttpSession s = req.getSession(false);

if(s == null) {
   s = req.getSession(true);
   s.setAttribute("listener", this);
  }
}

 //中略

//HttpSessionBindingListener
public void valueUnbound(HttpSessionBindingEvent event) {
  System.out.println("valueUnBound");

//セッションタイムアウト時、sessiontimeout.htmlを表示
  ServletConfig config = this.getServletConfig();
  ServletContext context = config.getServletContext();
  RequestDispatcher rd =
    context.getRequestDispatcher("/sessiontimeout.html");
  rd.forward(req,res);
  //HttpServletReqest,HttpServletResponseをどう取得する?---
}
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

やったことが無いので想像で書きます。

servlet 自体を session に setAttribute する、ってことは、その servlet が
持つ属性もセッションに保持されているんじゃないかと想像します。

マニュアルを読む限り HttpSessionBindingListener.valueUnbound() は、セッション
から unbound されようとしているときに呼出されるように思えます。つまり、
このメソッドが呼ばれるときには、まだ unbound されていない、と。

なので、servlet の属性として request などを保存しておけば良いんじゃないで
しょうか?

public class MyServlet extends HttpServlet implements HttpSessionBindingListener {

HttpServletRequest req_;
HttpServletResponse res_;

 public void doPost(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {

  req_ = req;
  res_ = res;

  …
 }

 public void valueUnbound(HttpSessionBindingEvent event) {
  /*
  ここで、
  ((MyServlet)event.getSession().getAttribute("listener")).req_;
  で、保存した request が取得できるんじゃないか、と。
  */
 }
}

全くの思い付きなので、上手くいったら教えて下さい。
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ