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 给结果。重点关注常用状态码,这是前后端沟通的"黑话"。

相关推荐
菜根Sec2 小时前
没钱考网络安全证书了
网络·网络安全·信息安全·信息安全工程师·网络安全公司
筼筜8 小时前
【系统架构设计师】通信系统架构设计理论与实践
网络
小程序设计8 小时前
基于IPv6的校园网设计与过渡技术仿真
网络·安全
Lynne30910 小时前
工业网络,到底该集中还是自治?
网络·架构·数据
鱼月半12 小时前
两台电脑直连网络不通怎么办?
linux·网络协议
光电笑映13 小时前
网络通信基础:从协议分层到 Socket 编程预备
linux·运维·服务器·网络
mengge.cloud15 小时前
0917Docker 小白实验教程(理论+实操)
linux·服务器·网络·docker
Thomas.Sir16 小时前
第13课:PyTorch|经典CNN网络模型从零复现【从LeNet到VGG的逐行实现】
网络·pytorch·cnn
en.en..17 小时前
网络分层封装 与 TCP粘包的因果关系
网络·单片机·嵌入式硬件
布莱克60517 小时前
HTTP 状态码详解:从分类到实战
计算机网络·http·状态码