第六篇 HttpServletRequest对象

HttpServletRequest对象

HttpServletRequest是Java Servlet API中的一个接口,用于封装客户端请求信息。当客户端(如浏览器)向服务器发送HTTP请求时,服务器会创建一个HttpServletRequest对象,包含请求的所有细节。

主要功能和方法:

  • 获取请求参数 :通过getParameter(String name)获取表单或URL中的参数值。
  • 请求头信息 :使用getHeader(String name)读取请求头内容,如User-Agent
  • 路径信息getRequestURI()返回请求的URI路径,getContextPath()获取应用上下文路径。
  • 会话管理getSession()返回或创建与请求关联的HttpSession对象。
  • 请求方法getMethod()返回HTTP方法类型(GET/POST等)。

示例代码:

java 复制代码
String username = request.getParameter("username");
String userAgent = request.getHeader("User-Agent");

HttpServletResponse对象

HttpServletResponse用于生成服务器对客户端的响应。通过该对象可以设置响应头、状态码及返回数据。

主要功能和方法:

  • 设置状态码setStatus(int sc)设置HTTP响应状态码(如404、200)。
  • 响应头配置setHeader(String name, String value)添加自定义响应头。
  • 内容类型setContentType(String type)指定响应MIME类型(如text/html)。
  • 输出流getWriter()返回PrintWriter对象,用于输出文本;getOutputStream()输出二进制数据。
  • 重定向sendRedirect(String location)实现客户端重定向。

示例代码:

java 复制代码
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>Hello World</body></html>");

常见应用场景

请求处理流程

  1. 客户端发送HTTP请求到服务器。
  2. 服务器创建HttpServletRequest和HttpServletResponse对象。
  3. Servlet通过request对象解析请求数据。
  4. 业务逻辑处理后,通过response对象返回响应。

注意事项

  • 字符编码 :需在读取参数前调用request.setCharacterEncoding("UTF-8")避免乱码。
  • 响应缓存 :默认情况下响应会被缓存,可通过response.setHeader("Cache-Control", "no-cache")禁用。
  • 线程安全:HttpServletRequest和HttpServletResponse非线程安全,需在方法内局部使用。

HttpSession

HttpSession 简介

HttpSession 是 Java Servlet 技术中的核心接口,用于在服务器端存储用户会话数据。它通过唯一的会话 ID(通常通过 Cookie 或 URL 重写传递)标识用户,实现跨请求的数据共享。

HttpSession 的核心方法

  • setAttribute(String name, Object value):将对象绑定到会话,键值对形式存储。
  • getAttribute(String name):根据键名获取绑定的对象。
  • removeAttribute(String name):移除指定键的会话数据。
  • invalidate():销毁当前会话,释放所有绑定数据。
  • getId():获取会话的唯一标识符。

HttpSession 的生命周期

  • 创建 :首次调用 request.getSession() 时,服务器会创建新会话。
  • 超时 :默认超时时间由服务器配置(如 Tomcat 默认为 30 分钟),可通过 setMaxInactiveInterval(int seconds) 调整。
  • 销毁 :调用 invalidate() 或超时后,会话自动销毁。

代码示例

java 复制代码
// 获取或创建会话
HttpSession session = request.getSession();

// 存储数据
session.setAttribute("username", "Alice");

// 读取数据
String username = (String) session.getAttribute("username");

// 移除数据
session.removeAttribute("username");

// 销毁会话
session.invalidate();

注意事项

  • 性能影响:会话数据存储在服务器内存中,大量会话可能导致内存压力。
  • 分布式环境:在集群部署时,需借助 Redis 等工具实现会话共享。
  • 安全性:避免存储敏感信息,防止会话固定攻击(Session Fixation)。

配置会话超时

web.xml 中配置全局超时时间(分钟):

XML 复制代码
<session-config>
    <session-timeout>15</session-timeout>
</session-config>
相关推荐
江南十四行9 分钟前
Python上下文管理器与with语句——资源管理的艺术
java·jvm·数据库
书源丶10 分钟前
四十五、函数式接口与 Lambda 表达式
java·开发语言
直奔標竿11 分钟前
MySQL与Redis数据一致性实战方案(避坑指南)
java·数据库·spring boot·redis·mysql·spring·缓存
fliter12 分钟前
你的网站对 AI Agent 友好吗?Cloudflare 给整个互联网打了一个分
后端
java1234_小锋13 分钟前
Java进程突然挂了如何排查?
java·开发语言
夕除17 分钟前
spring boot--04
java·spring boot
java小白小39 分钟前
Guava Cache 本地缓存
java
星栈41 分钟前
Rust + DDD 三层架构:没有 Spring、没有 DI 容器,解耦能力一点不少
后端·github
梦梦代码精42 分钟前
LikeShop 二次开发扩展能力白皮书——面向业务增长的可扩展电商架构实践
java·架构·github
极客先躯44 分钟前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点