SpringMVC执行流程

cccs7 Lv5

#SpringMVC的执行流程
对于 Http 请求, Tomcat 执行了 HttpServlet#service 方法,继承了 HttpServletFrameWorkServlet 是执行 doService 方法,而 SpringMVC 的 DispatcherServlet 则是继承了 FrameWorkServlet,进入到 SpringMVC 的流程中,在 DispatcherServlet 的流程如下

  1. 先通过HandlerMapping拿到request对应的HandlerExecutionChain,然后再拿到HandlerExecutionChain中handler对应的HandlerAdapter,执行HandlerExecutionChaininterceptor#prehandle方法。(责任链模式)
  2. 再通过HandlerAdapter去执行handler,handler其实对应的是之前注册的HandlerMethod(handlerMethod里面封装的映射的真正方法 handler还有可能是原生的Servlet),所以要执行handler.invoke,不过在这之前要去判断参数,这一步需要参数解析器HandlerMethodArgumentResolver。反射调用完之后,需要调用返回值解析器HandlerMethodReturnValueHanlder(适配器模式&组合模式&策略模式)
  3. 真正方法执行完了之后,再执行HandlerExecutionChaininterceptor#posthandle方法进行拦截器的后置处理。
  4. SpringMVC执行完之后返回的是ModelAndView,我们还需要对ModelAndView进行render,即把ModelAndView中的view渲染到response中
  5. 当发生异常时,会将异常拉到用户业务自己的异常处理方法中,这时也需要对参数和返回值进行custom,此时就需要用到 HandlerExceptionResolver 系列了。因为用户标记的 @ExceptionHandler 方法已经被 ExceptionHandlerMethodResolver 找到并且注册(key为对应异常,value为对应方法),只需要调用该方法就可以对异常进行处理,此时的方法调用和之前的handler几乎没有区别
    image.png
  • Title: SpringMVC执行流程
  • Author: cccs7
  • Created at : 2025-03-23 16:12:00
  • Updated at : 2025-03-23 16:20:12
  • Link: https://cs7eric.github.io/2025/03/23/SpringMVC执行流程/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
SpringMVC执行流程