- - PR -
HttpSessionEvent で HttpServletRequest
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-10 21:51
はじめまして。
何か良い案はないかと思いまして、質問させて頂きます。 tomcat 4.1.24 で動作させています。 web.xml の <listener> を指定し、セッションタイムアウトを取得しています。 この中の処理で、どうしても「直前のリクエスト内容」を取得したいのです。 (正確には getParameter() の値ですが) 取得するためには、どうするのが望ましいでしょうか。 一応確認ですが、HttpSessionEvent の中では HttpServletRequest は取得できない ですよね?(そう思っているんですが…) | ||||
|
投稿日時: 2004-03-11 00:17
HttpSessionBindingListenerを使用してはいかがでしょうか。
| ||||
|
投稿日時: 2004-03-11 10:37
ありがとうございます。
HttpSessionBindingListener ですか? ドキュメントには 「オブジェクトがセッションに結びつけられたり取り外されたりした時に通知を 受けるためのインタフェースです。」 とあります。 結局このクラスも、通知を受け取るだけだと思っていたのですが… セッションしかないのでリクエストは取得できない、と思っているのですが、 間違ってますかね。 | ||||
|
投稿日時: 2004-03-11 15:42
Servletのservice起動時に、今処理を行っているrequestのパラメータをSessionに保存する(Session毎に直前のrequestの履歴を残す)ようにすれば、リスナのハンドリングメソッド内部でEventオブジェクトにぶら下がっているSessionには、必ず望みのものが入っているようになるのでは、ということです。
間違ってますかね。^^; | ||||
|
投稿日時: 2004-03-12 00:07
セッション・タイムアウト処理は、リクエストとは非同期に行われるので
HttpSession から ServletRequest を取得するのは無理です。 モノを予め HttpSession#setAttribute() しておいて、 HttpSessionListener#sessionDestroyed() で処理するか、 モノ自体に HttpSessionBindingListener をインプリメントして、 同じく予め HttpSession#setAttribute() しておくかでしょうね。 | ||||
|
投稿日時: 2004-03-12 11:58
変な文章を書いてしまってすみません。
以下のようなコードでいかがでしょうか?
[ メッセージ編集済み 編集者: シュン 編集日時 2004-03-12 12:01 ] [ メッセージ編集済み 編集者: シュン 編集日時 2004-03-12 14:00 ] | ||||
|
投稿日時: 2004-03-12 12:40
ひょっとして、私の発言がシュンさんの発言の否定と取られて
しまったでしょうか。だとしたら、すみません。 私は単に、HttpSession から ServletRequest を取る事は出来ないので、 予め必要な情報は HttpSession に setAttribute() しておく必要がある 事を表現したかったのです。 ただ、提示されたコードでは HttpServletRequest を HttpSession に セットしてますが、この点はあまりお勧めできない様な... | ||||
|
投稿日時: 2004-03-12 13:57
いえ、Historyに適当なコレクションをメンバで持たせておいて、registerRequestParameter()内部で、引数のHttpServletRequestからそのコレクションに対してパラメータをコピーするような仕組みではどうか、というつもりでした。ちょっと意図がはっきりしないようなので、コードを直しておきますね。 | ||||
