Response響應(yīng)對象主要將JSP容器處理后的結(jié)果傳回到客戶端??梢酝ㄟ^response變量設(shè)置HTTP的狀態(tài)和向客戶端發(fā)送數(shù)據(jù),如Cookie、HTTP文件頭信息等。
一個典型的響應(yīng)看起來就像下面這樣:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
狀態(tài)行包含HTTP版本信息,比如HTTP/1.1,一個狀態(tài)碼,比如200,還有一個非常短的信息對應(yīng)著狀態(tài)碼,比如OK。
下表摘要出了HTTP1.1響應(yīng)頭中最有用的部分,在網(wǎng)絡(luò)編程中您將會經(jīng)常見到它們:
響應(yīng)頭 | 描述 |
---|---|
Allow | 指定服務(wù)器支持的request方法(GET,POST等等) |
Cache-Control | 指定響應(yīng)文檔能夠被安全緩存的情況。通常取值為 public,private 或no-cache 等等。 Public意味著文檔可緩存,Private意味著文檔只為單用戶服務(wù)并且只能使用私有緩存。No-cache 意味著文檔不被緩存。 |
Connection | 命令瀏覽器是否要使用持久的HTTP連接。close值 命令瀏覽器不使用持久HTTP連接,而keep-alive 意味著使用持久化連接。 |
Content-Disposition | 讓瀏覽器要求用戶將響應(yīng)以給定的名稱存儲在磁盤中 |
Content-Encoding | 指定傳輸時頁面的編碼規(guī)則 |
Content-Language | 表述文檔所使用的語言,比如en, en-us,,ru等等 |
Content-Length | 表明響應(yīng)的字節(jié)數(shù)。只有在瀏覽器使用持久化 (keep-alive) HTTP 連接時才有用 |
Content-Type | 表明文檔使用的MIME類型 |
Expires | 指明啥時候過期并從緩存中移除 |
Last-Modified | 指明文檔最后修改時間。客戶端可以 緩存文檔并且在后續(xù)的請求中提供一個 If-Modified-Since請求頭 |
Location | 在300秒內(nèi),包含所有的有一個狀態(tài)碼的響應(yīng)地址,瀏覽器會自動重連然后檢索新文檔 |
Refresh | 指明瀏覽器每隔多久請求更新一次頁面。 |
Retry-After | 與503 (Service Unavailable)一起使用來告訴用戶多久后請求將會得到響應(yīng) |
Set-Cookie | 指明當(dāng)前頁面對應(yīng)的cookie |
response對象是javax.servlet.http.HttpServletResponse類的一個實(shí)例。就像服務(wù)器會創(chuàng)建request對象一樣,它也會創(chuàng)建一個客戶端響應(yīng)。
response對象定義了處理創(chuàng)建HTTP信息頭的接口。通過使用這個對象,開發(fā)者們可以添加新的cookie或時間戳,還有HTTP狀態(tài)碼等等。
下表列出了用來設(shè)置HTTP響應(yīng)頭的方法,這些方法由HttpServletResponse 類提供:
S.N. | 方法 & 描述 |
---|---|
1 | String encodeRedirectURL(String url) 對sendRedirect()方法使用的URL進(jìn)行編碼 |
2 | String encodeURL(String url) 將URL編碼,回傳包含Session ID的URL |
3 | boolean containsHeader(String name) 返回指定的響應(yīng)頭是否存在 |
4 | boolean isCommitted() 返回響應(yīng)是否已經(jīng)提交到客戶端 |
5 | void addCookie(Cookie cookie) 添加指定的cookie至響應(yīng)中 |
6 | void addDateHeader(String name, long date) 添加指定名稱的響應(yīng)頭和日期值 |
7 | void addHeader(String name, String value) 添加指定名稱的響應(yīng)頭和值 |
8 | void addIntHeader(String name, int value) 添加指定名稱的響應(yīng)頭和int值 |
9 | void flushBuffer() 將任何緩存中的內(nèi)容寫入客戶端 |
10 | void reset() 清除任何緩存中的任何數(shù)據(jù),包括狀態(tài)碼和各種響應(yīng)頭 |
11 | void resetBuffer() 清除基本的緩存數(shù)據(jù),不包括響應(yīng)頭和狀態(tài)碼 |
12 | void sendError(int sc) 使用指定的狀態(tài)碼向客戶端發(fā)送一個出錯響應(yīng),然后清除緩存 |
13 | void sendError(int sc, String msg) 使用指定的狀態(tài)碼和消息向客戶端發(fā)送一個出錯響應(yīng) |
14 | void sendRedirect(String location) 使用指定的URL向客戶端發(fā)送一個臨時的間接響應(yīng) |
15 | void setBufferSize(int size) 設(shè)置響應(yīng)體的緩存區(qū)大小 |
16 | void setCharacterEncoding(String charset) 指定響應(yīng)的編碼集(MIME字符集),例如UTF-8 |
17 | void setContentLength(int len) 指定HTTP servlets中響應(yīng)的內(nèi)容的長度,此方法用來設(shè)置 HTTP Content-Length 信息頭 |
18 | void setContentType(String type) 設(shè)置響應(yīng)的內(nèi)容的類型,如果響應(yīng)還未被提交的話 |
19 | void setDateHeader(String name, long date) 使用指定名稱和值設(shè)置響應(yīng)頭的名稱和內(nèi)容 |
20 | void setHeader(String name, String value) 使用指定名稱和值設(shè)置響應(yīng)頭的名稱和內(nèi)容 |
21 | void setIntHeader(String name, int value) 使用指定名稱和值設(shè)置響應(yīng)頭的名稱和內(nèi)容 |
22 | void setLocale(Locale loc) 設(shè)置響應(yīng)的語言環(huán)境,如果響應(yīng)尚未被提交的話 |
23 | void setStatus(int sc) 設(shè)置響應(yīng)的狀態(tài)碼 |
接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來模擬一個數(shù)字時鐘:
<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<% // 設(shè)置每隔5秒自動刷新 response.setIntHeader("Refresh", 5); // 獲取當(dāng)前時間 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秒顯示一下系統(tǒng)當(dāng)前時間。
運(yùn)行結(jié)果如下:
Auto Refresh Header Example
Current Time is: 9:44:50 PM
您也可以自己動手修改以上代碼,試試使用其他的方法,將能得到更深的體會。
更多建議: