У меня работает Apache Tomcat версии 7.0.26.
A имеет сервлет JAX-RS в / test, который вызывает jsps, который в tourn должен обрабатываться механизмом сервлета Tomcat.
Например, /test
должно обрабатываться джерси, но /test/result.jsp
должно обрабатываться механизмом JSP.
Я не хочу, чтобы пользователь видел разные URL, поэтому япереписать URL-адреса jsp в / jsp для внутреннего использования.
Конфиг выглядит так:
UrlRewriteFilter (в 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 , но они ничего не говорят о приоритете.
Кстати: PrettyFaces похоже на UrlRewriteFilter, но я еще не пробовал.Мне (в настоящее время) больше нравится UrlRewriteFilter.
РЕДАКТИРОВАТЬ: Вопрос Как смешать вызов Jax-rs на стороне сервера с собственными файлами без префикса? задает вопрос, стоящий за моим вопросом.