一、 SpringMVC的相关组件
1. DispatcherServlet
前端控制器(中央控制器),是整个请求响应的控制中心,统一调度其他组件,处理用户的请求
2. HandlerMapping
处理器映射器,根据请求的url等信息来查找具体的Handler,将改Handler实例返回前端控制器
3. HandlerAdapter
处理器适配器,根据Handler实例信息,按照特定的规则去执行相关的Handler
4. ViewResolver
视图解析器,负责将逻辑视图解析成具体的视图
5. Handler、HandlerMapping、HandlerAdapter的区别
Handler 是用来干活的工具;
HandlerMapping 用于根据需要干的活找到相应的工具;
HandlerAdapter 是使用工具干活的人。
二、 整体工作流程
- DispatcherServlet 接收到客户端发送的请求。判断是普通请求,上传文件的请求。
- DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
- HandleMapping 根据请求 URI 找到对应的控制器以及拦截器,组装成 HandlerExecutionChain 读写。将此对象返回给 DispatcherServlet,做下一步处理。
- DispatcherServlet 调用 HanderAdapter 处理器适配器。这里是适配器设计模式,进行接口转换,将对一个接口调用转换为其他方法。
- HandlerAdapter 根据执行控制器方法,也就是开发人员写的 Controller 类中的方法,并返回一个 ModeAndView
- HandlerAdapter 返回 ModeAndView 给 DispatcherServlet
- DispatcherServlet 调用 ViewResolver 视图解析器来 来解析 ModeAndView
- ViewResolver 解析 ModeAndView 并返回真正的 View 给 DispatcherServlet
- DispatcherServlet 将得到的视图进行渲染,填充 Model 中数据到 request 域
- 返回给客户端响应结果
注:
如果有异常,会在第6步后,DispatcherServlet 调用 HandlerExceptionResolver 处理异常,有异常返回包含异常的 ModelAndView,然后继续第7步的处理。