【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 都離不開它們! 🚀