標籤:style blog http io color ar os 使用 java
Response響應對象主要將JSP容器處理後的結果傳回到用戶端。可以通過response變數設定HTTP的狀態和向用戶端發送資料,如Cookie、HTTP檔案頭資訊等。
一個典型的響應看起來就像下面這樣:
HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ......HeaderN: ... (Blank Line)<!doctype ...><html><head>...</head><body>...</body></html>
狀態行包含HTTP版本資訊,比如HTTP/1.1,一個狀態代碼,比如200,還有一個非常短的資訊對應著狀態代碼,比如OK。
下表摘要出了HTTP1.1回應標頭中最有用的部分,在網路編程中您將會經常見到它們:
| 回應標頭 |
描述 |
| Allow |
指定伺服器支援的request方法(GET,POST等等) |
| Cache-Control |
指定響應文檔能夠被安全緩衝的情況。通常取值為 public,private 或no-cache 等等。 Public意味著文檔可緩衝,Private意味著文檔只為單使用者服務並且只能使用私人緩衝。No-cache 意味著文檔不被緩衝。 |
| Connection |
命令瀏覽器是否要使用持久的HTTP串連。close值 命令瀏覽器不使用持久HTTP串連,而keep-alive 意味著使用持久化串連。 |
| Content-Disposition |
讓瀏覽器要求使用者將響應以給定的名稱儲存在磁碟中 |
| Content-Encoding |
指定傳輸時頁面的編碼規則 |
| Content-Language |
表述文檔所使用的語言,比如en, en-us,,ru等等 |
| Content-Length |
表明響應的位元組數。只有在瀏覽器使用持久化 (keep-alive) HTTP 串連時才有用 |
| Content-Type |
表明文檔使用的MIME類型 |
| Expires |
指明啥時候到期並從緩衝中移除 |
| Last-Modified |
指明文檔最後修改時間。用戶端可以 緩衝文檔並且在後續的請求中提供一個 If-Modified-Since要求標頭 |
| Location |
在300秒內,包含所有的有一個狀態代碼的響應地址,瀏覽器會自動重連然後檢索新文檔 |
| Refresh |
指明瀏覽器每隔多久請求更新一次頁面。 |
| Retry-After |
與503 (Service Unavailable)一起使用來告訴使用者多久後請求將會得到響應 |
| Set-Cookie |
指明當前頁面對應的cookie |
HttpServletResponse類
response對象是javax.servlet.http.HttpServletRequest類的一個執行個體。就像伺服器會建立request對象一樣,它也會建立一個用戶端響應。
response對象定義了處理建立HTTP資訊頭的介面。通過使用這個對象,開發人員們可以添加新的cookie或時間戳記,還有HTTP狀態嗎等等。
下表列出了用來設定HTTP回應標頭的方法,這些方法由HttpServletResponse 類提供:
| S.N. |
方法 & 描述 |
| 1 |
String encodeRedirectURL(String url) 對sendRedirect()方法使用的URL進行編碼 |
| 2 |
String encodeURL(String url) 將URL編碼,回傳包含Session ID的URL |
| 3 |
boolean containsHeader(String name) 返回指定的回應標頭是否存在 |
| 4 |
boolean isCommitted() 返迴響應是否已經提交到用戶端 |
| 5 |
void addCookie(Cookie cookie) 添加指定的cookie至響應中 |
| 6 |
void addDateHeader(String name, long date) 添加指定名稱的回應標頭和日期值 |
| 7 |
void addHeader(String name, String value) 添加指定名稱的回應標頭和值 |
| 8 |
void addIntHeader(String name, int value) 添加指定名稱的回應標頭和int值 |
| 9 |
void flushBuffer() 將任何緩衝中的內容寫入用戶端 |
| 10 |
void reset() 清除任何緩衝中的任何資料,包括狀態代碼和各種回應標頭 |
| 11 |
void resetBuffer() 清除基本的快取資料,不包括回應標頭和狀態代碼 |
| 12 |
void sendError(int sc) 使用指定的狀態代碼向用戶端發送一個出錯響應,然後清除緩衝 |
| 13 |
void sendError(int sc, String msg) 使用指定的狀態代碼和訊息向用戶端發送一個出錯響應 |
| 14 |
void sendRedirect(String location) 使用指定的URL向用戶端發送一個臨時的間接響應 |
| 15 |
void setBufferSize(int size) 設定響應體的緩衝區大小 |
| 16 |
void setCharacterEncoding(String charset) 指定響應的編碼集(MIME字元集),例如UTF-8 |
| 17 |
void setContentLength(int len) 指定HTTP servlets中響應的內容的長度,此方法用來設定 HTTP Content-Length 資訊頭 |
| 18 |
void setContentType(String type) 設定響應的內容的類型,如果響應還未被提交的話 |
| 19 |
void setDateHeader(String name, long date) 使用指定名稱和值設定回應標頭的名稱和內容 |
| 20 |
void setHeader(String name, String value) 使用指定名稱和值設定回應標頭的名稱和內容 |
| 21 |
void setIntHeader(String name, int value) 使用指定名稱和值設定回應標頭的名稱和內容 |
| 22 |
void setLocale(Locale loc) 設定響應的語言環境,如果響應尚未被提交的話 |
| 23 |
void setStatus(int sc) 設定響應的狀態代碼 |
HTTP回應標頭程式樣本
接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來類比一個數字時鐘:
<%@ page import="java.io.*,java.util.*" %><html><head><title>Auto Refresh Header Example</title></head><body><center><h2>Auto Refresh Header Example</h2><% // 設定每隔5秒自動重新整理 response.setIntHeader("Refresh", 5); // 擷取目前時間 Calendar calendar = new GregorianCalendar(); String am_pm; int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); if(calendar.get(Calendar.AM_PM) == 0) am_pm = "AM"; else am_pm = "PM"; String CT = hour+":"+ minute +":"+ second +" "+ am_pm; out.println("Current Time is: " + CT + "\n");%></center></body></html>
將以上代碼儲存為main.jsp,然後通過瀏覽器訪問它。它將會每隔5秒顯示一下系統目前時間。
運行結果如下:
Auto Refresh Header ExampleCurrent Time is: 9:44:50 PM
您也可以自己動手修改以上代碼,試試使用其他的方法,將能得到更深的體會。
JSP 伺服器響應