文章目录
- 二、SpringMVC的工作流程
- 2.1 SpringMVC的三大组件
- 2.1.1 HandlerMapping:
- 2.1.2 HandlerAdapter:
- 2.1.3 ViewResolver:
- 2.2 SpringMVC源码分析
- 2.2.1 准备工作
- 2.2.2 查看DispatcherServlet的继承体系:
- 2.2.3 通过映射器获取执行链:
- 1)查看HandlerMapping接口:
- 2)寻找HandlerMapping实现类:
- 2.2.4 获取执行handler的适配器
- 2.2.5 适配器执行handler
- 2.2.6 解析视图并渲染
- 2.2.7 View组件渲染
二、SpringMVC的工作流程
2.1 SpringMVC的三大组件
2.1.1 HandlerMapping:
主要功能:根据前端发送的请求来映射(通过反射)到具体的Handler(方法/类)上,用于找到handler
2.1.2 HandlerAdapter:
主要功能:使用不同的适配器来执行handler,返回ModelAndView(模型和视图对象);
2.1.3 ViewResolver:
主要功能:解析模型和视图进行数据的渲染;
1、客户端发送请求给前端控制器(DispatcherServlet)
2、dispatcherServlet接收到请求调用HandlerMapping处理器映射器
3、处理器映射器根据请求的url找对应的处理器,找到并生成处理器对象(handler)返回
4、dispatchServlet将handler传入处理器适配器,使用合适的适配器执行
5、处理器适配器执行handler
6、执行完成最终封装一个ModelAndView(模型和视图)
7、将ModelAndView返回给前端控制器
8、前端控制器将请求的路径交给视图解析器进行解析
9、视图解析器解析完毕后封装一个View对象给dispatcherServlet,此View对象封装了响应参数
10、View对象对其进行渲染
11、响应客户端
重点记住:
1)映射器来找到处理器(执行的方法)
2)适配器执行handler,返回ModelAndView
3)视图解析器解析ModelAndView,返回View
4)view对其进行渲染
2.2 SpringMVC源码分析
SpringMVC实质上是对servlet进行封装,让我们的开发更加简便
2.2.1 准备工作
我们可以在spring-webmvc-x.x.x.RELEASE.jar源码包下查看DispatcherServlet.properties文件看有哪些处理器是springmvc默认加载的
2.2.2 查看DispatcherServlet的继承体系:
我们发现DispatcherServlet最终还是继承与HttpServlet,那么我们就直接找service方法吧!
经打断点分析发现,最终会走向DispacherServlet的doDispacher方法!
此时请求进入DispatcherServlet,按照我们画图分析的结果应该是把请求交给处理器映射器HandlerMapping最终返回一个Handler:
2.2.3 通过映射器获取执行链:
我们再点击getHandler方法查看源码,发现最终是交给了映射器(HandlerMapping)来获取到执行链(对Handler的封装)
1)查看HandlerMapping接口:
2)寻找HandlerMapping实现类:
2.2.4 获取执行handler的适配器
在SpringMVC默认创建的众多适配器中选择合适的;
- 查看HandlerAdpter接口:
2.2.5 适配器执行handler
2.2.6 解析视图并渲染
DispatcherServlet对结果集进行渲染
如何渲染?
我们刚刚分析得知,应该需要视图解析器(ViewResolver来解析成一个View)
查看ViewResolver接口:
2.2.7 View组件渲染
查看View接口: