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

时间:2014-11-13 12:28:50

标签: java spring spring-mvc servlets

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

javax.servlet.Filter

和拦截器扩展:

org.springframework.web.servlet.handler.HandlerInterceptorAdapter

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

  1. 请求到达DispatcherServlet。
  2. DispatcherServlet将其发送给Interceptor,并执行覆盖的preHandle方法。
  3. 请求到达匹配的控制器。
  4. 处理完请求后,如果拦截的postHandle方法也被覆盖,则Spring执行其代码。
  5. DispatcherServlet使用视图解析器并将模型发送到视图,然后呈现它。
  6. 做一些测试我可以看到我的过滤器总是在preHandle拦截器方法之前执行。它似乎是DispatcherServlet之后的第一个执行的东西。没关系,但我找不到这种行为的原因。有个好解释的人?

    谢谢!

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

1 个答案:

答案 0 :(得分:12)

完全没问题 Filter's是Servlet规范的一部分。

您的Filters会调用

Server(tomcat)。拦截器由Spring调用。