• ベストアンサー

struts1からstruts2へとフレームワークのバージョンアップし

struts1からstruts2へとフレームワークのバージョンアップしています。 そこで、セッションタイムアウトについて困っています。 struts1のときでは、SessionFilterを使って各アクションでセッションタイムアウトのチェックを行い、タイムアウトした場合は、エラー画面を表示するようにしていました。 struts2でもSessionFilterを使って、実装しようとしましたが挙動がおかしくなります。 struts2では、SessionFilterは使えないのでしょうか? struts2での書き方が分からず困っています。 アドバイスをお願いいたします。

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

Filterの順番以前の問題だったわ。。。 そのエラーの内容を直訳すれば原因はわかる・・・かも。 ちょっとわかりづらい内容だけど。 とりあえずその500エラーの原因は Filterの順番じゃなくて web.xml内の記述の順番に問題があるのよ。 まずはそれを直してからね。 その上でダメならまた相談に乗るわ。

gachapinga74
質問者

お礼

アドバイスありがとうございました。 色々と動かしているうちに、なんとか動くようになりました。 web.xmlからのsessionFilterの記述は外して、FilterDispatcher起動時にIntercepterして セッションタイムアウトのチェック処理を動かすようにしました。

gachapinga74
質問者

補足

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を通さないといけないということでしょうか?

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

> 挙動がおかしい どうおかしいのかしら? 一番に思いつく原因は Filterの順番がよくない てことだけど。

gachapinga74
質問者

補足

ご回答ありがとうございます。 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が後で動いているからですかね?

関連するQ&A