我正在使用Resin Server&Apache 2.2与虚拟主机。 在这里,我正面临着一个具体的filter的挑战。 我有一个通用的Filter类来处理所有传入的请求。
例如:www.example.com/hello这个hello没有调用下面的filter,而是抛出文件未find错误(404)。
如果“你好”有一个适当的servlet映射,那么下面的filter正在工作。
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] [error] [client xxx.xxx.xxx.xxx]文件不存在:/ home / xxxx / public_html / hello
为什么servletfilter没有被调用并抛出404错误? Servletfilter正在初始化。
谢谢,
过滤器默认是在成功请求时分派的。 默认情况下,它们不是根据错误的请求发送的。 为了在错误的请求中分配它们,使用适当的<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)本身处理的,原因很明显。