JSP 伺服器回應


Response回應物件主要將JSP容器處理後的結果傳回客戶端。可以透過response變數設定HTTP的狀態和向客戶端發送數據,如Cookie、HTTP檔案頭資訊等。

一個典型的回應看起來就像下面這樣:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (空行)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

狀態行包含HTTP版本訊息,例如HTTP/1.1,一個狀態碼,例如200,還有一個非常短的訊息對應狀態碼,例如OK。

下表摘要出了HTTP1.1回應頭中最有用的部分,在網路程式設計中您將會經常見到它們:

反應頭說明
                    Allow                    指定伺服器支援的request方法(GET,POST等)
                    Cache-Control                    指定回應文檔能夠被安全快取的情況。通常取值為 publicprivate 或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.HttpServletResponse 類別的一個實例。就像伺服器會建立request物件一樣,它也會建立一個客戶端回應。

response物件定義了處理建立HTTP資訊頭的介面。透過使用這個對象,開發者可以新增新的cookie或時間戳,還有HTTP狀態碼等等。

下表列出了用來設定HTTP回應頭的方法,這些方法由HttpServletResponse 類別提供:

##                    15                    16                    17##                    18void setContentType(String type)                    19void setDateHeader(String name, long date)                    20void setHeader(String name, String 值)                    21void setIntHeader(String name, int 值)                    22void setLocale(Locale loc)                    23void setStatus(int sc)

        HTTP回應頭程式範例​​

接下來的範例使用setIntHeader()方法和setRefreshHeader()方法來模擬一個數位時鐘:

<%@ 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中文网(php.cn)</title>
</head>
<body>
<h2>自动刷新实例</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("当前时间: " + CT + "\n");
%>
</body>
</html>

將以上程式碼儲存為main.jsp,然後透過瀏覽器訪問它。它將每隔5秒顯示一下系統目前時間。

我們可以看下以下Gif 示範圖:

jsp1.gif

#您也可以自己動手修改以上程式碼,試試使用其他的方法,將能得到更深的體會。

S.N.方法 & 說明
                    1String encodeRedirectURL(String url)


# sendRedirect()方法所使用的URL進行編碼
                    2String encodeURL(String url)


# 將URL編碼,回傳包含Session ID的URL
                    3boolean containsHeader(String name)


回傳指定的回應頭是否有
                    4boolean isCommitted()


# 回傳回應是否已提交至客戶端
                    5void addCookie(Cookie cookie)


新增指定的cookie至回應中
                    6void addDateHeader(String name, long date)


新增指定名稱的回應標頭和日期值
                    7void addHeader(String name, String 值)


新增指定名稱的回應標頭和值
                    8void addIntHeader(String name, int 值)


新增指定名稱的回應標頭和int值
                    9void flushBuffer()


# 將任何快取中的內容寫入客戶端
                    10void reset()


# 清除任何快取中的任何數據,包括狀態碼和各種回應頭
                    11void resetBuffer()


#清除基本的快取數據,不包括回應頭和狀態碼
                    12void sendError(int sc)


使用指定的狀態碼傳送一個錯誤回應,然後清除快取
                    13void sendError(int sc, String msg)


使用指定的狀態碼和訊息傳送一個出錯回應
                    14void sendRedirect(String location)


# 使用指定的URL傳送一個暫時的間接回應給客戶
void setBufferSize(int size)


設定響應體的快取區大小

void setCharacterEncoding(String charset)


指定回應的編碼集(MIME字元集),例如UTF-8

void setContentLength(int len)


指定HTTP servlets中回應的內容的長度,此方法用來設定 HTTP Content-Length 訊息頭

# 設定回應的內容的類型,如果回應尚未提交的話

使用指定名稱和值設定回應標頭的名稱和內容

使用指定名稱和值設定回應標頭的名稱和內容

使用指定名稱和值設定回應標頭的名稱和內容

設定回應的語言環境,如果回應尚未被提交的話

# 設定回應的狀態碼