目录
[一 请求处理(初级)](#一 请求处理(初级))
[二 请求处理(进阶)](#二 请求处理(进阶))
[三 获取请求头](#三 获取请求头)
[四 获取Cookie](#四 获取Cookie)
[五 级联封装](#五 级联封装)
[六 使用@RequestBoby封装JSON对象](#六 使用@RequestBoby封装JSON对象)
[七 文件的上传](#七 文件的上传)
[八 获取整个请求 HttpEntity](#八 获取整个请求 HttpEntity)
[九 原生请求](#九 原生请求)
Spring MVC 是 Spring 框架中的一个核心模块,专门用于构建 灵活、松耦合的 Web 应用程序 。它基于经典的 MVC(Model-View-Controller)设计模式,但通过 Spring 的依赖注入(DI)和面向切面(AOP)等特性,简化了开发流程,提高了代码的可维护性。
与传统 Servlet/JSP 对比
特性 | Spring MVC | 传统 Servlet/JSP |
---|---|---|
耦合性 | 低(基于接口和注解) | 高(直接依赖 Servlet API) |
配置 | 注解驱动,简化 XML/Java 配置 | 需手动配置 web.xml |
测试 | 易于单元测试(Mock 框架支持) | 测试复杂(依赖容器) |
扩展性 | 模块化设计,易于扩展 | 扩展需手动管理 |
功能集成 | 无缝集成 Spring 生态(如安全、事务) | 需自行整合其他库 |
复习巩固前言JSON

图示:

章节简介
一 请求处理(初级)
eg:请求头
1 处理请求参数
前端代码:
java
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>信息提交表单</title>
</head>
<body>
<h3>信息采集</h3>
<!-- 指定提交地址为 /handle02 表单数据会附加在 URL 参数中-->
<form action="/handle02" method="get">
<fieldset>
<legend>主要信息</legend>
<label for="account1">账户:</label>
<input type="text" id="account1" name="account" value="" maxlength="10"><br>
<label>密码:<input type="password" id="password1" name="pw" maxlength="9"></label><br>
<label>性别:
<input type="radio" name="gender" id="gender1" value="male" checked> 男
<input type="radio" name="gender" value="female"> 女
</label><br>
<label>爱好:
<input type="text" id="hobby" name="hobby">
<input type="checkbox" name="hobby" value="smoke"> 抽烟
<input type="checkbox" name="hobby" value="drink"> 喝酒
<input type="checkbox" name="hobby" value="perm"> 烫头
</label><br>
</fieldset>
其他补充信息:<br>
<textarea name="other" cols="25" rows="2"></textarea><br>
籍贯:
<select name="place">
<option value="鲁">山东省</option>
<option value="皖">安徽省</option>
<option value="粤">广东省</option>
<option value="京" selected>北京市</option>
<option value="苏">江苏省</option>
</select><br>
<input type="hidden" name="hid" value="hahahahahahaha">
<input type="submit" value="确认">
<input type="reset" value="重置">
</form>
</body>
</html>
请求方法类:
java
package org.example.spring04mvc.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class RequestTestController {
@RequestMapping("/handle01")
public String handleRequest(
@RequestParam String account,
@RequestParam String pw,
@RequestParam String gender,
@RequestParam List<String> hobby,
@RequestParam(required = false) String other,
@RequestParam String place,
@RequestParam String hid
) {
System.out.println("Account: " + account);
System.out.println("Password: " + pw);
System.out.println("Gender: " + gender);
System.out.println("Hobbies: " + hobby);
System.out.println("Place: " + place); // 自动处理URL编码(如"京")
if (other != null) {
System.out.println("Other: " + other);
}
System.out.println("隐藏信息: " + hid);
return "表单上传成功!";
}
}
Sprig项目启动页面展示

个人控制台与浏览器展示:


二 请求处理(进阶)
eg:请求体
前端代码:
java
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>信息提交表单</title>
</head>
<body>
<h3>信息采集</h3>
<!-- 指定提交地址为 /handle02 表单数据会通过 HTTP 请求体(Body) 发送到服务器。 -->
<form action="/handle02" method="post">
<fieldset>
<legend>主要信息</legend>
<label for="account1">账户:</label>
<input type="text" id="account1" name="account" value="" maxlength="10"><br>
<label>密码:<input type="password" id="password1" name="pw" maxlength="9"></label><br>
<label>性别:
<input type="radio" name="gender" id="gender1" value="male" checked> 男
<input type="radio" name="gender" value="female"> 女
</label><br>
<label>爱好:
<input type="text" id="hobby" name="hobby">
<input type="checkbox" name="hobby" value="smoke"> 抽烟
<input type="checkbox" name="hobby" value="drink"> 喝酒
<input type="checkbox" name="hobby" value="perm"> 烫头
</label><br>
</fieldset>
其他补充信息:<br>
<textarea name="other" cols="25" rows="2"></textarea><br>
籍贯:
<select name="place">
<option value="鲁">山东省</option>
<option value="皖">安徽省</option>
<option value="粤">广东省</option>
<option value="京" selected>北京市</option>
<option value="苏">江苏省</option>
</select><br>
<input type="hidden" name="hid" value="hahahahahahaha">
<input type="submit" value="确认">
<input type="reset" value="重置">
</form>
</body>
</html>
封装:(可能由于版本问题@Data使用出错)
java
package org.example.spring04mvc.bean;
import lombok.Data;
@Data
public class emailUsers {
// 账号指定默认值
private String account="zhangsan";
private String pw;
private String gender;
private String hid;
private String place;
private String other;
private String[] hobby;
}
指定:
java
package org.example.spring04mvc.controller;
import org.example.spring04mvc.bean.emailUsers;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class RequestTestController {
@RequestMapping("/handle01")
public String handleRequest(
@RequestParam String account,
@RequestParam String pw,
@RequestParam String gender,
@RequestParam List<String> hobby,
@RequestParam(required = false) String other,
@RequestParam String place,
@RequestParam String hid
) {
System.out.println("Account: " + account);
System.out.println("Password: " + pw);
System.out.println("Gender: " + gender);
System.out.println("Hobbies: " + hobby);
System.out.println("Place: " + place); // 自动处理URL编码(如"京")
if (other != null) {
System.out.println("Other: " + other);
}
System.out.println("隐藏信息: " + hid);
return "表单上传成功!";
}
@RequestMapping("/handle02")
public String handleRequest02(emailUsers emailUser){
System.out.println(emailUser);
return "表单上传成功!";
}
}
运行结果:


三 获取请求头
java
@RequestMapping("/handle03")
public String handleRequest03(@RequestHeader(value = "Host",defaultValue = "localhost") String host) {
System.out.println(host);
return "Ok" + host;
}
四 获取Cookie
java
@RequestMapping("/handle04")
public String handleRequest04(@CookieValue(value = "JSESSIONID",defaultValue = "") String sessionId) {
System.out.println(sessionId);
return "Ok" + sessionId;
}
五 级联封装

六 使用@RequestBoby封装JSON对象
代码实现:
java
//测试接收JSON数据,获取请求体json的数据,自动转为对象
@RequestMapping("/handle06")
public String handleRequest06(@RequestBody emailUsers emailUser) {
System.out.println(emailUser);
return "OK";
}
java
//将JSON对象以字符串接收
@RequestMapping("/handle07")
public String handleRequest07(@RequestBody String json) {
System.out.println(json);
return "OK";
}
七 文件的上传
java
//接收文件上传表单
@RequestMapping("/handle08")
public String handleRequest08(emailUsers emailUser,
@RequestParam("file") MultipartFile f1,
@RequestParam("file2") MultipartFile[] f2) throws IOException {
// 1获取原始文件名
String originalFilename = f1.getOriginalFilename();
// 2获取文件大小
long size = f1.getSize();
// 3获取文件流
InputStream inputStream = f1.getInputStream();
// 4文件保存
f1.transferTo(new File("D:\\" + originalFilename));
System.out.println(emailUser);
return "OK";
}
更改部分参数

八 获取整个请求 HttpEntity
HttpEntity
是 Spring Framework 中用于表示 HTTP 请求或响应实体 的核心类,它封装了 HTTP 消息的 头部(Headers) 和 正文(Body),常用于客户端和服务端之间的数据交互。以下是其核心特性和用法:
1. 核心功能
-
封装数据 :包含 HTTP 消息的
body
(如 JSON、XML、表单数据)和headers
(如Content-Type
、Authorization
)。 -
支持泛型 :
HttpEntity<T>
允许指定正文内容的类型(如String
、byte[]
、Map
或自定义对象)。 -
不可变性 :创建后不可修改,若需变更需通过
HttpEntity
的构建方法生成新实例。
java
// HttpEntity 封装请求头请求体,把整个请求拿过来封装
@RequestMapping("/handle09")
public String handleRequest09(HttpEntity<String> httpEntity){
//拿到请求头
HttpHeaders headers = httpEntity.getHeaders();
//拿到请求体
String body = httpEntity.getBody();
return "OK";
}
九 原生请求
java
//使用原生API
@RequestMapping("/handle10")
public String handleRequest10(HttpServletRequest request) throws IOException {
//拿到请求头
Enumeration<String> headerNames = request.getHeaderNames();
//拿到请求体
String body = request.getReader().readLine();
return "OK";
}