【Easylive】HttpServletRequest、HttpServletResponse、HttpSession 介绍

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版
这三个是 Java Web 开发(Servlet/JSP)的核心接口,用于处理 HTTP 请求和响应 以及 用户会话管理。它们在 Spring MVC(@Controller)中也被广泛使用。


1. HttpServletRequest(请求对象)

作用

封装客户端(浏览器)发送的 HTTP 请求信息,包括:
• 请求参数(GET/POST)
• 请求头(Headers)
• 会话(Session)
• 客户端信息(IP、User-Agent)

常用方法

方法说明
String getParameter("name")获取请求参数(如 ?id=123 或表单 POST 数据)
String[] getParameterValues("name")获取复选框等同名参数(返回数组)
String getHeader("User-Agent")获取请求头信息
String getMethod()获取请求方法(GET/POST/PUT/DELETE)
String getRequestURI()获取请求路径(如 /user/login
Cookie[] getCookies()获取客户端发送的 Cookie
HttpSession getSession()获取或创建会话(Session)
String getRemoteAddr()获取客户端 IP 地址

代码示例

@GetMapping("/user")
public String getUser(HttpServletRequest request) {
    String username = request.getParameter("username"); // 获取参数
    String ip = request.getRemoteAddr(); // 获取客户端IP
    return "User: " + username + ", IP: " + ip;
}

2. HttpServletResponse(响应对象)

作用

封装服务器返回给客户端的 HTTP 响应信息,包括:
• 设置响应状态码(200/404/500)
• 添加响应头(Headers)
• 写入响应体(HTML/JSON)
• 重定向或转发

常用方法

方法说明
void setStatus(200)设置 HTTP 状态码(如 404、500)
void setContentType("text/html")设置响应内容类型(如 application/json
PrintWriter getWriter()获取输出流,向客户端发送文本(HTML/JSON)
void sendRedirect("/new-url")重定向到新地址(302 跳转)
void addCookie(Cookie cookie)向客户端添加 Cookie
void setHeader("Cache-Control", "no-cache")设置响应头

代码示例

@GetMapping("/hello")
public void sayHello(HttpServletResponse response) throws IOException {
    response.setContentType("text/html");
    response.getWriter().write("<h1>Hello World!</h1>");
}

@GetMapping("/redirect")
public void redirect(HttpServletResponse response) throws IOException {
    response.sendRedirect("https://example.com"); // 重定向
}

3. HttpSession(会话对象)

作用

用于在 多次 HTTP 请求间存储用户数据(如登录状态、购物车信息)。
基于 Cookie(JSESSIONID)URL 重写 实现会话跟踪。

常用方法

方法说明
void setAttribute("key", value)存储会话数据
Object getAttribute("key")获取会话数据
void removeAttribute("key")删除会话数据
void invalidate()销毁当前会话(用户注销)
String getId()获取会话 ID
long getCreationTime()获取会话创建时间

代码示例

// 登录时存储用户信息
@PostMapping("/login")
public String login(HttpServletRequest request, @RequestParam String username) {
    HttpSession session = request.getSession(); // 获取或创建Session
    session.setAttribute("user", username); // 存储用户信息
    return "Login success!";
}

// 获取会话数据
@GetMapping("/profile")
public String profile(HttpSession session) {
    String user = (String) session.getAttribute("user"); // 获取用户信息
    return "Current user: " + user;
}

// 注销
@GetMapping("/logout")
public String logout(HttpSession session) {
    session.invalidate(); // 销毁会话
    return "Logged out!";
}

4. 三者的关系

  1. 请求流程
    • 浏览器发送请求 → HttpServletRequest 接收数据。
    • 服务器处理请求 → 使用 HttpSession 存储用户状态。
    • 服务器返回响应 → HttpServletResponse 输出结果。

  2. 典型场景
    登录认证:通过 Session 保存用户登录状态。
    表单提交:通过 Request 获取参数,通过 Response 返回结果。
    权限控制:检查 Session 中是否存在用户信息。


5. 在 Spring MVC 中的简化用法

Spring 提供了更简洁的替代方式(底层仍依赖这三个对象):

(1) 直接注入

@GetMapping("/example")
public String example(
    @RequestParam String param,   // 替代 request.getParameter()
    @CookieValue String cookie,   // 替代 request.getCookies()
    HttpSession session           // 直接注入 Session
) {
    session.setAttribute("key", "value");
    return "OK";
}

(2) 使用 @ModelAttribute 绑定对象

@PostMapping("/user")
public String addUser(@ModelAttribute User user) {
    // 自动将请求参数绑定到 User 对象
    return "Saved: " + user.getName();
}

6. 总结

对象作用典型用途
HttpServletRequest封装客户端请求获取参数、请求头、客户端信息
HttpServletResponse封装服务器响应设置状态码、返回数据、重定向
HttpSession跨请求存储用户数据登录状态、购物车、用户偏好

掌握这三个对象是 Java Web 开发的基础,无论是传统 Servlet 还是 Spring MVC 都离不开它们! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值