我想为 2 个单独的 servlet 使用 2 个过滤器。第一个过滤器用于 1st servlet: foodtypeServlet
,第二个过滤器用于 2nd servlet: menuServlet
。在第二个过滤器中,当出现错误时,我想转发到foodtypeServlet
. 但问题是,当我转发到 时foodtypeServlet
,这个 servlet 的过滤器也会被执行。我不希望它被执行。我怎样才能实现它?
问问题
223 次
1 回答
1
这不是默认行为,假设过滤器映射如下:
<filter-mapping>
<filter-name>foodtypeFilter</filter-name>
<servlet-name>foodtypeServlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>menuFilter</filter-name>
<servlet-name>menuServlet</servlet-name>
</filter-mapping>
默认情况下,过滤器仅在REQUEST
调度程序上调用,而不是 on FORWARD
,INCLUDE
nor ERROR
。为此,您必须明确指定<dispatcher>
过滤器映射中的条目。
也许您正在使用 Servlet 2.3?在那个古老的版本中,默认情况下,任何过滤器都确实在转发时调用。您需要至少升级到 Servlet 2.4,或者让过滤器检查javax.servlet.forward.request_uri
属性是否存在,如果是,则只需调用chain.doFilter(request, response)
.
于 2012-11-09T14:07:00.070 回答