SpringBoot Web 开发教程(中篇)
承接上篇 SpringBoot 快速入门,本篇完整讲解 HTTP 协议全套知识,包含协议特点、请求完整结构、请求对象获取参数、响应完整结构、两种响应封装方式,配套完整代码示例,是前后端数据交互核心理论,下篇讲解综合案例与三层架构 IOC/DI 解耦。
一、HTTP 协议基础概念
1. 协议全称
Hyper Text Transfer Protocol 超文本传输协议,专门规定浏览器与服务器之间数据传输的统一规则,所有网页访问都遵循该协议。
2. 三大核心特点
- 基于 TCP 连接,传输数据安全可靠;
- 一问一答模型:一次浏览器请求,对应服务器一次响应;
- 无状态协议:服务器不会记录客户端历史请求信息。
- 优点:传输速度快;
- 缺点:多次请求之间无法共享数据(后续 Cookie/Session 解决)。
3. 完整交互流程
浏览器发起 HTTP 请求 → Tomcat 服务器接收解析 → SpringMVC 处理业务 → 组装 HTTP 响应返回浏览器。
二、HTTP 请求详解(浏览器→服务端)
2.1 请求完整三部分
一条标准 HTTP 请求分为三块,自上而下依次为:请求行、请求头、请求体,请求头与请求体之间空一行分隔。
- 请求行(第一行)格式:
请求方式 资源路径 HTTP/版本示例:GET /brand/findAll?name=OPPO HTTP/1.1 - 请求头:多行
key:value键值对,描述浏览器环境、支持的数据格式; - 请求体:仅 POST 请求存在,存放提交参数,GET 无请求体。
2.2 常用请求头对照表
| 请求头 | 作用说明 |
|---|---|
| Host | 当前访问服务器主机与端口 |
| User-Agent | 浏览器型号、系统标识,用于区分设备 |
| Accept | 浏览器可接收的数据格式(html/json 等) |
| Accept-Language | 浏览器偏好语言(中文 / 英文) |
| Accept-Encoding | 支持的压缩格式(gzip) |
| Content-Type | 请求体数据类型(POST 专用) |
| Content-Length | 请求体字节长度(POST 专用) |
2.3 GET 与 POST 请求核心区别
- GET
- 参数拼接在请求行 URL 后面,格式
?key=value&xxx=xxx; - 无请求体;
- 浏览器对 URL 长度有限制,适合查询类请求。
- POST
- 参数存放在请求体中;
- 无长度限制,适合提交表单、上传、新增数据;
- 常用于密码、批量数据提交。
2.4 HttpServletRequest 获取请求数据
Tomcat 自动解析全部请求信息,封装为HttpServletRequest对象,直接在 Controller 方法入参接收即可,无需手动解析协议文本。
完整代码示例
@RequestMapping("/request")
public String request(HttpServletRequest request){
// 1. 获取URL上请求参数
String name = request.getParameter("name");
// 2. 获取请求URI/完整URL
String uri = request.getRequestURI();
String url = request.getRequestURL().toString();
// 3. 获取指定请求头
String ua = request.getHeader("User-Agent");
// 4. 获取请求方式 GET/POST
String method = request.getMethod();
// 5. 获取地址栏全部查询参数
String query = request.getQueryString();
return "请求数据获取完成";
}
小结
不需要手动解析原始 HTTP 字符串,框架自动封装请求对象,直接调用方法拿所有请求信息。
三、HTTP 响应详解(服务端→浏览器)
3.1 响应完整三部分
响应数据三层结构:响应行、响应头、响应体
- 响应行(第一行):协议 + 状态码 + 描述示例:
HTTP/1.1 200 OK - 响应头:多行键值对,告诉浏览器页面编码、缓存、Cookie 等;
- 响应体:最终返回给浏览器的页面 / JSON 数据。
3.2 状态码五大分类
| 分类 | 含义 | 常用码说明 || ---- | ---- || 1xx | 临时响应,请求未完成 | 极少使用 || 2xx | 请求处理成功 | 200 正常访问 || 3xx | 重定向,跳转新地址 | 302 页面跳转 || 4xx | 客户端错误 | 404 资源不存在;401 未授权 || 5xx | 服务器代码异常 | 500 后台报错 |
3.3 常用响应头
| 响应头 | 作用 |
|---|---|
| Content-Type | 响应数据类型:text/html/application/json |
| Content-Length | 返回数据字节大小 |
| Cache-Control | 浏览器缓存规则 |
| Set-Cookie | 给浏览器写入 Cookie 数据 |
3.4 两种设置响应的方式
方式一:HttpServletResponse 原生对象
通过该对象手动设置状态码、响应头、页面内容
@RequestMapping("/response1")
public void responseDemo(HttpServletResponse response) throws IOException {
// 设置响应状态码
response.setStatus(401);
// 自定义响应头
response.setHeader("demo-key","test-value");
// 写入响应体(页面内容)
response.getWriter().write("<h1>返回页面文本</h1>");
}
方式二:ResponseEntity 封装返回(推荐)
Spring 提供专用响应实体,链式调用统一设置状态、头、返回体,代码更整洁
@RequestMapping("/response2")
public ResponseEntity<String> respEntity(){
return ResponseEntity.status(401)
.header("demo-key","demo-val")
.body("接口返回文本数据");
}
补充说明
绝大多数业务场景无需手动修改状态码、响应头,Spring 框架会根据执行结果自动填充。
四、中篇全文总结
- HTTP 是浏览器与服务器数据传输规范,基于 TCP、一次请求一次响应、无状态;2 请求分为请求行、请求头、请求体;GET 参数在 URL,POST 参数在请求体;3 使用 HttpServletRequest 可一键获取所有请求参数、路径、请求头;4 响应分为响应行、响应头、响应体,状态码区分请求结果;5 两种响应封装:原生 HttpServletResponse、简洁 ResponseEntity;
中篇拓展练习
- 写接口分别测试 GET、POST 传参,使用 request.getParameter 获取;
- 分别用两种响应方式返回自定义文本,观察浏览器网络面板 HTTP 原始报文;
- 打印 User-Agent 请求头,区分电脑 / 手机浏览器标识。
中篇面试高频考点
1 HTTP 协议三大特点;2 GET 和 POST 请求区别;3 200/404/500 状态码含义;4 HttpServletRequest 作用;5 HttpServletResponse 与 ResponseEntity 两种响应写法区别。
下篇预告:用户列表 Web 综合实战、三层架构分层思想、耦合与解耦、IOC 控制反转、DI 依赖注入、四大 Bean 注解、三种注入方式。
当前文件内容过长,豆包只阅读了前 52%。
更多推荐

所有评论(0)