doFilter没有被调用

你能帮忙检查为什么doFilter没有被调用

web.xml中:

   log4jConfigLocation /WEB-INF/log4j.properties   org.springframework.web.util.Log4jConfigListener   roseFilter net.paoding.rose.RoseFilter   roseFilter /* REQUEST FORWARD INCLUDE   

class级签名:

 import org.springframework.web.filter.GenericFilterBean; public class RoseFilter extends GenericFilterBean { 

调用http:// localhost:8080 / hello / world时返回404,我在doFilter设置断点,看来doFilter没调用?(我试过tomcat 6.0.18,6.0.29,jdk1.6)

在以下情况下不会调用filter:

  1. 类路径中缺少filter类和/或不可加载或可实例化。 但是,您应该在服务器的启动日志中注意到它。 根据服务器日志中发现的exception/错误的解释,找到解决方案。

  2. 在链中运行的另一个filter没有调用FilterChain#doFilter() ,而是调用RequestDispatcher#forward()include() ,这导致链中的后续filter被完全跳过(当他们不听FORWARDINCLUDE调度程序;它们默认只侦听REQUEST调度程序)。 解决方法是修复错误的filter,或者相应地添加FORWARD等,或重新排列web.xml的filter声明,以便新filter位于另一个filter之前 (您只需要确保您的新filter正确使用FilterChain#doFilter() :))。

  3. 请求URL是完全错误的。 您使用了http:// localhost:8080 / hello / world 。 使用filter监听/* ,这意味着webapp上下文应该是ROOT或至少/hello 。 validation您的webapp上下文。 我只是使用一个URL重试,该URL指向同一webapp中的有效JSP / Servlet,它生成非404响应。 那么filter也会被调用吗?

Web请求是什么样的? 您可以尝试将您的url格式更改为* .jsp而不是/ *吗? 如果您使用的不是纯JSP,那么将其更改为请求结束扩展名(如struts通常为* .do)。