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,其項目結構如下所示 -

JSP服務器響應

以下示例將使用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服務器響應