Spring MVC执行顺序:过滤器和拦截器

Emi*_*lio 10 java spring servlets spring-mvc

我正在开发一个使用过滤器实现的spring-mvc应用程序:

javax.servlet.Filter
Run Code Online (Sandbox Code Playgroud)

和拦截器扩展:

org.springframework.web.servlet.handler.HandlerInterceptorAdapter
Run Code Online (Sandbox Code Playgroud)

据我所知,Spring MVC的控制流程是这样的:

  1. 请求到达DispatcherServlet.
  2. DispatcherServlet将它发送到Interceptor,并执行覆盖的preHandle方法.
  3. 请求到达匹配控制器.
  4. 处理完请求后,如果拦截器的postHandle方法也被覆盖,则Spring执行其代码.
  5. DispatcherServlet使用视图解析器并将模型发送到视图,然后呈现它.

做一些测试我可以看到我的过滤器总是在preHandle拦截器方法之前执行.它似乎是DispatcherServlet之后的第一个执行的东西.没关系,但我找不到这种行为的原因.有人有一个很好的解释?

谢谢!

更新:可能性:这是因为过滤器是在web.xml中定义的(如DispatcherServlet)所以Filter在DispatcherServlet之前执行?

San*_*shi 14

它是完美的,因为它 Filter's是Servlet规范的一部分.

Filters被你的Server(tomcat).而拦截器被称为Spring.