我想为2个单独的servlet使用2个过滤器。第一个过滤器用于第一个servlet:foodtypeServlet
,第二个过滤器用于第二个servlet:menuServlet
。在第二个过滤器中,当出现错误时,我想转发到foodtypeServlet
。但问题是,当我转发到foodtypeServlet
时,过滤器这个servlet也会被执行。我不希望它被执行。我怎样才能实现它?
答案 0 :(得分: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
调度程序上调用过滤器,而不是FORWARD
,INCLUDE
或ERROR
。为此,您必须在过滤器映射中明确指定<dispatcher>
条目。
也许您正在使用Servlet 2.3?在那个古老的版本中,任何过滤器确实默认在前进上调用。您需要至少升级到Servlet 2.4,或者让过滤器检查是否存在javax.servlet.forward.request_uri
属性,如果是,则只需调用chain.doFilter(request, response)
即可绕过过滤器调用。