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

Java Spring MVC执行顺序:过滤器和拦截器,java,spring,spring-mvc,servlets,Java,Spring,Spring Mvc,Servlets,我正在开发一个SpringMVC应用程序,它使用过滤器实现和拦截器扩展 据我所知,Spring MVC的控制流是这样的: 请求到达DispatcherServlet DispatcherServlet将其发送到拦截器并执行重写的预处理方法 请求到达匹配的控制器 在处理请求之后,如果拦截器的postHandle方法也被覆盖,Spring将执行其代码 DispatcherServlet使用视图解析程序将模型发送到视图,并对其进行渲染 在做一些测试时,我可以看到我的过滤器总是在preHandle方法之

我正在开发一个SpringMVC应用程序,它使用过滤器实现和拦截器扩展

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

  • 请求到达
    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
    之后执行的第一件事。这是不对的。看见