#一、 SpringMVC
1.1、什么是MVC
- MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范
- 是将业务逻辑、数据、显示分离的方法来组织代码
- MVC主要作用是降低视图与业务逻辑间的双向耦合
- MVC不是一种设计模式,MVC是一种架构模式,不同的MVC存在差异
Model(模型)
数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般分离开来:Value Object(数据Dao)和服务层(行为Service),也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务
View(视图)
负责进行模型的展示,一般就是我们见到的用户界面,客户想要看到的东西
Controller(控制器)
接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示,也就是说控制器做了个调度员的工作
1.2、Spring MVC
导入jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
Spring MVC是Spring 框架的一部分,是基于Java实现MVC的轻量级Web框架
Spring MVC的优点:
- 轻量级、简单易学
- 高效、基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合
- 约定优于配置
- 功能强大:RESTful、数据验证、格式化、本地化、主题等
- 简洁灵活
- 适应性、非侵入性
Spring的web框架围绕DispatcherServlet设计
中心控制器
Spring的web框架围绕着DispatcherServlet设计,DispatcherServlet的作用是将请求分发到不同的处理器。从Spring2.5开始,使用Java5或以上版本的用户可以采用基于注解的controller声明方式
Spring MVC框架像许多其他MVC框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlert是一个实际的Servlet(它继承于HTTPServlet)
SpringMVC的原理
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者
SpringMVC的执行原理
来自B站狂神说的一张完整执行图 实现表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现
简要分析执行流程
-
DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心,用户发送请求,DispatcherServlet接受请求并拦截请求
- 我们假设请求的URL为:http://localhost:8080/SpringMVC/hello
- 拆成三部分
- http://localhost:8080 服务器域名
- SpringMVC 部署在服务器上的web站点
- hello 表示控制器
- 通过分析,如上URL表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器
-
HandlerMapping为处理器映射器,被DispatcherServlet调用
HandlerMapping根据请求URL查找Handler
-
HandlerExecution表示具体的Handler,其主要作用是根据URL查找控制器,如上URL被查找的控制器为:hello
-
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等
-
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler
-
Handler让具体的Controller执行
-
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView
-
HandlerAdapter将视图逻辑名称或模型传递给DispatcherServlet
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名
-
视图解析器将解析的逻辑视图名传递给DispatcherServlet
-
DispatcherServlet根据视图解析的视图结果,调用具体的视图
-
最终视图呈现给用户