目录
一、什么是Spring MVC
1.1 Spring MVC定义
1.2 MVC定义
1.3 MVC和Spring MVC的关系
1.4 Spring MVC的作用
二、Spring MVC的使用
2.1 Spring MVC的创建和连接
2.1.1 @RequestMapping注解
2.1.2 @GetMapping注解
2.1.3 @PostMapping注解
2.2 获取参数
2.2.1 获取单个参数
2.2.2 获取多个参数
2.2.3 获取对象
2.2.4 后端参数重命名
2.2.5 设置参数必传
2.2.6 获取JSON格式对象
2.2.7 获取URL中的参数
2.2.8 获取上传文件
2.2.9 获取Cookie
2.2.10 存储和获取Session
2.2.11 获取Header
2.3 输出数据
2.3.1 返回静态页面
2.3.2 返回text/html
2.3.3 返回JSON对象
2.3.4 请求转发和请求重定向
一、什么是Spring MVC
1.1 Spring MVC定义
官方对Spring MVC的描述:
Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, "Spring Web MVC," comes from the name of its source module (spring-webmvc), but it is more commonly known as "Spring MVC".
总结:Spring MVC全称是Spring Web MVC,是一个基于Servlet的Web框架。
1.2 MVC定义
MVC是Model View Controller的缩写,它是软件工程中的一种软件架构模式,把软件系统分为模型、视图、控制器三给基本部分。
Model:是应用程序中用于处理应用程序数据分析的部分,它通常负责在数据库中存储数据。
View:是应用程序中处理数据显示的部分,通常是依据Model创建的。
Controller:是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
1.3 MVC和Spring MVC的关系
MVC是一种思想,而Spring MVC则是它的具体实现(相当于IoC和DI的关系)。
因此,Spring MVC是一个实现了MVC模式,并实现了Servlet API的Web框架。
1.4 Spring MVC的作用
Spring MVC可以帮助开发者快速构建出基于web的应用程序,并且把应用程序的逻辑划分为模型、视图、控制器,从而更方便程序的维护和测试。
二、Spring MVC的使用
2.1 Spring MVC的创建和连接
Spring MVC项目的创建和Spring Boot项目的创建相同,在创建Spring Boot项目时,选择Spring Web依赖,就相当于是创建了Spring MVC项目。
2.1.1 @RequestMapping注解
@RequestMapping用来注册接口的路由映射的,它既可以修饰类,也可以修饰方法,既可以接收Get请求,也可以接收Post请求。
代码示例:
然后使用postman分别发送Get请求和Post请求:
Get请求:
Post请求:
2.1.2 @GetMapping注解
被@GetMapping注解修饰的方法,只能接收Get请求。
代码示例:
此时,当我们发送Post请求时,就会出现405状态码:不支持该方法
使用@RequestMapping也可以达到同样的效果:
2.1.3 @PostMapping注解
被@PostMapping注解修饰的方法,只能接收Post请求,用法和@GetMapping注解相同。
使用@RequestMapping也可以达到同样的效果:
2.2 获取参数
2.2.1 获取单个参数
在Spring MVC中,可以直接使用方法中的参数来实现用户传参的效果。
代码示例:
使用postman发送请求:
注意:请求中的参数名要和方法的参数名相同,否则无法获取到请求中的参数。
2.2.2 获取多个参数
获取多个参数的方式和获取单个参数的方式相同,使用方法中的形参接收即可。
代码示例:
使用postman发送请求:
注意:请求中的参数如果为基本数据类型,建议方法中使用对应的包装类接收。
如果请求中少传参数时,使用基本数据类型接收就会报错,而使用包装类接收时,包装类的默认值为null,代码不会报错。
2.2.3 获取对象
Spring MVC可以自动实现参数对象的赋值。
代码示例:
使用postman发送请求:
注意:
(1) 请求中的参数名称和要获取的对象中的属性名称相同;
(2) 被获取的对象对应的属性要实现get和set方法(本文中添加了@Data注解)。
2.2.4 后端参数重命名
如果前端传递的参数名为time,而后端接收时的参数名为TIME,前后端参数名不一致时,就会出现参数接收不到的情况,此时就可以使用@RequestParam来重命名后端的参数名。
代码示例:
使用postman发送请求:
2.2.5 设置参数必传
上面的例子中,如果我们在发送请求时不传参数的话,后端getTime方法中的参数TIME应该是默认值null,但实际上我们的代码会报错:
这是因为,在添加@RequestParam注解后,这个参数就变成了必传的参数,我们可以通过更改该注解中required的值来让它变成非必传参数:
再次发送请求时,代码就不会报错了:
2.2.6 获取JSON格式对象
如果请求中的数据格式为JSON格式,那么可以使用@RequestBody注解来获取数据。
代码示例:
使用postman发送JSON数据格式的请求:
2.2.7 获取URL中的参数
某些情况下,程序可能要从URL部分获取参数,而不是从query string、请求的body部分获取参数,此时就需要用到@PathVariable注解。
代码示例:
使用postman发送请求:
注意:使用@PathVariable注解修饰参数后,对应的路由也需要发生变化,对应部分的路由名称要和参数名称一致。
2.2.8 获取上传文件
获取上传文件需要用到@RequestPart注解。
代码示例:
使用postman发送请求:
查看配置文件中设置的本地保存图片的路径:
2.2.9 获取Cookie
方式一:使用Servlet中获取Cookie的方式
Spring MVC是基于Servlet的,所以Servlet中的API在Spring MVC中也是可以使用的~
代码示例:
方式二:使用@CookieValue注解
代码示例:
代码运行结果:
2.2.10 存储和获取Session
方式一:使用Servlet中获取Session的方式
方式二:使用@SessionAttribute注解
required属性的用法和@RequestParam中的required属性用法相同(设置参数必传)。
2.2.11 获取Header
方式一:使用Servlet中获取Header的方式
方式二:使用@RequestHeader注解
2.3 输出数据
2.3.1 返回静态页面
默认情况下,Spring MVC返回的就是一个静态页面
代码示例:
前端页面:
2.3.2 返回text/html
使用@ResponseBody或@RestController注解,返回的就是非静态页面
代码示例:
前端页面:
2.3.3 返回JSON对象
Spring MVC会根据返回的数据自动设置响应中的数据格式~
代码示例:
抓包查看响应中的数据格式:
2.3.4 请求转发和请求重定向
代码示例:
请求转发的前端页面:
请求重定向的前端页面: