Apache Tomcatバージョン7.0.26が動作しています。Tomcatのサーブレット上のフィルタの優先順位
JAX-RSサーブレットは/ testの下にあり、tournでTomcatサーブレットエンジンによって処理されるべきjspを呼び出します。
など、 /test
はジャージーで処理する必要がありますが、/test/result.jsp
はJSPエンジンで処理する必要があります。
私はユーザーに別のURLを見せたくないので、jsp URLを/ jspに内部的に書き換えます。
構成は、そのようなものである:(urlrewrite.xml
で)
<rule>
<from>^/([^j][^s][^p].*\.jsp)</from>
<to>/jsp/$1</to>
</rule>
web.xml
:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<!-- set the amount of seconds the conf file will be checked for reload
can be a valid integer (0 denotes check every time,
empty/not set denotes no reload check) -->
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>0</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
/xyz.jsp
にコールが/jsp/xyz.jsp
にリダイレクトされます。 /test/xyz.jsp
への電話は404 - Servlet Test is not available
につながります。私はフィルタがサーブレットよりも優先されると思っていましたか?
私は関連する質問Servlet vs Filterを知っていますが、優先順位について何も述べていません。
BTW:PrettyFacesはUrlRewriteFilterと似ているようですが、まだ試していません。私は(現在)よりUrlRewriteFilterのようです。
EDIT:質問How to mix server-side Jax-rs call with native files without prefix?は私の質問の背後にある質問をします。
素晴らしいです。各ジャージーフィルターの '@ PATH'指示文を適合させるために注意を払わなければなりません。 – koppor
一方、パラメータとしてjspファイルを含むViewableを返します。私はFilterForwardOn404もオフにしました。通常のコードでは、コードによって作成された404も前方につながります。これは必ずしも望ましいものではありません(設定に応じて)。 – koppor
filter-mappingを使用してベースURLを指定できますか? –