Struts [FAQ]

実際に起きたトラブルと解決方法をメモしてゆきます。
更新日 2016-02-13

例外

例外発生に関するトラブルです。

HTTPステータス 404 - サーブレット action が利用できません

リクエスト文字列とアクションの対応がなっていない場合が考えられますが、それだけとは限りません。Tomcat はStruts を 管理する訳ですが、Struts サイドの設定にミスがある場合、そのStruts フレームワークを正しく初期化・実運用できていない 場合があるからです。この場合、今まで呼べていたアクションまで失敗します。
(またややこしい事に同じロケーションにあるJSP は問題無く呼べたりします。それはTomcat のJSP エンジンで処理が完結しているからです。)
まずはログを見て、初期化時に例外等が投げられていないかチェックしましょう。

404 Not Found ページをカスタマイズしたい。

無効なリクエストパスに対して返されるTomcat のフッターが付いたエラーページを独自の物に置き換えるには、$CATALINA_HOME/conf/web.xml か Struts アプリケーション配下の/WEB-INF/web.xml にerror-page タグを記述します。
</welcome-file-list>

<error-page>
   	<error-code>404</error-code>
   	<location>/404_notfound.jsp</location>
</error-page>

セッション回り

セッションID をURL に含める時の問題点

セッションID を含んだURL を他人に渡した場合、セッションも引き継がれてしまいます。Cookie をコピーして渡すケースはイレギュラーですが、 URL を渡すのは有り得る事です。そこでURL 中にセッションID が含まれる時、そしてアクセス元IP アドレスが前回のアクセス時と違う時は セッションを無効にするとか、新規のセッションIDを含むURL にリダイレクトさせるといった処理を実装するべきでしょう。 セッションがタイムアウトしているとセッションID も無効になります。この場合も上記のリダイレクトを行うべきでしょう。