JavaWeb核心:HttpServletRequest与HttpServletResponse详解

Web开发本质 :客户端发出请求,服务器返回响应。在JavaWeb中,这两个过程被抽象为HttpServletRequest和HttpServletResponse对象。

一、请求对象:HttpServletRequest

核心作用:封装客户端请求数据,提供访问接口。

1. 核心功能概览
  • 📌 获取请求头数据

  • 📌 读取请求参数(GET/POST)

  • 📌 作为请求域存储数据(类似Map)

  • 📌 实现请求转发

2. 关键API使用
java 复制代码
// 获取请求头
String value = request.getHeader("User-Agent");

// 获取所有请求头名称
Enumeration<String> headers = request.getHeaderNames();
while(headers.hasMoreElements()) {
    String name = headers.nextElement();
    System.out.println(name + ": " + request.getHeader(name));
}

// 获取请求元信息
System.out.println("Method: " + request.getMethod()); // GET/POST
System.out.println("URL: " + request.getRequestURL());
System.out.println("Client IP: " + request.getRemoteAddr());
3. 参数获取(重点!)
java 复制代码
// 单值参数(文本框/隐藏域)
String username = request.getParameter("user");

// 多值参数(复选框)
String[] hobbies = request.getParameterValues("hobby");

// 获取所有参数名
Enumeration<String> params = request.getParameterNames();

// 参数Map(自动处理单/多值)
Map<String, String[]> paramMap = request.getParameterMap();
4. 中文乱码解决方案

POST请求:

java 复制代码
request.setCharacterEncoding("UTF-8"); // 必须放在首行!

GET请求:

java 复制代码
// 方法1:手动解码(通用)
String name = new String(
    request.getParameter("name").getBytes("ISO-8859-1"), 
    "UTF-8"
);

// 方法2:Tomcat配置(conf/server.xml)
<Connector ... URIEncoding="UTF-8"/>

注意:Tomcat 8.5+ 默认已支持URL中文

5. 请求域与转发
java 复制代码
// 数据存入请求域
request.setAttribute("msg", "操作成功!");

// 请求转发(服务器内部跳转)
request.getRequestDispatcher("/success.jsp").forward(request, response);

二、响应对象:HttpServletResponse

核心作用:控制服务器返回客户端的响应内容。

1. 核心能力
  • 🔧 设置响应头(缓存/重定向等)

  • 🔧 发送状态码(404/500等)

  • 🔧 写入响应正文

  • 🔧 实现重定向

2. 关键操作
java 复制代码
// 设置内容类型与编码
response.setContentType("text/html;charset=utf-8");

// 设置响应头(5秒后跳转)
response.setHeader("Refresh", "5;URL=home.html");

// 发送错误状态
response.sendError(404, "资源不存在");

// 写入响应体
PrintWriter out = response.getWriter();
out.print("<h1>Hello World!</h1>");
3. 中文响应乱码解决
java 复制代码
// 双保险方案
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("中文内容");
4. 重定向实现
java 复制代码
// 客户端URL跳变(两次请求)
response.sendRedirect("/newPath/login.html");

三、核心对比:转发 vs 重定向

特性 请求转发 (forward()) 重定向 (sendRedirect())
请求次数 1次(服务器内部) 2次(客户端重新请求)
地址栏变化 不变 变为新URL
数据共享 通过request域共享 需使用session
路径写法 /servletPath (项目内) /projectName/servletPath
跨域能力 不支持 支持
性能 更高 较低(多一次请求)

开发建议:优先使用请求转发保持数据,需跨域或强制刷新时用重定向。


四、避坑指南

  1. 路径问题:

    • 转发:/ 代表当前Web应用根目录

    • 重定向:/ 代表Tomcat根目录,需包含项目名

  2. 乱码处理铁律:

    java 复制代码
    // POST请求:首行设置编码
    request.setCharacterEncoding("UTF-8");
    
    // 响应输出:双保险设置
    response.setContentType("text/html;charset=utf-8");
  3. 参数获取原则:

    • 单值用getParameter()

    • 多值用getParameterValues()

    • 遍历用getParameterMap()

  4. 敏感数据传递:

    • 避免GET传中文或敏感信息

    • 重定向时数据需存session

  5. 掌握请求响应对象的核心操作,是构建健壮Web应用的基石。理解数据流向(客户端→request→业务处理→response→客户端),能有效避免典型开发陷阱。

相关推荐
weixin_460443561 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
子兮曰2 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
海鸥-w4 小时前
什么是AOP
java
Cc.Y5 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
paopaokaka_luck5 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787055 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev5 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
Sarvartha5 小时前
Lambda 表达式和函数式接口
java·开发语言
IMPYLH5 小时前
HTML 的 <video> 元素
前端·html
计算机毕业设计杰瑞5 小时前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计