Spring MVC 简介及工作流程
目录
1、简介
SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。
使用了MVC架构模式的思想,将web层进行职责解耦,并管理应用所需对象的生命周期,为简化日常开发,提供了很大便利。
SpringMVC提供了:
- 总开关
DispatcherServlet
;
- 请求处理映射器(Handler Mapping)
- 处理适配器(Handler Adapter)
- 视图解析器(View Resolver)进行视图管理;
- 动作处理器Controller接口(包含
ModelAndView,以及处理请求响应对象request和response)等
配置灵活,支持文件上传,数据简单转化等强大功能。
2、工作流程及原理
关键步骤:
1、客户请求:客户通过URL发送请求;
2、获取请求相应的controller:核心控制器(DispatcherServlet)接受客户请求(request),然后通过系统或自定义的处理映射器(Handler Mapping),找到对应请求的处理器(Handler),然后,将URL映射的控制器controller返回给核心控制器;
3、执行相应的controller:核心控制器告知处理适配器要执行那个controller,然后,处理适配器执行相应的controller并且得到相应的返回值(数据和试图,ModelAndView);(思考:为什么不直接执行?还要去经过适配器去执行)
4、视图解析:核心控制器将数据和视图交给试图解析器进行解析,返回真正的视图;
5、响应:核心控制器将模型数据填充到视图中,进行渲染展示,最后将响应结果反馈给用户。
3、相关组件说明
- DispatcherServlet:前端控制器,也称为中央控制器,它是整个请求响应的控制中心,组件的调用由它统一调度。
- HandlerMapping:处理器映射器,它根据用户访问的 URL 映射到对应的后端处理器 Handler。也就是说它知道处理用户请求的后端处理器,但是它并不执行后端处理器,而是将处理器告诉给中央处理器。
- HandlerAdapter:处理器适配器,它调用后端处理器中的方法,返回逻辑视图 ModelAndView 对象。
- ViewResolver:视图解析器,将 ModelAndView 逻辑视图解析为具体的视图(如 JSP)。
- Handler:后端处理器,对用户具体请求进行处理,也就是我们编写的 Controller 类。
4、疑问与思考
1)为什么不直接执行controller?而是通过处理适配器去执行controller?
参考:实现解耦。
SpringMVC为业务处理器提供了多种接口实现(例如实现了Controller接口),而适配器就是用来根据处理器实现了什么接口,最终选择与已经注册好的不同类型的Handler Adapter进行匹配,并最终执行。
例如,SimpleControllerHandlerAdapter是支持实现了controller接口的控制器,如果自己写的控制器实现了controller接口,那么SimpleControllerHandlerAdapter就会去执行自己写的控制器中的具体方法来完成请求。