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
