JavaWeb从0到1-DAY7-HTTP 请求与响应处理

HTTP 请求与响应处理

一、这一章在讲什么

本章主要讲解了在 Java Web 开发中,程序员如何与 HTTP 协议打交道。核心在于理解 "封装" 的思想:Web 服务器(Tomcat)负责把复杂的协议文本转换成简单的 Java 对象(Request/Response),让我们能以面向对象的方式,轻松读取浏览器传来的数据并返回处理结果。

二、核心概念

1. HttpServletRequest (请求对象)

  • 它是什么:HTTP 请求协议在 Java 中的"代言人"。
  • 作用:用来获取浏览器传来的所有信息(如参数、头信息)。
  • 原理:Tomcat 接收到 HTTP 原始报文后,按照协议规则解析字符串,并实例化该对象。
  • 易混淆点 :它不是由程序员 new 出来的,而是 Tomcat 传给我们的。

2. HttpServletResponse (响应对象)

  • 它是什么:HTTP 响应协议的"模具"。
  • 作用:程序员通过操作它,决定给浏览器返回什么内容、什么状态码。
  • 原理:程序员往这个对象里填数据,方法执行完后,Tomcat 把它翻译回 HTTP 报文发给浏览器。

3. 状态码 (Status Code)

  • 分类
    • 2xx (成功):一切正常。
    • 4xx (客户端错误):你找的地方不对(404)或你没权限(401)。
    • 5xx (服务端错误):后端代码写崩了(空指针等)。

三、重难点

1. 自动封装与解析

  • 结论 :程序员永远不需要手写代码去拆分 HTTP 字符串。
  • 原因:解析协议是 Web 服务器(Tomcat)的本职工作。
  • 比喻 :HTTP 协议就像一份英文快递报关单 ,Tomcat 是翻译兼快递员,它把英文报关单翻译成你认得的中文清单(Request 对象)送到你手上。

2. ResponseEntity vs HttpServletResponse

  • 结论ResponseEntity 是 Spring 提供的进阶版,推荐使用。
  • 原因 :它支持链式编程(.status().header().body()),代码更简洁,逻辑更聚合。

四、代码理解

java 复制代码
@RequestMapping("/demo")
public ResponseEntity<String> handle(HttpServletRequest request) {
    // 1. 获取请求数据
    String name = request.getParameter("name");

    // 2. 构造响应并返回
    return ResponseEntity.status(200)               // 设置状态码
                         .header("my-header", "ok") // 设置自定义响应头
                         .body("Hello, " + name);   // 设置响应体
}
  • 关键行 1HttpServletRequest 作为参数,Spring 会自动把 Tomcat 封装好的对象传进来。
  • 关键行 3getParameter 是最常用的方法,用于拿 URL 里的参数。
  • 关键行 6-8:链式调用,一气呵成完成响应配置。

五、易错点

  1. 4xx 和 5xx 分不清:页面报 404 应该去检查前端路径或 Controller 映射;报 500 必须去看后端控制台日志。
  2. 试图手动 new 对象 :记住 HttpServletRequest 是服务器给你的,自己 new 的对象里没数据。
  3. 响应状态码滥用:正常返回数据却手动设个 404,会导致前端框架(如 Axios)拦截报错。

六、记忆口诀 / 通俗比喻

请求是"读信" :信封信纸都被 Tomcat 拆好了,你只管读(Request)。 响应是"写信" :你写好内容填好地址,Tomcat 帮你贴邮票寄出去(Response)。 4 开头是客错 :顾客(客户端)走错门了。 5 开头是店错:店里(服务器)厨师滑倒了。

七、应用

在实际开发中,比如做一个登录功能

  1. 通过 request.getParameter("password") 拿到用户输入的密码。
  2. 如果密码错误,程序员需要手动调用 response.setStatus(401)(或者使用 ResponseEntity),告诉浏览器"你没权限访问",此时浏览器通常会弹出登录框或跳转报错页。

八、最终总结

本章搞定了 Web 开发的"输入"与"输出"。Tomcat 负责脏活累活(解析和拼装协议报文),我们程序员只需要通过 HttpServletRequest 拿数据 ,通过 ResponseEntityHttpServletResponse 给结果。重点关注常用状态码,这是前后端沟通的"黑话"。

相关推荐
路由侠内网穿透1 小时前
本地部署开源 HTTP 服务器 OpenLiteSpeed 并实现外部访问
运维·服务器·网络·网络协议·http·开源
云水一下1 小时前
下一代防火墙(NGFW)完全解析:从入门到华为eNSP模拟器实战
网络·华为·下一代防火墙
源远流长jerry1 小时前
Linux内核之一条tcp到底占用多少内存
linux·运维·服务器·网络·网络协议·tcp/ip
IT召唤狮1 小时前
【One-KVM】开源轻量级 IP-KVM 解决方案,无网远控免费平替 — BIOS 级远程控制
网络协议·tcp/ip·开源
骄傲的心别枯萎1 小时前
WireShark抓取rtsp包
网络·测试工具·wireshark
kyle~1 小时前
计算机网络---传输层
网络·计算机网络
IpdataCloud1 小时前
大数据处理方案:海量日志中的IP归属地如何高效分析?用IP离线库实现批量查询
网络·网络协议·tcp/ip
其实防守也摸鱼1 小时前
[特殊字符] Docker + LMArena2API 部署全流程:从环境准备到接口调用,一步到位
运维·网络·安全·web安全·docker·容器·大模型
難釋懷1 小时前
Redis网络模型-异步IO
网络·数据库·redis