- ベストアンサー
struts1からstruts2へとフレームワークのバージョンアップし
struts1からstruts2へとフレームワークのバージョンアップしています。 そこで、セッションタイムアウトについて困っています。 struts1のときでは、SessionFilterを使って各アクションでセッションタイムアウトのチェックを行い、タイムアウトした場合は、エラー画面を表示するようにしていました。 struts2でもSessionFilterを使って、実装しようとしましたが挙動がおかしくなります。 struts2では、SessionFilterは使えないのでしょうか? struts2での書き方が分からず困っています。 アドバイスをお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Filterの順番以前の問題だったわ。。。 そのエラーの内容を直訳すれば原因はわかる・・・かも。 ちょっとわかりづらい内容だけど。 とりあえずその500エラーの原因は Filterの順番じゃなくて web.xml内の記述の順番に問題があるのよ。 まずはそれを直してからね。 その上でダメならまた相談に乗るわ。
その他の回答 (1)
- askaaska
- ベストアンサー率35% (1455/4149)
> 挙動がおかしい どうおかしいのかしら? 一番に思いつく原因は Filterの順番がよくない てことだけど。
補足
ご回答ありがとうございます。 web.xml <filter> <filter-name>sessionFilter</filter-name> <filter-class>jp.co.pt.session.SessionFilterAction</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> のように、Filterの順番を変えたらsessionFilterを通るようになり挙動が安定しました。 が、タイムアウト時に500のエラーが返ってきます。 org.apache.jasper.JasperException: The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location] FilterDispatcherが後で動いているからですかね?
お礼
アドバイスありがとうございました。 色々と動かしているうちに、なんとか動くようになりました。 web.xmlからのsessionFilterの記述は外して、FilterDispatcher起動時にIntercepterして セッションタイムアウトのチェック処理を動かすようにしました。
補足
web.xml <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>hoge.actions</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>sessionFilter</filter-name> <filter-class>jp.co.pt.session.SessionFilterAction</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>hoge.actions</param-value> </init-param> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> 色々試したのですが、上記のようにweb.xmlの記述の順番だと、sessionFilterはスルーして行ってしまいます。 また先程のエラーを直訳してみましたが、Strutsのディスパッチャが見つからないと書いてありました。 これは通常の、FilterDispatcherを通さないといけないということでしょうか?