对单独的servlet请求使用单独的过滤器;防止servlet上的转发调用过滤器

时间:2012-11-05 15:47:18

标签: servlets servlet-filters

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

1 个答案:

答案 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调度程序上调用过滤器,而不是FORWARDINCLUDEERROR。为此,您必须在过滤器映射中明确指定<dispatcher>条目。

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

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