- JSP 基礎教程
- JSP - 首頁
- JSP - 概述
- JSP - 環境搭建
- JSP - 架構
- JSP - 生命週期
- JSP - 語法
- JSP - 指令
- JSP - 動作
- JSP - 隱式物件
- JSP - 客戶端請求
- JSP - 伺服器響應
- JSP - HTTP 狀態碼
- JSP - 表單處理
- JSP - 編寫過濾器
- JSP - Cookie 處理
- JSP - 會話跟蹤
- JSP - 檔案上傳
- JSP - 日期處理
- JSP - 頁面重定向
- JSP - 點選計數器
- JSP - 自動重新整理
- JSP - 傳送郵件
- 高階 JSP 教程
- JSP - 標準標籤庫
- JSP - 資料庫訪問
- JSP - XML 資料
- JSP - Java Bean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全性
- JSP - 國際化
- JSP 有用資源
- JSP - 問答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
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 此標頭指定伺服器支援的請求方法(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 此標頭指示響應中的位元組數。只有當瀏覽器使用永續性 (keep-alive) HTTP 連線時才需要此資訊。 |
| 8 | Content-Type 此標頭給出響應文件的MIME(多用途網際網路郵件擴充套件)型別。 |
| 9 | Expires 此標頭指定內容應何時被認為已過期,因此不再被快取。 |
| 10 | Last-Modified 此標頭指示文件上次更改的時間。然後,客戶端可以快取文件並在以後的請求中透過If-Modified-Since請求標頭提供日期。 |
| 11 | Location 此標頭應包含在狀態碼為 300 多的所有響應中。這會通知瀏覽器文件地址。瀏覽器會自動重新連線到此位置並檢索新文件。 |
| 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。 |
| 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 頭響應示例
以下示例將使用setIntHeader()方法設定Refresh頭以模擬數字時鐘:
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
// 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");
%>
</center>
</body>
</html>
現在將上述程式碼放入main.jsp並嘗試訪問它。這將每 5 秒顯示一次當前系統時間,如下所示。執行 JSP。您將收到以下輸出:
Auto Refresh Header Example
Current Time is: 9:44:50 PM
您可以嘗試以類似的方式使用其他方法。