У меня есть версия Apache Tomcat версии 7.0.26.Приоритет фильтра над сервлетом в Tomcat
A есть сервлет JAX-RS под/test, который вызывает jsps, который в турнире должен обрабатываться движком сервлетов Tomcat.
E-mail: /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, но они ничего не говорят о приоритете.
BTW: PrettyFaces похоже, похоже на UrlRewriteFilter, но я еще не пробовал его. Я (в настоящее время), например, UrlRewriteFilter.
EDIT: вопрос How to mix server-side Jax-rs call with native files without prefix? задает вопрос позади моего вопроса.
Отлично работает. Нужно обратить внимание на адаптацию директивы '@ PATH' каждого фильтра Джерси. – koppor
Между тем, я возвращаю Viewable с файлом jsp в качестве параметра. Я также отключил FilterForwardOn404, потому что с нормальным кодом 404, созданный кодом, также приводит к переходу, что не всегда желательно (в зависимости от настройки). – koppor
Может ли базовый url указываться с помощью фильтрации фильтров? –