JSP 服務(wù)器響應(yīng)
Response響應(yīng)對(duì)象主要將JSP容器處理后的結(jié)果傳回到客戶端??梢酝ㄟ^response變量設(shè)置HTTP的狀態(tài)和向客戶端發(fā)送數(shù)據(jù),如Cookie、HTTP文件頭信息等。
一個(gè)典型的響應(yīng)看起來就像下面這樣:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
狀態(tài)行包含HTTP版本信息,比如HTTP/1.1,一個(gè)狀態(tài)碼,比如200,還有一個(gè)非常短的信息對(duì)應(yīng)著狀態(tài)碼,比如OK。
下表摘要出了HTTP1.1響應(yīng)頭中最有用的部分,在網(wǎng)絡(luò)編程中您將會(huì)經(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)以給定的名稱存儲(chǔ)在磁盤中 |
Content-Encoding | 指定傳輸時(shí)頁(yè)面的編碼規(guī)則 |
Content-Language | 表述文檔所使用的語(yǔ)言,比如en, en-us,,ru等等 |
Content-Length | 表明響應(yīng)的字節(jié)數(shù)。只有在瀏覽器使用持久化 (keep-alive) HTTP 連接時(shí)才有用 |
Content-Type | 表明文檔使用的MIME類型 |
Expires | 指明啥時(shí)候過期并從緩存中移除 |
Last-Modified | 指明文檔最后修改時(shí)間??蛻舳丝梢?緩存文檔并且在后續(xù)的請(qǐng)求中提供一個(gè) If-Modified-Since請(qǐng)求頭 |
Location | 在300秒內(nèi),包含所有的有一個(gè)狀態(tài)碼的響應(yīng)地址,瀏覽器會(huì)自動(dòng)重連然后檢索新文檔 |
Refresh | 指明瀏覽器每隔多久請(qǐng)求更新一次頁(yè)面。 |
Retry-After | 與503 (Service Unavailable)一起使用來告訴用戶多久后請(qǐng)求將會(huì)得到響應(yīng) |
Set-Cookie | 指明當(dāng)前頁(yè)面對(duì)應(yīng)的cookie |
HttpServletResponse類
response 對(duì)象是 javax.servlet.http.HttpServletResponse 類的一個(gè)實(shí)例。就像服務(wù)器會(huì)創(chuàng)建request對(duì)象一樣,它也會(huì)創(chuàng)建一個(gè)客戶端響應(yīng)。
response對(duì)象定義了處理創(chuàng)建HTTP信息頭的接口。通過使用這個(gè)對(duì)象,開發(fā)者們可以添加新的cookie或時(shí)間戳,還有HTTP狀態(tài)碼等等。
下表列出了用來設(shè)置HTTP響應(yīng)頭的方法,這些方法由HttpServletResponse 類提供:
S.N. | 方法 & 描述 |
---|---|
1 | String encodeRedirectURL(String url) |
2 | String encodeURL(String url) |
3 | boolean containsHeader(String name) |
4 | boolean isCommitted() |
5 | void addCookie(Cookie cookie) |
6 | void addDateHeader(String name, long date) |
7 | void addHeader(String name, String value) |
8 | void addIntHeader(String name, int value) |
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) |
15 | void setBufferSize(int size) |
16 | void setCharacterEncoding(String charset) |
17 | void setContentLength(int len) |
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響應(yīng)頭程序示例
接下來的例子使用setIntHeader()方法和setRefreshHeader()方法來模擬一個(gè)數(shù)字時(shí)鐘:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <h2>自動(dòng)刷新實(shí)例</h2> <% // 設(shè)置每隔5秒自動(dòng)刷新 response.setIntHeader("Refresh", 5); // 獲取當(dāng)前時(shí)間 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("當(dāng)前時(shí)間: " + CT + "\n"); %> </body> </html>
將以上代碼保存為main.jsp,然后通過瀏覽器訪問它。它將會(huì)每隔5秒顯示一下系統(tǒng)當(dāng)前時(shí)間。
我們可以看下以下 Gif 演示圖:
您也可以自己動(dòng)手修改以上代碼,試試使用其他的方法,將能得到更深的體會(huì)。