目录
1. 什么是 Spring Web MVC?
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".
2.MVC 是什么?
它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分 为模型、视图和控制器三个基本部分
3.什么是Spring MVC ?
MVC是一种思想,Spring MVC就是把 MVC思想进行了实现。Spring MVC 是⼀个实现了 MVC 模式的 Web 框架
2.Spring MVC
2.1项⽬准备
注意:我使用的是JDK17.

2.2建⽴连接,@RequestMapping 注解介绍
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RequestController {
@RequestMapping("say")
public String say() {
return "hi Spring MVC";
}
}

@RequestMapping 注解介绍
@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的
什么是路由映射?
当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.
说明:
2.@RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果 前⾯没有加 / , Spring会拼接上⼀个 /
3.@RequestMapping 既⽀持Get请求, ⼜⽀持Post请求. 同理, 也⽀持其他的请 求⽅式.
3.传参介绍
我们借用postman工具
3.1传递单个参数
@RequestMapping("r1")
public String r1(Integer age) {
return "返回参数:" + age;
}
结果:
注意:
1.对于包装类型, 如果不传对应参数,Spring 接收到的数据则为null

3.2传递多个参数
@RequestMapping("r3")
public String r3(String name, Integer age) {
return "返回参数name:" + name + "age:" + age;
}

3.3传递对象
public class Student {
private Integer id;
private String name;
private Integer age;
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可.
结果:
3.4后端参数重命名
@RequestMapping("r5")
public String r5(@RequestParam("name") String username){
return "返回参数:" + username;
}
注意:
@RequestMapping("r5")
public String r5(@RequestParam(value = "name",required = false) String username){
return "返回参数:" + username;
}
3.5传递数组
@RequestMapping("r6")
public String r6(String[] s){
return Arrays.toString(s);
}
数组传参方式:
1.http://127.0.0.1:8080/r6?s=aaa,bbb,ccc
2.http://127.0.0.1:8080/r6?s=aaa&s=bbb&s=ccc
3.6传递集合
@RequestMapping("r7")
public String r7(@RequestParam(required = false)List<String> list){
return "返回参数:"+list;
}
结果:
3.7 传递JSON数据
JSON:理解成一种数据格式就好。
1.数据在 键值对 (Key/Value) 中2.数据由逗号 , 分隔3. 对象⽤ {} 表⽰4. 数组⽤ [] 表⽰5.值可以为对象, 也可以为数组, 数组中可以包含多个对象
1. 对象: ⼤括号 {} 保存的对象是⼀个⽆序的 键值对 集合. ⼀个对象以左括号 { 开始, 右括号 } 结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔2. 数组: 中括号 [] 保存的数组是值(value)的有序集合. ⼀个数组以左中括号 [ 开始, 右中括 号 ] 结束,值之间使⽤逗号 , 分隔
以下都是合法的JSON数据
{"name":"admin","age":18}
["hello", 3.1415, "json"]
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"张三","age":20}]
可以使⽤在线JSON格式化⼯具来进⾏校验和书写: 在线JSON校验格式化工具(Be JSON)https://www.bejson.com/
1.简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换2.跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和 传输3.轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输 速度4.易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤5.安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼ 的安全性基于以上特点, JSON在Web应⽤程序中被⼴泛使⽤, 如前后端数据交互、API接⼝数据传输等.
代码:
@RequestMapping("r8")
public String r8(@RequestBody Student student) {
return "返回参数:" + student.toString();
}
结果:
3.8获取URL中参数@PathVariable
和字⾯表达的意思⼀样, 这个注解主要作⽤在请求URL路径上的数据绑定
@RequestMapping("r9/{id}/{name}")
public String r9(@PathVariable Integer id, @PathVariable("name") String username) {
return "返回参数 id:" + id + " username: " + username;
}
结果:
说明:
1.如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给@PathVariable的属性赋 值, 如上述例⼦中的id变量2.如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要@PathVariable的属性value赋值, 如上述例⼦中的userName变量
3.9上传⽂件@RequestPart
代码:
@RequestMapping("r10")
public String r10(@RequestPart("file") MultipartFile file) {
String name = file.getOriginalFilename();
return "文件名:" + name;
}
结果:
4.响应
4.1返回静态⻚⾯

html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>静态页面</title>
</head>
<body>
<h1>你好,我是静态页面!!!</h1>
</body>
</html>
Spring MVC如何才能识别出来 /html/index.html 是⼀个静态⻚⾯,而不是一个字符串?
使用@Controller注解,代码如下:
@RequestMapping("res")
@Controller
public class ResponseController {
@RequestMapping("index")
public String index() {
return "/html/index.html";
}
}
结果:
4.2返回数据@ResponseBody
@RequestMapping("res")
@Controller
public class ResponseController {
@RequestMapping("indexData")
@ResponseBody
public String indexData() {
return "/html/index.html";
}
}
说明:
@ResponseBody 既是类注解, ⼜是⽅法注解。如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据
多个注解时, 没有先后顺序, 先写哪个都可以
补充:
@RestController = @Controller + @ResponseBody 默认返回数据。@Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.@ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息
4.3返回HTML代码⽚段
@RequestMapping("indexData2")
@ResponseBody
public String indexData2() {
return "<h1>我是h1标签</h1>";
}
结果:
4.4返回JSON
@RequestMapping("getMap")
@ResponseBody
public HashMap<String, String> getMap() {
HashMap<String, String> map = new HashMap<>();
for (int i = 0; i < 5; i++) {
map.put("key" + i, "val" + i);
}
return map;
}
结果:
4.5设置状态码
@RequestMapping("setStatus")
@ResponseBody
public String setStatus(HttpServletResponse response) {
response.setStatus(418);
return "状态码设置成功";
}
结果:
注意:状态码不影响页面展示。
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞