1 MVC 介绍

MVC 模式的全名是 Model-View-Controller,即模型 (Model )-视图 (View )-控制器 (Controller) 的缩写。首先要明确的一点是:MVC 模式它不是类,也不是什么框架,它只是一种开发的设计思想。将业务逻辑、数据处理、界面显示分别抽取出来统一放到一个地方,从而使同一个程序可以使用不同的表现形式。

模块设计层面可选框架
模型(Model)service+dao+entityjdbc,hibernate,mybatis
视图(View)webapp 页面jsp,thymeleaf,vue
控制器(Controller)controllerservlet,structs2,springmvc

2 SpringMVC 简介

SpringMVC 也叫 Spring web MVC。是 Spring 框架的一部分,用于进行 web 开发框架。

SpringMVC 提供了总开关 DispatcherServlet;请求处理映射器(Handler Mapping)和处理适配器(Handler Adapter),视图解析器(View Resolver)进行视图管理;动作处理器 Controller 接口(包含 ModelAndView,以及处理请求响应对象请求和响应),配置灵活,支持文件上传,数据简单转化等强大功能。

SpringMVC 现在已经成为目前最主流的 MVC 框架之一,并随着 Spring 的一直优化更新,已经将 Struts2 框架淘汰了,继而成为最优秀的 MVC 框架。SpringMVC 通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无需实现任何接口。同时它还支持 RESTful 编程风格的请求。

3 SpringMVC 优点

  1. 轻量级,简单易学,简洁灵活
  2. 高效,基于请求响应的 MVC 框架,底层封装了 Servlet
  3. 进行更简洁的 Web 层的开发
  4. 能简单的进行 Web 层的单元测试
  5. 与 Spring 兼容性好,天生与 Spring 框架集成(如 IoC 容器、AOP 等)
  6. 提供强大的约定大于配置的契约式编程支持
  7. 功能强大:支持 RESTful 风格、灵活的数据验证、灵活的本地化、格式化和数据绑定机制等
  8. 能使用任何对象进行数据绑定,不必实现特定框架的 API
  9. 对静态资源的支持
  10. 更加简单的异常处理
  11. 支持灵活的 URL 到页面控制器的映射
  12. 非常容易与其他视图技术集成,如 Thymeleaf、FreeMarker 等等,因为模型数据不放在特定的 API 里,而是放在一个 Model 里(Map 数据结构实现,因此很容易被其他框架使用)

4 SpringMVC 的执行流程

Spring MVC 执行流程

具体的执行流程介绍:

  1. 用户在浏览器提交请求会到前端控制器 DispatcherServlet 进行处理。
  2. 前端控制器 DispatcherServlet 收到请求后,将请求转给处理器映射器 HandlerMapping。
  3. 处理器映射器 HandlerMapping 根据 request 请求的 URL 等信息查找能够进行处理的 Handler,以及相关拦截器 interceptor,并构造 HandlerExecutionChain 执行链,然后将构造好的 HandlerExecutionChain 执行链对象返回给前端控制器 DispatcherServlet,执行链包含一个处理器对象和一或多个拦截器。
  4. 前端控制器 DispatcherServlet 根据处理器执行链的处理器,能够找到其对应的处理器适配器 HandlerAdapter;
  5. 处理器适配器 HandlerAdapter 调用相应的处理器 Handler,即让我们写的具体的 Controller 方法执行。
  6. Controller 处理完后返回 ModelAndView 给 HandlerAdapter(ModelAndView 表示 SpringMVC 的封装对象,将 model 和 view 封装在一起)。
  7. 处理器适配器 HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给前端控制器 DispatcherServlet。
  8. 前端控制器 DispatcherServlet 调用视图解析器 ViewReslover 处理 ModelAndView。
  9. 视图解析器 ViewReslover 解析后根据逻辑视图名解析成物理视图名即具体的页面地址,生成并返回具体对象 View(springmvc 封装对象,是一个接口)。
  10. 前端控制器 DispatcherServlet 根据对象 View 进行视图渲染(即将模型数据 model 填充至视图中)。
  11. 最后前端控制器 DispatcherServlet 向用户返回响应,至此就全部完成了。

5 SpringMVC 组件

  1. DispatcherServlet:中央调度器,也称前端控制器,在 MVC 架构中相当于 C,即控制层,它是整个流程的控制中心,接收请求、响应结果,相当于转发器。中央调度器的存在降低了组件之间的耦合性,系统扩展性提高,由框架实现。
  2. HandlerMapping:处理器映射器,负责根据用户请求 url 找到要执行的 Handler,springmvc 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。由框架实现。
  3. Handler(需要程序员开发具体的 Controller):处理器,Handler 是继 DispatcherServlet 前端控制器的后端控制器,在 DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发 Handler。
  4. HandlerAdapter:处理器适配器,通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现。
  5. ViewResolver:视图解析器,View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。由框架实现。
  6. View(需要程序员开发 jsp 等页面):视图,springmvc 框架提供了很多的 View 视图类型的支持,包括:jsp、jstlView、freemarkerView、pdfView 等。一般需要我们根据业务需求开发具体的页面。

6 SpringMVC 详细流程