- 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 - JavaBean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全性
- JSP - 國際化
- JSP 有用資源
- JSP - 問答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
JSP - HTTP 狀態碼
在本章中,我們將討論 JSP 中的 HTTP 狀態碼。HTTP 請求和 HTTP 響應訊息的格式類似,並將具有以下結構:
初始狀態行 + CRLF(回車 + 換行)
零個或多個報頭行 + CRLF
空行,即 CRLF
可選的訊息正文,例如檔案、查詢資料或查詢輸出。
例如,伺服器響應報頭如下所示:
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 狀態碼和相關訊息:
| 程式碼 | 訊息 | 描述 |
|---|---|---|
| 100 | 繼續 | 伺服器僅接收了部分請求,但只要未被拒絕,客戶端就應繼續傳送請求 |
| 101 | 切換協議 | 伺服器切換協議。 |
| 200 | 確定 | 請求已成功。 |
| 201 | 已建立 | 請求已完成,並且建立了一個新的資源 |
| 202 | 已接受 | 請求已接受處理,但處理尚未完成。 |
| 203 | 非權威資訊 | |
| 204 | 無內容 | |
| 205 | 重置內容 | |
| 206 | 部分內容 | |
| 300 | 多種選擇 | 一個連結列表;使用者可以選擇一個連結並轉到該位置。最多五個地址。 |
| 301 | 永久移動 | 請求的頁面已移動到一個新的 URL。 |
| 302 | 找到 | 請求的頁面已臨時移動到一個新的 URL。 |
| 303 | 檢視其他 | 請求的頁面可以在不同的 URL 下找到。 |
| 304 | 未修改 | |
| 305 | 使用代理 | |
| 306 | 未使用 | 此程式碼在先前版本中使用過。它不再使用,但程式碼已保留。 |
| 307 | 臨時重定向 | 請求的頁面已臨時移動到一個新的 URL。 |
| 400 | 錯誤請求 | 伺服器不理解請求。 |
| 401 | 未授權 | 請求的頁面需要使用者名稱和密碼。 |
| 402 | 需要付款 | 您尚無法使用此程式碼。 |
| 403 | 禁止 | 禁止訪問請求的頁面 |
| 404 | 未找到 | 伺服器找不到請求的頁面。 |
| 405 | 方法不允許 | 請求中指定的方法不允許。 |
| 406 | 不可接受 | 伺服器只能生成客戶端不接受的響應。 |
| 407 | 需要代理身份驗證 | 在提供此請求之前,您必須使用代理伺服器進行身份驗證。 |
| 408 | 請求超時 | 請求花費的時間超過了伺服器準備等待的時間。 |
| 409 | 衝突 | 由於衝突,無法完成請求。 |
| 410 | 已消失 | 請求的頁面不再可用。 |
| 411 | 需要長度 | 未定義“Content-Length”。伺服器在沒有它的情況下將不接受請求。 |
| 412 | 前提條件失敗 | 伺服器評估請求中給定的前提條件為假。 |
| 413 | 請求實體過大 | 伺服器將不接受請求,因為請求實體過大。 |
| 414 | 請求 URL 過長 | 伺服器將不接受請求,因為 URL 過長。當您將“post”請求轉換為具有長查詢資訊的“get”請求時,就會發生這種情況。 |
| 415 | 不支援的媒體型別 | 伺服器將不接受請求,因為不支援媒體型別。 |
| 417 | 期望失敗 | |
| 500 | 內部伺服器錯誤 | 請求未完成。伺服器遇到意外情況。 |
| 501 | 未實現 | 請求未完成。伺服器不支援所需的功能。 |
| 502 | 錯誤閘道器 | 請求未完成。伺服器從上游伺服器收到了無效的響應。 |
| 503 | 服務不可用 | 請求未完成。伺服器暫時過載或宕機。 |
| 504 | 閘道器超時 | 閘道器已超時。 |
| 505 | 不支援的 HTTP 版本 | 伺服器不支援 **“http 協議”** 版本。 |
設定 HTTP 狀態碼的方法
以下方法可用於在 servlet 程式中設定 HTTP 狀態碼。這些方法可用於 HttpServletResponse 物件。
| 序號 | 方法和描述 |
|---|---|
| 1 | public void setStatus ( int statusCode ) 此方法設定任意狀態碼。setStatus 方法將 int(狀態碼)作為引數。如果您的響應包含特殊狀態碼和文件,請確保在使用 PrintWriter 返回任何內容之前實際呼叫 setStatus。 |
| 2 | public void sendRedirect(String url) 此方法生成 302 響應以及提供新文件 URL 的 Location 報頭。 |
| 3 | public void sendError(int code, String message) 此方法傳送狀態碼(通常為 404)以及一條簡短的訊息,該訊息會自動格式化到 HTML 文件中併發送到客戶端。 |
HTTP 狀態碼示例
以下示例顯示如何將 407 錯誤程式碼傳送到客戶端瀏覽器。之後,瀏覽器會顯示“**需要身份驗證!**”訊息。
<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>
您將收到以下輸出:
HTTP Status 407 - Need authentication!!!
type Status report
message Need authentication!!!
description The client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29
要更熟悉 HTTP 狀態碼,請嘗試設定不同的狀態碼及其描述。