一、SpringMVC简介
1 什么是MVC
(1)MVC是一种软件架构思想,将软件按照模型、视图、控制器来划分
(2)
M:Model,模型层,指工程中的JavaBean,作用是处理数据,JavaBean分为两类
- 一类是实体类Bean,专门存储业务数据
- 一类是业务处理Bean,指Service或Dao对象,专门用于处理业务逻辑和数据访问
V:View,视图层,指工程中的html或jsp页面,作用是与用户进行交互,展示数据
C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器
2 什么是SpringMVC
是Spring为表述层开发提供的一整套完备的解决方案
三层架构分别为表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet
SpringMVC本质是一个Servlet
3 SpringMVC的特点
(1)Spring家族原生产品,与IOC容器等基础设施无缝对接
(2)基于原生的Servlet,通过功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
(3)表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
(4)代码清新简洁,大幅度提升开发效率
(5)内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
(6)性能卓著,尤其适合大型互联网项目要求
二、HelloWorld
1 创建Maven工程
jar包和war包:jar包就是将jar程序打包,war包是将整web工程打包,可以理解为一种发布方式
< scope > 中的provided,说明该包在目标容器中是已经被提供了的,只在编译和测试阶段需要
2 流程总结
- 浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被前端控制器DispatcherServlet处理。
- 前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器,将请求地址和控制器中@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法。
- 处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视图所对应页面
三、@RequestMapping注解
1 @RequestMapping注解的功能
将请求和处理请求的控制器方法关联起来,建立映射关系
2 @RequestMapping注解的位置
@RequestMapping标识一个类:设置映射请求的请求路径的初始信息,用来设置相似功能路径中的不同模块,比如/Students/list 和 /Teachers/list 中的students与teachers
@RequestMapping标识一个方法:设置映射请求请求路径的具体信息
3 @RequestMapping注解的value属性
value参数实际上是一个String[],也就是说多个地址可以映射到同一个方法(但是一个地址不能映射到多个方法)
写法就是:
@ResquestMapping(value = {"/test1", "/test2"})
@RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射
4 @RequestMapping注解的method属性
@RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射
@RequestMapping注解的method属性是一个RequestMethod类型(Spring中提供的枚举类)的数组,表示该请求映射能够匹配多种请求方式的请求
若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报错405:Request method ‘POST’ not supported
若当前不设置method,则表示不以method为匹配条件,也就是说所有请求方式都能请求成功
5 @RequestMapping注解的params属性
通过请求参数去匹配请求 类型也是String[],但是不同于value和method的并集关系,这个必须全部满足
@RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系
“param”:要求请求映射所匹配的请求必须携带param请求参数
“!param”:要求请求映射所匹配的请求必须不能携带param请求参数
“param=value”:要求请求映射所匹配的请求必须携带param请求参数且param=value
“param!=value”:要求请求映射所匹配的请求必须携带param请求参数但是param!=value
@RequestMapping(
value = {
"/testRequestMapping", "/test"}
,method = {
RequestMethod.GET, RequestMethod.POST}
,params = {
"username","password!=123456"}
)
public String testRequestMapping(){
return "success";
}
6 @RequestMapping注解的headers属性
@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射
@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表