Servlet过滤器 - 来自servlet的转发请求是否会转到servlet过滤器?

时间:2015-06-26 05:38:17

标签: java servlets servlet-filters

如果任何J2EE应用程序直接命中servlet,然后servlet将相同的请求转发到某个.jsp页面。

request.getRequestDispatcher("Login.jsp").forward(request, response);

我有一个servlet过滤器,下面是url-pattern

<filter-mapping>
    <filter-name>some_filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

那么,转发请求是否也会过滤。

在我的情况下它不会来,这是一个预期的行为。只想了解这一点。

2 个答案:

答案 0 :(得分:12)

如果要为转发请求调用过滤器映射,则必须将其放在web.xml中

自Servlet2.4以来,这种支持就在那里

<filter-mapping>
  <filter-name>myfilter</filter-name>
  <url-pattern>/mypath/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>REQUEST</dispatcher>
</filter-mapping>

调度程序支持的值为:

  • 请求:请求直接来自客户端。这由值为<dispatcher>的{​​{1}}元素指示,或由。{ 没有任何REQUEST元素。

  • FORWARD :正在请求调度程序下处理请求,该请求调度程序使用<dispatcher>调用表示与<url-pattern><servlet-name>匹配的Web组件。 这由值为forward()的{​​{1}}元素表示。

  • INCLUDE :正在请求调度程序下处理请求,该请求调度程序使用<dispatcher>调用表示与FORWARD<url-pattern>匹配的Web组件。 这由值为<servlet-name>的{​​{1}}元素表示。

  • 错误:正在使用“错误处理”中指定的错误页面机制处理与include()匹配的错误资源的请求。这由<dispatcher>元素表示,其值为INCLUDE

  • ASYNC :正在使用“异步处理”中指定的异步上下文调度机制使用调度调用将请求处理到Web组件。 这由<url-pattern>元素表示,其值为<dispatcher>

答案 1 :(得分:0)

不,servlet过滤器不会再次被击中。转发发生在容器内部,因此链条会发生:

ServletFilter (if any) -> Servlet -> (JSP)

如果您要执行重定向,过滤器(具有适当的配置)将被命中,但这很可能不是您想要的。