在本章中,我們將討論JSP中的伺服器回應。當Web伺服器回應HTTP請求時,回應通常由狀態行,一些回應頭,空行和文檔組成。典型的回應看起來如下 -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
狀態行由HTTP版本(示例中為HTTP/1.1),狀態碼(示例中為200
)和與狀態代碼相對應的非常短的消息(示例中為“OK”
)組成。
以下是從Web伺服器返回流覽器的最有用的HTTP 1.1回應頭的摘要。 這些頭檔經常用於Web編程 -
編號 | 回應頭 | 描述 |
---|---|---|
1 | Allow |
此回應頭指定伺服器支持的請求方法(GET ,POST 等)。 |
2 | Cache-Control |
此回應頭指定回應文檔可以安全地緩存的情況。它的值可以是public ,private 或no-cache 等等。public 則表示文檔是可緩存的,private 則表示文檔是針對單個用戶,只能存儲在私有(非共用)緩存中,而no-cache 則表示文檔不應該被緩存。 |
3 | Connection |
此回應頭指示流覽器是否使用持久HTTP連接。close 值指示流覽器不使用持久HTTP連接,而keep-alive 表示使用持久連接。 |
4 | Content-Disposition |
此回應頭允許請求流覽器要求用戶將回應保存到給定名稱的檔中。 |
5 | Content-Encoding |
此回應頭指定在傳輸期間頁面被編碼的方式。 |
6 | Content-Language |
此回應頭表示文檔寫入的語言。例如,en ,en-us ,ru 等 |
7 | Content-Length |
此回應頭指示回應中的位元組數。僅當流覽器使用持久(保持活動)HTTP連接時,才需要此信息。 |
8 | Content-Type |
此回應頭給出回應文檔的MIME (多用途Internet郵件擴展)類型。 |
9 | Expires |
此回應頭指定內容應被視為過期的時間,因此不再被緩存。 |
10 | Last-Modified |
此回應頭指示文檔何時上次更改。客戶端可以緩存文檔,並在稍後的請求中通過If-Modified-Since 請求頭提供日期。 |
11 | Location |
此回應頭應該在300s 內包含在狀態代碼的所有回應中。它通知流覽器文檔地址。 流覽器自動重新連接到此位置並檢索新文檔。 |
12 | Refresh |
此回應頭指定流覽器應該要求更新頁面的時間。可以指定時間,之後它將指定秒數刷新頁面。 |
13 | Retry-After |
此回應頭可以與503 (服務不可用)回應一起使用,以便告訴客戶端可以多久重複其請求。 |
14 | Set-Cookie |
此回應頭指定與該頁面相關聯的cookie 。 |
HttpServletResponse對象
response
對象是javax.servlet.http.HttpServletResponse
對象的一個實例。就像伺服器創建請求對象一樣,它還創建一個對象來表示對客戶端的回應。
response
對象還定義了處理創建新HTTP頭的介面。通過此對象,JSP程式員可以添加新的Cookie或日期戳,HTTP狀態代碼等。
可以使用以下方法在servlet程式中設置HTTP回應頭。這些方法可用於HttpServletResponse
對象。此對象表示伺服器回應。
編號 | 方法 | 描述 |
---|---|---|
1 | String encodeRedirectURL(String url) |
對指定的URL進行編碼,以在sendRedirect() 方法中使用,或者如果不需要編碼,則返回URL。 |
2 | String encodeURL(String url) |
通過在其中包含會話ID來對指定的URL進行編碼,或者如果不需要編碼,則不會更改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) |
添加具有給定名稱和整數值的回應頭。 |
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 ,GB2312 。 |
17 | void setContentLength(int len) |
設置回應中內容正文的長度在HTTP servlet中; 此方法還可以設置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頭回應示例
打開Eclipse創建一個動態Web專案:ServerResponse,其專案結構如下所示 -
以下示例將使用setIntHeader()
方法設置Refresh
頭來模擬數字時鐘,請參考以下代碼實現。
檔:index.jsp -
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.io.*,java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>伺服器回應示例</title>
</head>
<body>
<div style="margin: auto; width: 80%;">
<h2>自動刷新HTTP標頭示例</h2>
<%
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 3);
// Get current time
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");
%>
</div>
</body>
</html>
在上面代碼編寫完成後,部署這個Web專案,打開流覽器訪問URL: http://localhost:8080/ServerResponse/ , 每3
秒鐘顯示當前系統時間,如下所示 -
上一篇:
JSP客戶端請求
下一篇:
JSP Http狀態碼