当前位置: 首页 > ops >正文

JavaWeb核心:HttpServletRequest与HttpServletResponse详解

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

一、请求对象:HttpServletRequest

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

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

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

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

  • 📌 实现请求转发

2. 关键API使用
// 获取请求头
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. 参数获取(重点!)
// 单值参数(文本框/隐藏域)
String username = request.getParameter("user");// 多值参数(复选框)
String[] hobbies = request.getParameterValues("hobby");// 获取所有参数名
Enumeration<String> params = request.getParameterNames();// 参数Map(自动处理单/多值)
Map<String, String[]> paramMap = request.getParameterMap();
4. 中文乱码解决方案

POST请求

request.setCharacterEncoding("UTF-8"); // 必须放在首行!

GET请求

// 方法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. 请求域与转发
// 数据存入请求域
request.setAttribute("msg", "操作成功!");// 请求转发(服务器内部跳转)
request.getRequestDispatcher("/success.jsp").forward(request, response);

二、响应对象:HttpServletResponse

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

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

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

  • 🔧 写入响应正文

  • 🔧 实现重定向

2. 关键操作
// 设置内容类型与编码
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. 中文响应乱码解决
// 双保险方案
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("中文内容");
4. 重定向实现
// 客户端URL跳变(两次请求)
response.sendRedirect("/newPath/login.html");

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

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

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


四、避坑指南

  1. 路径问题

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

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

  2. 乱码处理铁律

    // POST请求:首行设置编码
    request.setCharacterEncoding("UTF-8");// 响应输出:双保险设置
    response.setContentType("text/html;charset=utf-8");

  3. 参数获取原则

    • 单值用getParameter()

    • 多值用getParameterValues()

    • 遍历用getParameterMap()

  4. 敏感数据传递

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

    • 重定向时数据需存session

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

http://www.xdnf.cn/news/17655.html

相关文章:

  • mac环境下安装git并配置密钥等
  • 从行业场景到视觉呈现:3ds Max 与 C4D 效果图的本质分野
  • Pycharm现有conda环境有对应env,但是添加后没反应
  • 学习嵌入式的第十九天——Linux——文件编程
  • Spring Boot 使用 @NotBlank + @Validated 优雅校验参数
  • 疯狂星期四文案网第38天运营日记
  • TorchDynamo - API
  • 互联网大厂Java求职面试实录:Spring Boot到微服务与AI的技术问答
  • 【Unity开发】Unity核心学习(一)
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 FileZilla Server
  • MyBatis 中 XML 与 DAO 接口的位置关系及扫描机制详解
  • react与vue的对比,来实现标签内部类似v-for循环,v-if等功能
  • 万字详解C++11列表初始化与移动语义
  • 如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录
  • 基于深度学习的苹果品质智能检测算法研究
  • Kubernetes(K8S)中,kubectl describe node与kubectl top pod命令显示POD资源的核心区别
  • .net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现
  • Android Activity 的对话框(Dialog)样式
  • LaTeX(排版系统)Texlive(环境)Vscode(编辑器)环境配置与安装
  • PostgreSQL——索引
  • SpringBoot工程妙用:不启动容器也能享受Fat Jar的便利
  • Redis:是什么、能做什么?
  • 第十三节:后期处理:效果增强
  • MySQL优化常用的几个方法
  • 使用 Python Selenium 和 Requests 实现歌曲网站批量下载实战
  • 100、【OS】【Nuttx】【构建】cmake 配置保存
  • 文心4.5专家负载均衡机制深度解析
  • 【Virtual Globe 渲染技术笔记】4 椭球面上的曲线
  • 线上Linux服务器被植入各种病毒的详细分析、处理、加固流程
  • 机器学习之TF-IDF文本关键词提取