0、目录
1、SpringMVC概述
1.1 为什么要使用SpringMVC
1.2 SpringMVC:理解MVC
说明:
传统MVC——>JSPModel2——>Front Controller + Application Controller + Page Controller + Context 三种模式是JavaWeb设计模式的逐渐适配和演进。本文分别讲述了这三种模式,作为了解即可。SpringMVC正是采用了第三种设计模式。
MVC
说明:
MVC是Xerox PARC在20世纪80年代为编程语言SmallTalk发明的一种软件设计模式。
MVC是一种设计模式,它强制性地把应用程序的数据展示、数据处理和流程控制分开。
MVC将应用程序分成3个核心模块:模型、视图、控制器,他们相互联结又分别担当不同的任务,如图示所示。
理解
-
模型:数据模型,提供要展示的数据,因此包含数据和行为,可以认为是JavaBean,一个模型可以为多个视图提供数据。
-
视图:负责模型的展示,一般就是我们见到的用户界面,客户想要看到的东西。
-
控制器:控制器负责应用的流程控制,所谓流程控制就是接受用户请求,委托给模型进场处理,后获取模型数据交由视图展示。
参考链接:【极客资源网】SprigMVC—理解MVC及快速入门
1.3 SpringMVC介绍
- Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型。
- 框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
- Spring Web MVC也是服务到工作者模式的实现,但进行可优化。
(1)前端控制器是DispatcherServlet;
(2) 应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;
(3)页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。
1.4 SpringMVC特点
(1)Spring MVC在Spring全家桶中的一员,与Spring框架能够进行友好的整合
(2)通过一套 MVC 注解,让开发效率显著提升,大多数企业都选择采用SpringMVC来做Web层。
(3)支持 REST 风格的 URL 请求
(4)采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性
(5)可以任意使用各种视图技术,而不仅仅局限于JSP
2、 Spring5.X框架结构图
说明:
由于SpringMVC是全家桶中的一员,所以它与Spring框架整合的时候,几乎不用什么配置。
SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先选择的框架。
3、SpringMVC 处理请求流程
流程说明:
1.用户发送请求至 前端控制器DispatcherServlet。
2.前端控制器DispatcherServlet收到请求后调用处理器映射器HandlerMapping。
3.处理器映射器HandlerMapping根据请求的Url找到具体的处理器,生成处理器对象Handler及处理器拦截器HandlerIntercepter(如果有则生成)一并返回给前端控制器DispatcherServlet。
4.前端控制器DispatcherServlet通过处理器适配器HandlerAdapter调用处理器Controller。
5.执行处理器(Controller,也叫后端控制器)
6.处理器Controller执行完后返回ModelAnView。
7.处理器映射器HandlerAdapter将处理器Controller执行返回的结果ModelAndView返回给前端控制器DispatcherServlet。
8.前端控制器DispatcherServlet将ModelAnView传给视图解析器ViewResolver。
9.视图解析器ViewResolver解析后返回具体的视图View。
10.前端控制器DispatcherServlet对视图View进行渲染视图(即:将模型数据填充至视图中)
11.前端控制器DispatcherServlet响应用户。
更加生动的流程:
4、SpringMVC 六大组件介绍
(1)中央控制器(DispatcherServlet)
- 该组件无需程序员开发
- 用户请求到达前端控制器,它就相当于MVC模式中的C,DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
- 作用:作为接受请求,响应结果,相当于转发器,中央处理器,减少其他组件之间的耦合度。
(2)处理器映射器(HandlerMapping)
- 该组件无需程序员开发
- HandlerMapping负责根据用户请求找到Handler(处理器),springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
- 作用:根据请求的Url 查找Handler
(3)处理器适配器(HandlerAdapter)
- 该组件无需程序员开发
- 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
- 作用:按照特定的规则(HandlerAdapter要求的规则)去执行Handler
(4)处理器(Handler)
- 需要程序员开发,也就是我们所说的Controller请求处理类。
- Handler 是继DispatcherServlet中央控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
- 由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
- 注意:编写Handler时按照HandlerAdpter的要求去做,这样才可以去正确执行Handler。
(5)视图解析器(ViewResolver)
- 该组件无需程序员开发
- View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
- SpringMVC框架提供了很多View视图类型,包括:JSTLView、freemarkerView、pdfView等等.
- 作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)。
(6)View视图
-
需要程序员开发
-
View是一个接口,实现类支持不同的View类型(jsp、freemarker、volectiy)
-
一般情况下需要通过页面标签或者页面模板技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。