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

问题描述 投票:11回答:1

我正在开发一个Spring MVC应用程序,该应用程序使用实现javax.servlet.Filter的过滤器和扩展javax.servlet.Filter的拦截器。

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

  1. 请求到达org.springframework.web.servlet.handler.HandlerInterceptorAdapter
  2. [DispatcherServlet将其发送到DispatcherServlet,并执行重写的Interceptor方法。
  3. 请求到达匹配的控制器。
  4. 处理完请求后,如果拦截器的preHandle方法也被覆盖,Spring将执行其代码。
  5. [postHandle使用视图解析器并将模型发送到视图,进行渲染。

进行一些测试,我可以看到我的过滤器始终在DispatcherServlet方法之前执行。它似乎是preHandle之后的第一个执行的事物。可以,但是我找不到这种行为的原因。有人有很好的解释吗?

谢谢!

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

java spring spring-mvc servlets
1个回答
14
投票

完全可以DispatcherServlet是Servlet规范的一部分。

Filter's由您的Filters调用。而拦截器由Server(tomcat)调用。

© www.soinside.com 2019 - 2024. All rights reserved.