Ich habe Apache Tomcat Version 7.0.26 ausgeführt.Vorrang des Filters über Servlet in Tomcat
A habe ein JAX-RS-Servlet unter/test, das jsps aufruft, die in der Tourn von der Tomcat-Servlet-Engine behandelt werden sollten. B. /test
sollte von Trikot behandelt werden, aber /test/result.jsp
sollte von der JSP-Engine gehandhabt werden.
Ich möchte nicht, dass der Benutzer verschiedene URLs sehen, daher schreibe ich die JSP-URLs intern in/JSP um.
Config ist so:
UrlRewriteFilter (in 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>
Ein Aufruf von /xyz.jsp
an /jsp/xyz.jsp
umgeleitet. Ein Anruf an /test/xyz.jsp
führt zu 404 - Servlet Test is not available
. Ich dachte, dass Filter Vorrang vor Servlets haben, nicht wahr?
Ich bin mir der verwandten Frage Servlet vs Filter bewusst, aber sie geben nichts über den Vorrang.
BTW: PrettyFaces scheint zu UrlRewriteFilter ähnlich zu sein, aber ich habe es noch nicht ausprobiert. Ich (derzeit) mag UrlRewriteFilter mehr.
EDIT: Die Frage How to mix server-side Jax-rs call with native files without prefix? fragt die Frage hinter meiner Frage.
Funktioniert gut. Man muss darauf achten, die @ PATH-Direktive jedes Jersey-Filters anzupassen. – koppor
In der Zwischenzeit gebe ich ein Viewable mit der JSP-Datei als Parameter zurück. Ich habe auch FilterForwardOn404 ausgeschaltet, weil bei normalem Code ein 404, der durch den Code erzeugt wird, auch zu einem Forward führt, was nicht immer wünschenswert ist (abhängig vom Setup). – koppor
Kann eine Basis-URL mit Filter-Mapping angegeben werden? –