目录
1 MVC 介绍
2 SpringMVC 介绍
2.1 SpringMVC 特点
2.2 SpringMVC 的核心组件
2.3 SpringMVC 执行流程
3 参考文档
1 MVC 介绍
MVC (Model View Controller) 是一种设计思想,它将应用程序分为三大组件:模型 (Model)、视图 (View)、控制器 (Controller)。
-
模型 (Model):模型是应用程序的数据和业务逻辑部分。它负责处理和管理应用程序的数据,并执行与数据相关的操作,例如读取、写入、修改和删除数据
-
视图 (View):视图是应用程序的用户界面部分。它负责呈现模型中的数据给用户,并接受用户的输入。视图通常使用 HTML、CSS 和 JavaScript 等前端技术来构建
-
控制器 (Controller):控制器是应用程序的控制逻辑部分。它负责处理用户的请求和操作,并协调模型和视图之间的交互。它接收从视图层传来的数据,然后选择 Model 层中的某个业务来处理,之后接收 Model 层返回的结果并选择视图层中的某个视图来显示结果
在实际的开发中,我们会把它们拆分的更细,从而形成 Entity+DTO+DAO+Service+Controller+HTML 结构,其中 Entity+DTO+DAO+Service 为模型层,Controller 为控制器层,HTML 为视图层。
类型 | 名称 | 作用 |
---|---|---|
Entity | 实体类 | 通常与数据库的表对应,封装 DAO 层取出来的数据为一个对象,也就是我们常说的POJO,一般只在 DAO 层与 Service 层之间传输 |
DAO | 数据访问层 | 作用是与数据打交道,可以是数据库操作,也可以是文件读写操作,甚至是 Redis 缓存操作,总之与数据操作有关的都放在这里 |
DTO | 数据传输层 | 主要用于远程调用等需要大量传输对象的地方 |
Service | 业务逻辑层 | 业务逻辑层用于调用 DAO 层进行数据操作,并处理业务逻辑,如拼接 SQL,处理事务等 |
Controller | 控制器层 | 接收从视图层传过来的数据,然后选择 Service 层中的某个业务来处理,接收 Service 层返回的结果并选择视图层中的某个视图来显示结果 |
2 SpringMVC 介绍
SpringMVC 是 Spring 的一个后续产品,是 Spring 为表述层开发提供的一整套完备的解决方案。SpringMVC 是 Spring + MVC,即 SpringMVC 是实现了 MVC 设计模式的 Spring 框架。
2.1 SpringMVC 特点
- 轻量级,简单易学,简洁灵活
- 高效,基于请求响应的 MVC 框架,底层封装了 Servlet
- 进行更简洁的 Web 层的开发
- 能简单的进行 Web 层的单元测试
- 与 Spring 兼容性好,天生与 Spring 框架集成(如 IoC 容器、AOP 等)
- 提供强大的约定大于配置的契约式编程支持
- 功能强大:支持 RESTful 风格、灵活的数据验证、灵活的本地化、格式化和数据绑定机制等
- 能使用任何对象进行数据绑定,不必实现特定框架的 API
- 对静态资源的支持
- 更加简单的异常处理
- 支持灵活的 URL 到页面控制器的映射
- 非常容易与其他视图技术集成,如 Thymeleaf、FreeMarker 等等,因为模型数据不放在特定的 API 里,而是放在一个 Model 里(Map 数据结构实现,因此很容易被其他框架使用)
2.2 SpringMVC 的核心组件
- DispatcherServlet:中央调度器,也称前端控制器,在 MVC 设计模式中相当于 Controller,即控制层。它是整个流程的控制中心,由它调用其它组件处理用户的请求。中央调度器的存在降低了组件之间的耦合性,提高了系统的可扩展性
- HandlerMapping:处理器映射器,负责根据用户请求 URL 找到要执行的 Handler,SpringMVC 提供了不同的映射器实现不同的映射方式
- Handler:处理器,也称后端控制器,它负责处理具体的请求并返回相应的响应
- HandlerAdapter:处理器适配器,通过 HandlerAdapter 对处理器进行执行,它是对适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行
- ViewResolver:视图解析器,View Resolver 负责将处理结果生成 View 视图。ViewResolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染并将处理结果通过页面展示给用户
- View:视图,SpringMVC 框架提供了很多的 View 视图类型的支持,包括:JSP、JSTLView、FreeMarkerView 和 PDFView 等。一般需要我们根据业务需求开发具体的页面
2.3 SpringMVC 执行流程
具体的执行流程如下:
- 用户在浏览器提交请求给前端控制器 DispatcherServlet 进行处理
- 前端控制器 DispatcherServlet 收到请求后,将请求转给处理器映射器 HandlerMapping
- 处理器映射器 HandlerMapping 根据 request 请求的 URL 等信息查找能够进行处理的处理器 Handler,以及相关拦截器 Interceptor,并构造 HandlerExecutionChain 处理器执行链,然后将构造好的 HandlerExecutionChain 处理器执行链对象返回给前端控制器 DispatcherServlet,执行链包含一个处理器对象和一或多个拦截器
- 前端控制器 DispatcherServlet 根据处理器执行链,找到其对应的处理器适配器 HandlerAdapter
- 处理器适配器 HandlerAdapter 调用相应的处理器 Handler
- 处理器 Handler 处理完后返回 ModelAndView 给 HandlerAdapter(ModelAndView 表示 SpringMVC 的封装对象,将 Model 和 View 封装在一起)
- 处理器适配器 HandlerAdapter 将处理器 Handler 执行结果 ModelAndView 返回给前端控制器 DispatcherServlet
- 前端控制器 DispatcherServlet 调用视图解析器 ViewReslover 处理 ModelAndView
- 视图解析器 ViewReslover 将逻辑视图名解析成物理视图名,即具体的页面地址,生成并返回具体对象 View(SpringMVC 封装对象,是一个接口)
- 前端控制器 DispatcherServlet 根据对象 View 进行视图渲染(即将模型数据 Model 填充至视图中)
- 最后,前端控制器 DispatcherServlet 向用户返回响应,至此就全部完成了
SpringMVC 学习(二)之第一个 SpringMVC 案例-CSDN博客https://blog.csdn.net/zjs246813/article/details/136259136?spm=1001.2014.3001.5501
3 参考文档
SpringMVC入门学习(一)----Spring MVC的介绍与执行流程 - 唐浩荣 - 博客园 (cnblogs.com)
SpringMVC执行流程及源码分析 - 二七零零 - 博客园 (cnblogs.com)