【问题标题】:Spring MVC Execution Order: Filter and InterceptorSpring MVC 执行顺序:过滤器和拦截器
【发布时间】:2015-01-10 14:24:09
【问题描述】:

我正在开发一个 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 使用视图解析器并将模型发送到视图并进行渲染。

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

谢谢!

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

【问题讨论】:

标签: java spring spring-mvc servlets


【解决方案1】:

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

Filters 由您的Server(tomcat) 调用。而拦截器由Spring 调用。

【讨论】:

  • 谢谢,阅读您的评论后,我发现:“Servlet 过滤器在将请求发送到 servlet 之前处理请求,并在 servlet 代码完成后和容器将响应发送回客户端之前处理请求。”而且 DispatcherServlet 是一个 Servlet,所以在它之前执行请求过滤器是很正常的。但同样重要的是要知道响应过滤器是在之后执行的!
  • “Servlet 过滤器在请求被发送到 servlet 之前处理请求,并在 servlet 代码完成后和容器将响应发送回客户端之前进行响应。” 来自Java Servlet Filter Example Tutorial - JournalDev .
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2014-05-19
  • 2011-04-24
  • 1970-01-01
相关资源
最近更新 更多