- Servlet 教程
- Servlet - 首頁
- Servlet - 概述
- Servlet - 環境設定
- Servlet - 生命週期
- Servlet - 示例
- Servlet - 表單資料
- Servlet - 客戶端請求
- Servlet - 伺服器響應
- Servlet - HTTP 程式碼
- Servlet - 編寫過濾器
- Servlet - 異常
- Servlet - Cookie 處理
- Servlet - Session跟蹤
- Servlet - 資料庫訪問
- Servlet - 檔案上傳
- Servlet - 日期處理
- Servlet - 頁面重定向
- Servlet - 點選計數器
- Servlet - 自動重新整理
- Servlet - 傳送郵件
- Servlet - 打包
- Servlet - 除錯
- Servlet - 國際化
- Servlet - 註解
- Servlet 有用資源
- Servlet - 問答
- Servlet - 快速指南
- Servlet - 有用資源
- Servlet - 討論
Servlet - 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 | 繼續 (Continue) | 伺服器只收到部分請求,但只要未被拒絕,客戶端應繼續請求。 |
| 101 | 切換協議 (Switching Protocols) | 伺服器切換協議。 |
| 200 | 確定 (OK) | 請求成功。 |
| 201 | 已建立 (Created) | 請求已完成,並建立了新的資源。 |
| 202 | 已接受 (Accepted) | 請求已被接受以進行處理,但處理尚未完成。 |
| 203 | 非權威資訊 (Non-authoritative Information) | |
| 204 | 無內容 (No Content) | |
| 205 | 重置內容 (Reset Content) | |
| 206 | 部分內容 (Partial Content) | |
| 300 | 多種選擇 (Multiple Choices) | 連結列表。使用者可以選擇一個連結並轉到該位置。最多五個地址。 |
| 301 | 永久移動 (Moved Permanently) | 請求的頁面已移動到新的 URL。 |
| 302 | 已找到 (Found) | 請求的頁面已暫時移動到新的 URL。 |
| 303 | 檢視其他 (See Other) | 請求的頁面可以在不同的 URL 下找到。 |
| 304 | 未修改 (Not Modified) | |
| 305 | 使用代理 (Use Proxy) | |
| 306 | 未使用 (Unused) | 此程式碼在以前的版本中使用過。它不再使用,但程式碼已被保留。 |
| 307 | 臨時重定向 (Temporary Redirect) | 請求的頁面已暫時移動到新的 URL。 |
| 400 | 錯誤請求 (Bad Request) | 伺服器不理解請求。 |
| 401 | 未授權 (Unauthorized) | 請求的頁面需要使用者名稱和密碼。 |
| 402 | 需要付款 (Payment Required) | 您尚不能使用此程式碼。 |
| 403 | 禁止 (Forbidden) | 禁止訪問請求的頁面。 |
| 404 | 未找到 (Not Found) | 伺服器找不到請求的頁面。 |
| 405 | 不允許使用方法 (Method Not Allowed) | 請求中指定的方法不允許。 |
| 406 | 不可接受 (Not Acceptable) | 伺服器只能生成客戶端不接受的響應。 |
| 407 | 需要代理身份驗證 (Proxy Authentication Required) | 在提供此請求之前,您必須透過代理伺服器進行身份驗證。 |
| 408 | 請求超時 (Request Timeout) | 請求時間超過伺服器準備等待的時間。 |
| 409 | 衝突 (Conflict) | 由於衝突,無法完成請求。 |
| 410 | 已消失 (Gone) | 請求的頁面不再可用。 |
| 411 | 需要長度 (Length Required) | 未定義“Content-Length”。伺服器不會在沒有它的情況下接受請求。 |
| 412 | 前提條件失敗 (Precondition Failed) | 伺服器評估請求中給定的前提條件為假。 |
| 413 | 請求實體過大 (Request Entity Too Large) | 伺服器將不接受請求,因為請求實體過大。 |
| 414 | 請求 URL 過長 (Request-url Too Long) | 伺服器將不接受請求,因為 URL 過長。當您將“post”請求轉換為具有較長查詢資訊的“get”請求時發生。 |
| 415 | 不支援的媒體型別 (Unsupported Media Type) | 伺服器將不接受請求,因為不支援媒體型別。 |
| 417 | 期望失敗 (Expectation Failed) | |
| 500 | 內部伺服器錯誤 (Internal Server Error) | 請求未完成。伺服器遇到意外情況。 |
| 501 | 未實現 (Not Implemented) | 請求未完成。伺服器不支援所需的功能。 |
| 502 | 錯誤閘道器 (Bad Gateway) | 請求未完成。伺服器從上游伺服器收到無效響應。 |
| 503 | 服務不可用 (Service Unavailable) | 請求未完成。伺服器暫時過載或宕機。 |
| 504 | 閘道器超時 (Gateway Timeout) | 閘道器超時。 |
| 505 | 不支援的 HTTP 版本 (HTTP Version Not Supported) | 伺服器不支援“http 協議”版本。 |
設定 HTTP 狀態碼的方法
以下方法可用於在 Servlet 程式中設定 HTTP 狀態碼。這些方法可用於`HttpServletResponse`物件。
| 序號 | 方法及描述 |
|---|---|
| 1 |
此方法設定任意狀態碼。setStatus 方法將 int(狀態碼)作為引數。如果您的響應包含特殊狀態碼和文件,請確保在使用`PrintWriter`實際返回任何內容之前呼叫 setStatus。 |
| 2 |
此方法生成 302 響應以及包含新文件 URL 的`Location`標頭。 |
| 3 |
此方法傳送狀態碼(通常為 404)以及簡短訊息,該訊息會自動格式化為 HTML 文件併發送給客戶端。 |
HTTP 狀態碼示例
以下示例將向客戶端瀏覽器傳送 407 錯誤程式碼,瀏覽器將顯示“需要身份驗證!”訊息。
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
現在呼叫上述 Servlet 將顯示以下結果:
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29
