2

我想为 2 个单独的 servlet 使用 2 个过滤器。第一个过滤器用于 1st servlet: foodtypeServlet,第二个过滤器用于 2nd servlet: menuServlet。在第二个过滤器中,当出现错误时,我想转发到foodtypeServlet. 但问题是,当我转发到 时foodtypeServlet,这个 servlet 的过滤器也会被执行。我不希望它被执行。我怎样才能实现它?

4

1 回答 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 FORWARDINCLUDEnor ERROR。为此,您必须明确指定<dispatcher>过滤器映射中的条目。

也许您正在使用 Servlet 2.3?在那个古老的版本中,默认情况下,任何过滤器都确实在转发时调用。您需要至少升级到 Servlet 2.4,或者让过滤器检查javax.servlet.forward.request_uri属性是否存在,如果是,则只需调用chain.doFilter(request, response).

或者,也许您实际上是在重定向而不是转发?在这种情况下,您应该执行真正的forward而不是redirect

于 2012-11-09T14:07:00.070 回答