質問: サーバ環境として、tomcatとstruts2+springを使用しています。 最初に、やりたいことを整理します。 ・web/test.actionにアクセスされた場合は、www.google.comに転送する。 ・web/test.action以外のweb/*にアクセスされた場合は、struts2に制御を渡す。 ・Actionなどjavaのコードには手を加えず、web.xmlとjspなどコンパイル不要な設定だけで実現したい。 tomcatでリダイレクトする方法として、以下のようにservlet-mappingを指定し、redirector.jspから任意の場所に転送させる方法を検討しています。 Redirector /redirector.jsp 1 Redirector /web/* デフォルトのweb.xmlに対して上記を設定すると意図通り転送されるのですが、以下のstruts2のfilter-mappingを設定していると転送されません。 理由としては、先にStrutsPrepareAndExecuteFilterからActionが呼び出され、viewの作成まで完了するからだと想像しているのですが、、 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /web/* 例えばfilter-mappingに除外パターンがあれば、意図通り動作させることができると思うのですが、そのような設定はできないようなので。 上記に記載したやりたいことを実現する方法として、何か良い案はありますでしょうか。 よろしくお願いいたします。
回答: サーブレットフィルタ(以下フィルタと略します)は、URLのマッピングに合致する全てのURLで動作するサーブレット・JSPの前後で動こうとします。そのためStruts2用のフィルタにて、/web/* を指定していると、リダイレクト用のJSPよりもStruts2用のフィルタが優先して動きます。 なお、お気づきのとおり、filter-mappingには除外設定がありません。 そのため、特定の拡張子actionだけを除外することもできませんので、別途フィルタクラスを作成し、Struts2用のフィルタより手前に配置することで実現はできるでしょう。