【Easylive】HttpServletRequest、HttpServletResponse、HttpSession 介绍

发布于:2025-04-01 ⋅ 阅读:(24) ⋅ 点赞:(0)

【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 都离不开它们! 🚀


网站公告

今日签到

点亮在社区的每一天
去签到