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 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 請求中給出的前提條件由伺服器評估求值結果為false
413 Request Entity Too Large 伺服器將不接受請求,因為請求實體太大了。
414 Request-url Too Long 因為網址太長,伺服器將不接受該請求。 當將「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 Version Not Supported 伺服器不支援「http協定」版本。

設定HTTP狀態程式碼的方法

以下方法可用於在servlet程式中設定HTTP狀態程式碼。 這些方法可用於HttpServletResponse物件。

編號 方法 描述
1 public void setStatus ( int statusCode ) 此方法設定任意狀態程式碼。 setStatus()方法將一個int(狀態程式碼)作為引數。如果響應包含特殊的狀態程式碼和文件,請確保在實際返回PrintWriter的內容之前呼叫setStatus()方法。
2 public void sendRedirect(String url) 此方法將生成302響應以及給出新文件的URL的位置檔頭。
3 public void sendError(int code, String message) 該方法傳送狀態碼(通常為404)以及自動格式化在HTML文件內並行送給用戶端的短訊息。

HTTP狀態程式碼範例

以下範例顯示如何將407錯誤程式碼傳送到用戶端瀏覽器。之後,瀏覽器會顯示「需要驗證!!!」的 資訊。

開啟Eclipse,建立一個動態Web專案:HttpStatusCode , 其目錄結構如下所示 -

檔案:index.jsp 的程式碼如下所示 -

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>傳送HTTP狀態碼</title>
</head>
<body>
    <%
        // Set error code and reason.
        response.sendError(407, "Need authentication!!!");
    %>
</body>
</html>

部署上面專案,然後開啟瀏覽器存取URL: http://localhost:8080/HttpStatusCode/index.jsp , 可以看到以下結果 -


為了使用HTTP狀態程式碼更友好,可嘗試設定不同的狀態程式碼及其描述說明。