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:
-
类路径中缺少filter类和/或不可加载或可实例化。 但是,您应该在服务器的启动日志中注意到它。 根据服务器日志中发现的exception/错误的解释,找到解决方案。
-
在链中运行的另一个filter没有调用
FilterChain#doFilter()
,而是调用RequestDispatcher#forward()
或include()
,这导致链中的后续filter被完全跳过(当他们不听FORWARD
或INCLUDE
调度程序;它们默认只侦听REQUEST
调度程序)。 解决方法是修复错误的filter,或者相应地添加
等,或重新排列FORWARD web.xml
的filter声明,以便新filter位于另一个filter之前 (您只需要确保您的新filter正确使用FilterChain#doFilter()
:))。 -
请求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)。