質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

11144閲覧

tomcatのリダイレクト方法

regist153

総合スコア30

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/03/05 14:34

サーバ環境として、tomcatとstruts2+springを使用しています。
最初に、やりたいことを整理します。
・web/test.actionにアクセスされた場合は、www.google.comに転送する。
・web/test.action以外のweb/*にアクセスされた場合は、struts2に制御を渡す。
・Actionなどjavaのコードには手を加えず、web.xmlとjspなどコンパイル不要な設定だけで実現したい。

tomcatでリダイレクトする方法として、以下のようにservlet-mappingを指定し、redirector.jspから任意の場所に転送させる方法を検討しています。
<servlet>
<servlet-name>Redirector</servlet-name>
<jsp-file>/redirector.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Redirector</servlet-name>
<url-pattern>/web/*</url-pattern>
</servlet-mapping>

デフォルトのweb.xmlに対して上記を設定すると意図通り転送されるのですが、以下のstruts2のfilter-mappingを設定していると転送されません。
理由としては、先にStrutsPrepareAndExecuteFilterからActionが呼び出され、viewの作成まで完了するからだと想像しているのですが、、
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/web/*</url-pattern>
</filter-mapping>

例えばfilter-mappingに除外パターンがあれば、意図通り動作させることができると思うのですが、そのような設定はできないようなので。
上記に記載したやりたいことを実現する方法として、何か良い案はありますでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サーブレットフィルタ(以下フィルタと略します)は、URLのマッピングに合致する全てのURLで動作するサーブレット・JSPの前後で動こうとします。そのためStruts2用のフィルタにて、/web/* を指定していると、リダイレクト用のJSPよりもStruts2用のフィルタが優先して動きます。

なお、お気づきのとおり、filter-mappingには除外設定がありません。
そのため、特定の拡張子actionだけを除外することもできませんので、別途フィルタクラスを作成し、Struts2用のフィルタより手前に配置することで実現はできるでしょう。

投稿2016/03/06 09:44

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

regist153

2016/03/06 13:02

回答ありがとうございます。 別途リダイレクトするためのフィルタクラスの作成が必要になりますが、やりたいことの1と2はこれで実現できそうですね。 これが最善に思えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問