Spring MVC - 概念篇
目录
1 SpringMVC 概述
1.1 SpringMVC 概念
SpringMVC
也叫Spring Web MVC
。是Spring内置的一个MVC框架,在Spring3.0后发布。SpringMVC框架解决了WEB开发中常见的问题(参数接收、文件上传、表单验证等等)
,而且使用简单,与Spring无缝集成。支持RESTful
风格的URL请求。采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性。
1.2 SpringMVC 原理
- 在没有使用SpringMVC之前我们都是使用
Servlet
在做Web开发。但是使用Servlet开发在接收请求参数、数据共享、页面跳转等操作相对比较复杂。Servlet是Java进行web开发的标准,既然SpringMVC是对Servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装。
1.3 SpringMVC 优势
- 基于MVC架构,功能分工明确。解决页面代码和后台代码的分离。
- 简单易用。SpringMVC也是轻量级的,jar很小。不依赖的特定的接口和类就可以开发一个注解的SpringMVC 项目。
- 作为Spring框架一部分,能够使用Spring的IoC和AOP 。方便整合MyBatis、Hiberate、JPA等其他框架。
- SpringMVC的注解强大易用。
2 MVC模式回顾
- 模型 1:
JSP + JavaBean
模型 - 在JSP页面中嵌入大量的Java代码 - 模型 2:
JSP + Servlet + JavaBean
模型 - JSP页面将请求发送给Servlet,由Servlet调用JavaBean,再由Servlet将制定JSP页面响应给用户。
模型 2 一般就是现在的MVC模式,也是我们一直使用的。
Model-View-Controller
:模型 - 视图 - 控制器Model
: 模型层JavaBean
负责数据访问和业务处理 -dao service pojo
View
: 视图JSP技术 - 负责收集和展示数据Controller
: 控制器Servlet技术 - 负责中间调度
控制器的工作:
- 接受客户端的请求(包括请求中携带的数据)
- 处理请求:调用后台的模型层中的业务逻辑
- 页面导航:处理完毕给出响应 - JSP页面
3 SpringMVC 工作流程
3.1 工作流程分析
- 用户通过浏览器发送请求到前端控制器
DispatcherServlet
。 - 前端控制器直接将请求转给处理器映射器
HandleMapping
。 - 处理器映射器HandleMapping会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链
HandlerExecutionChain
后返回给前端控制器DispatcherServlet。 - 前端控制器DispatcherServlet根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器
HandlerAdapter
。 - 处理器适配器HandlerAdaptor调用执行处理器
Controller
。 - 处理器Controller将处理结果及要跳转的视图封装到一个对象
ModelAndView
中,并将其返回给处理器适配器HandlerAdapter。 - 处理器适配器直接将结果返回给前端控制器DispatcherServlet。
- 前端控制器调用视图解析器,将ModelAndView中的视图名称封装为视图对象。
- 视图解析器
ViewResolver
将封装了的视图View
对象返回给前端控制器DispatcherServlet。 - 前端控制器DispatcherServlet调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
- 前端控制器响应浏览器。
3.2 SpringMVC 组件
-
DispatcherServlet
:前端控制器,也称为中央控制器或者核心控制器。- 用户请求的入口控制器,它就相当于MVC模式中的C,DispatcherServlet是整个流程控制的中心,相当于是SpringMVC的大脑,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。SpringMVC框架提供的该核心控制器需要我们在
web.xml
文件中配置。
- 用户请求的入口控制器,它就相当于MVC模式中的C,DispatcherServlet是整个流程控制的中心,相当于是SpringMVC的大脑,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。SpringMVC框架提供的该核心控制器需要我们在
-
HandlerMapping
:处理器映射器- HandlerMapping也是控制器,派发请求的控制器。我们不需要自己控制该类,但是他是SpringMVC运转历程中的重要的一个控制器。 HandlerMapping负责根据用户请求找到Handler即处理器(也就是我们所说的 Controller),SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等,在实际开发中,我们常用的方式是注解方式。
-
Handler
:处理器- Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet 的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。(这里所说的 Handler 就是指我们的 Controller)
-
HandlAdapter
:处理器适配器- 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展处理器适配器,支持更多类型的处理器,调用处理器传递参数等工作。
-
ViewResolver
:视图解析器- ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名称,即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。SpringMVC框架提供了很多的View视图类型,包括:
jstlView、freemarkerView、pdfView
等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
- ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名称,即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。SpringMVC框架提供了很多的View视图类型,包括: