SpringMVC工作流程

2022-05-13 12:39:35 浏览数 (1)

image.png

讲解看大牛 牛大 牛二

  • 1、 用户发送请求至前端控制器DispatcherServlet。 DispatcherServlet工作原理:它重写父类FrameworkServlet的doService方法,doService中主要设置了一些属性和调用doDispatch方法,doDispatch用来做分发请求和流程控制doDispatch方法解析
  • 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  • 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 这一步会调用getHander返回一个HandlerExecutionChain包含处理器和处理器拦截器
  • 4、 DispatcherServlet调用HandlerAdapter处理器适配器。 获取适配器是通过遍历handlerAdapters列表找的,HandlerAdapter包含了3个方法. boolean supports(Object handler); ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; long getLastModified(HttpServletRequest request, Object handler);
  • 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
  • 6、 Controller执行完成返回ModelAndView。
  • 7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 处理器适配器中applyPreHandle中会遍历该HandlerExecutionChain中所有的拦截器,然后使用拦截器通过preHandle对handler进行预处理,如果所有的拦截器都能处理那就会继续往下执行,如果一旦有一个拦截器不能处理,就没必要往下走了,那就会触发triggerAfterCompletion方法,在triggerAfterCompletion中它是倒序遍历的拦截器的,执行完triggerAfterCompletion返回false之后doDispatch这个方法就执行结束了,下面的八、九、十、十一就不再执行。从第五步括号里的备注也能猜出来HandlerExecutionChain.handler处理器是什么,它可以是Controller。
  • 8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
  • 9、 ViewReslover解析后返回具体View
  • 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 注意: 渲染视图是前端控制器做的而不是视图解析器
  • 11、 DispatcherServlet响应用户。

源码分析:

https://www.jianshu.com/p/8a20c547e245

0 人点赞