response對象
- 1.概述
- 2.實例:response對象方法運用
- (1)實例一:頁面自動刷新
- (2)實例二:實現頁面重定向,具體的代碼
- (3)綜合實例:實現登錄并記錄用戶名
1.概述
response對象主要用于對客戶端的請求進行回應,將Web服務器處理后的結果發回給客戶端。它封裝了 JSP 產生的響應,并發送到客戶端以響應客戶端的請求,請求的數據可以是各種數據類型,甚至是文件。
response 對象屬于 HttpServletResponse 接口的實例,HttpServletResponse接口的定義格式與HttpServletRequest 接口的定義格式非常類似,都只有一個父接口 ServletResponse 和一個子接口HttpServletResponse。response 對象也提供了很多方法,例如設置文件頭信息、設定頁面重定向以及設置緩沖區信息等,方法名及功能如下所示。
方法名 | 功能介紹 |
---|---|
void addCookie (Cookie c) | 添加一個 cookie 對象,用來保存客戶端用戶信息,例如一些網站或企業應用系統,登錄時提供一個 “是否記住用戶名” 的選項,可以通過 cookie 實現 |
void setHeader(String name,String value) | 設置頭信息:response.setHeader (“頭信息內容”" 頭信息參數 "); 常用的刷新 refresh,例如:response.setHeader (“refresh”,“1”); 幾秒后跳轉:response.setHeader (“refresh”,“2;URL=XXX”) |
void sendRedirect(String url) | 設置頁面重定向 |
void flushBuffer() | 強制將緩沖區的內容輸出到客戶端 |
void setBufferSize() | 設置緩沖區的大小 |
void reset() | 清除緩沖區的內容,同時清除狀態碼和報頭 |
int getBufferSize() | 獲取響應所使用的緩沖區的實際大小,如果沒有使用緩沖區,則返回為 0 |
boolean isCommitted() | 檢測服務器端是否已經把數據寫入客戶端 |
2.實例:response對象方法運用
(1)實例一:頁面自動刷新
<%@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><%// 獲取當前應用的基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>response方法實現頁面定時刷新</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">
</head><body>
<h3>當前系統時間(每秒自動刷新):</h3>
<%// 創建當前時間對象Date currentTime = new Date();// 輸出本地化的時間字符串(包含日期和時間)out.println(currentTime.toLocaleString());// 核心方法:設置響應頭refresh,實現1秒自動刷新// 第一個參數是響應頭名稱"refresh",第二個參數是刷新間隔(秒)response.setHeader("refresh", "1");
%>
</body>
</html>
運行結果如下:
(2)實例二:實現頁面重定向,具體的代碼
responseDemo02.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 計算當前應用的基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>response方法實現重定向</title></head><body><%/** 頁面重定向核心代碼* 工作原理:服務器向客戶端發送302狀態碼和新的URL* 客戶端收到后會自動請求新的URL,地址欄會顯示新頁面的地址* 注意:重定向是客戶端行為,會產生兩次請求*/response.sendRedirect("responseDemo02_01.jsp");// 注意:sendRedirect之后的代碼可能不會執行,建議放在頁面邏輯最后%></body>
</html>
responseDemo02_01.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 計算當前應用的基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>頁面重定向目標頁面</title></head><body><h3>重定向成功!</h3><p>Hello!!</p><p>頁面發生了變化,已經重定向到新的頁面......</p><p>當前頁面路徑:responseDemo02_01.jsp</p></body>
</html>
運行結果如下:
(3)綜合實例:實現登錄并記錄用戶名
在某網站的登錄頁面登錄時如果選擇“記住用戶名”,登錄成功后會跳轉至一個中間頁面(頁面代碼將登錄的用戶名密碼存在cookie中),中間頁面中存在一個超鏈接,單擊超鏈接可以鏈接到第三個頁面查看response方法保存到cookie中的數據信息。如果不選擇“記住用戶名”,則中間頁面會將cookie值刪除,再單擊超鏈接則無法顯示登錄的用戶名和密碼。
login.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 計算應用基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>平臺 - 登錄</title></head><body background="images/bk.jpg"><%// 初始化用戶名和密碼變量String username = "";String password = "";// 獲取客戶端發送的所有CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {// 遍歷Cookie查找保存的用戶名和密碼for (Cookie cookie : cookies) {if (cookie.getName().equals("username")) {username = cookie.getValue();}if (cookie.getName().equals("password")) {password = cookie.getValue();}// 將Cookie回寫到響應中,維持Cookie有效期response.addCookie(cookie);}}%><!-- 登錄表單,提交到cookieSave.jsp處理 --><form action="ch4/response/cookieSave.jsp" method="post"><h1 style="text-align: center;">登錄平臺</h1><table border="1" align="center"><tr><td>用戶名:</td><td><input type="text" name="username" value="<%=username%>"></td></tr><tr><td>密碼:</td><td><input type="password" name="password" value="<%=password%>"></td></tr><tr><td colspan="2"><input type="checkbox" name="flag"> 記住用戶名</td></tr><tr align="center"><td colspan="2"><input type="submit" value=" 登 錄 "></td></tr></table></form></body>
</html>
cookieSave.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>處理登錄信息</title></head><body><%// 設置請求編碼,防止中文亂碼request.setCharacterEncoding("UTF-8");// 獲取表單提交的用戶名和密碼String username = request.getParameter("username");String password = request.getParameter("password");// 獲取"記住用戶名"復選框狀態String[] flag = request.getParameterValues("flag");if (flag != null && flag.length > 0) {// 選中了"記住用戶名",創建并保存CookieCookie cookie1 = new Cookie("username", username);Cookie cookie2 = new Cookie("password", password);// 設置Cookie有效期為1天(單位:秒)cookie1.setMaxAge(1 * 24 * 60 * 60);cookie2.setMaxAge(1 * 24 * 60 * 60);// 將Cookie添加到響應中,發送給客戶端response.addCookie(cookie1);response.addCookie(cookie2);} else {// 未選中"記住用戶名",刪除已有的CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {// 找到存儲用戶名和密碼的Cookie,設置有效期為0(立即刪除)if (cookie.getName().equals("username")) {cookie.setMaxAge(0);}if (cookie.getName().equals("password")) {cookie.setMaxAge(0);}// 將修改后的Cookie回寫到客戶端response.addCookie(cookie);}}}%><!-- 超鏈接到查詢頁面查看Cookie信息 --><a href="ch4/response/cookieQuery.jsp">查看是否保存了用戶名信息</a></body>
</html>
cookieQuery.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>用戶信息查詢</title></head><body bgcolor="#A2B5CD"><%request.setCharacterEncoding("UTF-8");// 初始化變量String username = "";String password = "";// 獲取客戶端發送的CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {// 提取用戶名和密碼if (cookie.getName().equals("username")) {username = cookie.getValue();}if (cookie.getName().equals("password")) {password = cookie.getValue();}// 維持Cookie有效期response.addCookie(cookie);}}%><!-- 顯示Cookie中保存的信息 --><h2>用戶名為:<%=username %></h2><h2>密碼為:<%=password %></h2></body>
</html>
運行結果如下:
選中“記住用戶名”,單擊“登錄”按鈕后,跳轉至中間頁面,處理是否記住用戶名信息。
單擊“查看是否保存了用戶名信息”超鏈接,頁面再次進行跳轉。