JSP伺服器回應

在本章中,我們將討論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 此回應頭指定伺服器支持的請求方法(GETPOST等)。
2 Cache-Control 此回應頭指定回應文檔可以安全地緩存的情況。它的值可以是publicprivateno-cache等等。public則表示文檔是可緩存的,private則表示文檔是針對單個用戶,只能存儲在私有(非共用)緩存中,而no-cache則表示文檔不應該被緩存。
3 Connection 此回應頭指示流覽器是否使用持久HTTP連接。close值指示流覽器不使用持久HTTP連接,而keep-alive表示使用持久連接。
4 Content-Disposition 此回應頭允許請求流覽器要求用戶將回應保存到給定名稱的檔中。
5 Content-Encoding 此回應頭指定在傳輸期間頁面被編碼的方式。
6 Content-Language 此回應頭表示文檔寫入的語言。例如,enen-usru
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-8GB2312
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狀態碼