Java Spring MVC执行顺序:过滤器和拦截器
我正在开发一个SpringMVC应用程序,它使用过滤器实现和拦截器扩展 据我所知,Spring MVC的控制流是这样的:Java Spring MVC执行顺序:过滤器和拦截器,java,spring,spring-mvc,servlets,Java,Spring,Spring Mvc,Servlets,我正在开发一个SpringMVC应用程序,它使用过滤器实现和拦截器扩展 据我所知,Spring MVC的控制流是这样的: 请求到达DispatcherServlet DispatcherServlet将其发送到拦截器并执行重写的预处理方法 请求到达匹配的控制器 在处理请求之后,如果拦截器的postHandle方法也被覆盖,Spring将执行其代码 DispatcherServlet使用视图解析程序将模型发送到视图,并对其进行渲染 在做一些测试时,我可以看到我的过滤器总是在preHandle方法之
DispatcherServlet
DispatcherServlet
将其发送到拦截器
并执行重写的预处理
方法postHandle
方法也被覆盖,Spring将执行其代码DispatcherServlet
使用视图解析程序将模型发送到视图,并对其进行渲染preHandle
方法之前执行。它似乎是继DispatcherServlet之后执行的第一件事。没关系,但我找不到这种行为的原因。有人能解释清楚吗
谢谢
更新:可能性:这是因为filter是在web.xml
中定义的(就像DispatcherServlet
),所以filter是在DispatcherServlet
之前执行的?它完全可以
过滤器
是Servlet规范的一部分
过滤器由服务器(tomcat)
调用。虽然拦截程序是由Spring
调用的,但在阅读您的评论时,我发现:“Servlet在请求发送到Servlet之前进行过滤,并在Servlet代码完成之后以及容器将响应发送回客户机之前进行响应。”DispatcherServlet是一个Servlet,所以在它之前执行请求过滤器是正常的。但同样重要的是要知道响应过滤器是在之后执行的!“Servlet在将请求发送到Servlet之前对其进行过滤,并在Servlet代码完成之后以及容器将响应发送回客户端之前进行响应。”来自。它似乎是在DispatcherServlet
之后执行的第一件事。这是不对的。看见