top
Loading...
Servlet HTTP 狀態碼

Servlet HTTP 狀態碼

HTTP 請求和 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 狀態碼和相關的信息列表:

代碼 消息 描述
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。
400Bad 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" 未定義。服務器無法處理客戶端發送的不帶 Content-Length 的請求信息。
412 Precondition Failed 請求中給出的先決條件被服務器評估為 false。
413 Request Entity Too Large 服務器不接受該請求,因為請求實體過大。
414 Request-url Too Long 服務器不接受該請求,因為 URL 太長。當您轉換一個 "post" 請求為一個帶有長的查詢信息的 "get" 請求時發生。
415 Unsupported Media Type 服務器不接受該請求,因為媒體類型不被支持。
417 Expectation Failed  
500Internal Server Error 未完成的請求。服務器遇到了一個意外的情況。
501 Not Implemented 未完成的請求。服務器不支持所需的功能。
502 Bad Gateway 未完成的請求。服務器從上游服務器收到無傚響應。
503 Service Unavailable 未完成的請求。服務器暫時超載或死機。
504 Gateway Timeout 網關超時。
505 HTTP Version Not Supported 服務器不支持"HTTP協議"版本。

設置 HTTP 狀態代碼的方法

下面的方法可用於在 Servlet 程序中設置 HTTP 狀態碼。這些方法通過 HttpServletResponse 對象可用。

序號方法 & 描述
1public void setStatus ( int statusCode )
該方法設置一個任意的狀態碼。setStatus 方法接受一個 int(狀態碼)作為參數。如果您的反應包含了一個特殊的狀態碼和文檔,請確保在使用 PrintWriter 實際返回任何內容之前調用 setStatus。
2public void sendRedirect(String url)
該方法生成一個 302 響應,連同一個帶有新文檔 URL 的 Location 頭。
3public void sendError(int code, String message)
該方法發送一個狀態碼(通常為 404),連同一個在 HTML 文檔內部自動格式化併發送到客戶端的短消息。

HTTP 狀態碼實例

下面的例子把 407 錯誤代碼發送到客戶端瀏覽器,瀏覽器會顯示 "Need authentication!!!" 消息。

// 導入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
@WebServlet("/showError")
// 擴展 HttpServlet 類
public class showError extends HttpServlet {
 
  // 處理 GET 方法請求的方法
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 設置錯誤代碼和原因
      response.sendError(407, "Need authentication!!!" );
  }
  // 處理 POST 方法請求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

現在,調用上面的 Servlet 將顯示以下結果:

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

北斗有巢氏 有巢氏北斗