Servlet过滤器url-mapping / *不能处理404错误

时间:2013-01-06 11:42:30

标签: java apache servlet-filters resin

我正在使用Resin Server& Apache 2.2具有虚拟主机。 在这里,我正在面临一个调用混凝土过滤器的巨大挑战。 我有一个通用的Filter类来处理所有传入的请求。

Ex:www.example.com/hello这个问候语没有调用下面的过滤器,而是抛出找不到错误的文件(404)。

如果“hello”具有正确的servlet映射,则下面的过滤器正在工作。

Web.xml:

<filter>
  <filter-name>CorpFilter</filter-name>
  <filter-class>com.filter.CorpFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorpFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Apache日志:

  

[Fri Jan 04 22:05:07 2013] [错误] [客户端xxx.xxx.xxx.xxx]文件   不存在:/ home / xxxx / public_html / hello

为什么没有调用servlet过滤器并抛出404错误? Servlet过滤器正在初始化。

谢谢,

1 个答案:

答案 0 :(得分:3)

默认情况下,会在成功请求时调度过滤器。默认情况下,它们不会根据错误请求进行调度。为了在错误的请求上发送它们,请使用适当的<dispatcher>元素展开过滤器映射:

<filter-mapping>
    <filter-name>CorpFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

请注意,在指定自定义调度程序类型并且您希望保留默认的REQUEST调度程序时,您应该明确指定它。请注意,我还假设404代理不是由Web代理(Apache HTTPD)处理,而是由servlet容器(Resin)本身处理,原因很明显。