SpringMVC执行流程
#SpringMVC的执行流程
对于 Http
请求, Tomcat 执行了 HttpServlet#service
方法,继承了 HttpServlet
的 FrameWorkServlet
是执行 doService
方法,而 SpringMVC 的 DispatcherServlet
则是继承了 FrameWorkServlet
,进入到 SpringMVC 的流程中,在 DispatcherServlet
的流程如下
- 先通过
HandlerMapping
拿到request对应的HandlerExecutionChain
,然后再拿到HandlerExecutionChain
中handler对应的HandlerAdapter
,执行HandlerExecutionChain
中interceptor#prehandle
方法。(责任链模式) - 再通过
HandlerAdapter
去执行handler,handler其实对应的是之前注册的HandlerMethod
(handlerMethod里面封装的映射的真正方法 handler还有可能是原生的Servlet),所以要执行handler.invoke
,不过在这之前要去判断参数,这一步需要参数解析器HandlerMethodArgumentResolver
。反射调用完之后,需要调用返回值解析器HandlerMethodReturnValueHanlder
(适配器模式&组合模式&策略模式) - 真正方法执行完了之后,再执行
HandlerExecutionChain
中interceptor#posthandle
方法进行拦截器的后置处理。 - SpringMVC执行完之后返回的是
ModelAndView
,我们还需要对ModelAndView
进行render,即把ModelAndView
中的view渲染到response中 - 当发生异常时,会将异常拉到用户业务自己的异常处理方法中,这时也需要对参数和返回值进行custom,此时就需要用到
HandlerExceptionResolver
系列了。因为用户标记的@ExceptionHandler
方法已经被ExceptionHandlerMethodResolver
找到并且注册(key为对应异常,value为对应方法),只需要调用该方法就可以对异常进行处理,此时的方法调用和之前的handler几乎没有区别
- 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