【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(); // 获取客户端IPreturn "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(); // 获取或创建Sessionsession.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. 三者的关系
-
请求流程:
• 浏览器发送请求 →HttpServletRequest
接收数据。
• 服务器处理请求 → 使用HttpSession
存储用户状态。
• 服务器返回响应 →HttpServletResponse
输出结果。 -
典型场景:
• 登录认证:通过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 都离不开它们! 🚀