HttpServletRequest 和 HttpServletResponse 詳解
1. HttpServletRequest(HTTP 請求對象)
HttpServletRequest
是 Java Servlet API 提供的接口,用于封裝客戶端的 HTTP 請求信息。它繼承自 ServletRequest
,并增加了 HTTP 協議相關的功能。
1.1 核心功能
(1) 獲取請求參數
getParameter(String name)
獲取單個請求參數(如表單字段、URL 查詢參數)。String username = request.getParameter("username");
getParameterValues(String name)
獲取多個同名參數(如復選框、多選列表)。String[] hobbies = request.getParameterValues("hobby");
getParameterMap()
返回所有請求參數的Map<String, String[]>
。Map<String, String[]> paramMap = request.getParameterMap();
(2) 獲取請求頭信息
getHeader(String name)
獲取單個請求頭(如User-Agent
、Cookie
)。String userAgent = request.getHeader("User-Agent");
getHeaders(String name)
返回指定請求頭的所有值(如多個Accept
頭)。Enumeration<String> acceptHeaders = request.getHeaders("Accept");
getHeaderNames()
返回所有請求頭名稱。Enumeration<String> headerNames = request.getHeaderNames();
(3) 獲取客戶端和服務器信息
getRemoteAddr()
獲取客戶端 IP 地址。String ip = request.getRemoteAddr();
getMethod()
獲取 HTTP 方法(GET
、POST
、PUT
、DELETE
等)。String method = request.getMethod();
getRequestURL()
返回完整的請求 URL(StringBuffer
類型)。StringBuffer url = request.getRequestURL();
getRequestURI()
返回請求的 URI(不包含協議、域名和端口)。String uri = request.getRequestURI(); // 如 "/app/login"
(4) 獲取會話(Session)
getSession()
獲取當前會話,如果不存在則創建新會話。HttpSession session = request.getSession();
getSession(boolean create)
如果create=false
,僅獲取現有會話,不創建新會話。HttpSession session = request.getSession(false);
(5) 獲取請求體(Body)
getInputStream()
獲取ServletInputStream
,用于讀取二進制數據(如文件上傳)。ServletInputStream inputStream = request.getInputStream();
getReader()
獲取BufferedReader
,用于讀取文本數據(如 JSON、XML)。BufferedReader reader = request.getReader();
(6) 屬性(Attribute)管理
setAttribute(String name, Object value)
存儲請求范圍內的屬性(可用于 JSP 或轉發)。request.setAttribute("message", "Hello");
getAttribute(String name)
獲取請求屬性。String msg = (String) request.getAttribute("message");
removeAttribute(String name)
移除請求屬性。request.removeAttribute("message");
2. HttpServletResponse(HTTP 響應對象)
HttpServletResponse
是 Java Servlet API 提供的接口,用于封裝服務器對客戶端的 HTTP 響應。它繼承自 ServletResponse
,并增加了 HTTP 協議相關的功能。
2.1 核心功能
(1) 設置響應狀態
setStatus(int sc)
設置 HTTP 狀態碼(如200
、404
、500
)。response.setStatus(HttpServletResponse.SC_OK); // 200
sendError(int sc, String msg)
發送錯誤狀態碼和消息(如404 Not Found
)。response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page not found");
(2) 設置響應頭
setHeader(String name, String value)
設置響應頭(如Content-Type
、Cache-Control
)。response.setHeader("Content-Type", "text/html");
addHeader(String name, String value)
添加多個同名響應頭(如多個Set-Cookie
)。response.addHeader("Set-Cookie", "user=admin");
setContentType(String type)
設置內容類型(如text/html
、application/json
)。response.setContentType("application/json");
setCharacterEncoding(String charset)
設置字符編碼(如UTF-8
)。response.setCharacterEncoding("UTF-8");
(3) 寫入響應數據
getOutputStream()
獲取ServletOutputStream
,用于寫入二進制數據(如圖片、文件)。ServletOutputStream out = response.getOutputStream(); out.write(bytes);
getWriter()
獲取PrintWriter
,用于寫入文本數據(如 HTML、JSON)。PrintWriter writer = response.getWriter(); writer.println("<h1>Hello World</h1>");
(4) 重定向
sendRedirect(String location)
發送 302 重定向到指定 URL。response.sendRedirect("/login");
(5) Cookie 管理
addCookie(Cookie cookie)
向客戶端添加 Cookie。Cookie cookie = new Cookie("username", "admin"); response.addCookie(cookie);
(6) 緩存控制
setDateHeader(String name, long date)
設置日期型響應頭(如Expires
)。response.setDateHeader("Expires", System.currentTimeMillis() + 3600000);
3. 實際應用示例
示例 1:登錄表單處理
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {String username = request.getParameter("username");String password = request.getParameter("password");if ("admin".equals(username) && "123456".equals(password)) {// 登錄成功,存儲 SessionHttpSession session = request.getSession();session.setAttribute("user", username);// 重定向到首頁response.sendRedirect("/home");} else {// 登錄失敗,返回錯誤response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<h1>Login Failed</h1>");}
}
示例 2:返回 JSON 數據
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("application/json");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();String json = "{\"name\":\"John\", \"age\":30}";out.print(json);
}
4. 總結
功能 | HttpServletRequest | HttpServletResponse |
---|---|---|
獲取請求數據 | getParameter() , getHeader() | - |
獲取會話 | getSession() | - |
讀取請求體 | getInputStream() , getReader() | - |
設置響應數據 | - | getOutputStream() , getWriter() |
設置狀態碼 | - | setStatus() , sendError() |
設置響應頭 | - | setHeader() , addHeader() |
重定向 | - | sendRedirect() |
Cookie 管理 | getCookies() | addCookie() |
這兩個對象是 Java Web 開發的核心,幾乎所有 Web 框架(如 Spring MVC)底層都依賴它們進行 HTTP 請求和響應處理。