セッションタイムアウト時、その旨のページを表示すること考えてい
ます。表示方法をご存知の方、もしくは別のアプローチをご存知の方、
御教授下さい。
(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をどう取得する?---
}
No.1ベストアンサー
- 回答日時:
やったことが無いので想像で書きます。
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 が取得できるんじゃないか、と。
*/
}
}
全くの思い付きなので、上手くいったら教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでのログアウトボタン
-
グローバルIPアドレスの変更タ...
-
ブラウザバック禁止
-
セッションの情報の消去について
-
エクリプスを使ってのセッショ...
-
XMLHTTPを使って、セッションID...
-
HttpSessionListenerクラスに関...
-
javascriptでセッションを取得
-
フォーム上で押されたボタンに...
-
腕時計の時報をならないように...
-
C言語で今まで表示していた画面...
-
リクエストに応じたselectedの...
-
jspでbeanを使いたいのです...
-
ボタンが活性化の場合とは、ボ...
-
strutsで、JSP→アクションクラ...
-
VC++にて、コンソールを二画面表示
-
VB6 開発環境のエディタに行...
-
ActiveReportのDataSourceについて
-
三菱GOTの画面切り替えについて
-
Javascriptのhistory.back()が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセッションを取得
-
グローバルIPアドレスの変更タ...
-
javascriptでセッションの削除...
-
エラーページ遷移後に入力値を残す
-
JSPでsession変数が勝手に書き...
-
ASP Session変数名の取得
-
sessionスコープとapplication...
-
画面遷移でセッション切れにな...
-
ASP.NETのGlobal.asaxについて
-
セッションタイムアウト時にエ...
-
Tomcatでの同一セッション同時...
-
javascriptでのログアウトボタン
-
jsessionidの有効期限を延長す...
-
セッションタイムアウトの設定...
-
setAttribute getAttribute 配...
-
セッションIDの桁数
-
JSPでブラウザ終了時にPostgreS...
-
JSP + ラジオボタン
-
HttpSessionListenerクラスに関...
-
複数Webサーバーでのセッション...
おすすめ情報