二、什么是 Spring MVC?
2.1 概述:
Spring MVC 是Spring Framework 的一部分,是基于 Java 实现的 MVC 轻量级的 Web 框架。
官方生肉:
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web
翻译版本:(翻译版本是4.2.4的)(https://www.w3cschool.cn/spring_mvc_documentation_linesh_translation/spring_mvc_documentation_linesh_translation-dgcm27r3.html)
https://www.w3cschool.cn/spring_mvc_documentation_linesh_translation/spring_mvc_documentation_linesh_translation-dgcm27r3.html
2.2 Spring MVC 有什么特点?为什么要学?
- 轻量级,简单易学
- 高效,基于请求响应的 MVC 框架
- 与 Spring 兼容性好,可以做到无缝结合
- 约定优于配置( SpringBoot 也是)
- 功能强大:RESTFUL(一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源)、数据验证、格式化、本地化、主题等
- 简洁灵活
Spring 的 Web 框架围绕 DispatcherServlet(调度 Servlet)设计。
DispatcherServlet 的作用就是讲请求分发到不同的处理器。Spring 2.5 开始,使用 Java 5 以上版本可以基于注解开发,十分简洁
最重要的是:公司用的多
2.3 中心控制器
上面说到,Spring 的 Web 框架围绕 DispatcherServlet(调度 Servlet)设计。DispatcherServlet 的作用就是讲请求分发到不同的处理器。现在基本采用基于注解的 Controller 声明方式。
Spring MVC 框架像许多其他的 MVC 框架一样,以请求为驱动,围绕一个中心 Servlet 分派请求及提供其他的功能,DispatcherServlet 是一个实际的 Servlet(继承Http Servlet)。
关于HttpServlet介绍可以看大神的总结 https://blog.csdn.net/qq_41007534/article/details/99696559
2.3 Spring MVC 原理
Spring MVC 框架是高度可配置的,包括多种视图技术,例如JSP技术、Velocity、Tiles、iText和POI。SpringMVC框架并不关心使用的视图技术,也不会强迫开发者只使用JSP技术,但是这里只讨论JSP。
SpringMVC框架主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成。其工作原理如下图所示:
2.4 Spring MVC 执行原理
中文图片便于理解:
完整图
![在这里插入图片描述](https://img-blog.csdnimg.cn/b9b44b861e5449bfb4d04a4208aad8ac.png
基于完整图:实线代表的是 Spring 提供的技术,不需要开发者进行实现,虚线是需要开发者进行实现的。
简单分析执行流程:
- DispatcherServlet 表示的是前端控制器,是整个 Spring MVC 的控制中心。用户发出请求,DispatcherServlet 接受请求并拦截请求。
假设请求的 url 为:http://localhost:8080/Spring/hello
上面的 url 可以分为三部分:- http://localhost:8080 服务器域名
- Spring 部署在服务器上的站点
- hello 控制器
可以得出,url 表示为:请求位于服务器 localhost:8080 上的 Spring 站点的 hello 控制器。
- HandlerMapping 为处理器映射。DispatcherServlet 调用 HandlerMapping,HandlerMapping 根据请求的 url 查找 Handler。
- HandlerExecution 表示具体的 Handler ,主要作用是根据 url 查找控制器,如上的 url 查找的控制器为 hello
- HandlerExecution 讲解析后的信息传递给 DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行。
- Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。