【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. 三者的关系
请求流程:
• 浏览器发送请求 →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 都离不开它们! 🚀