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 | |
#No Content | ||
Reset Content | ||
Partial Content | ||
Multiple Choices | #連結清單。用戶可以選擇一個鏈接,進入到該位置。最多五個地址。 | |
Moved Permanently | 所要求的頁面已經轉移到一個新的 URL。 | |
Found | 所要求的頁面已經暫時轉移到一個新的 URL。 | |
See Other | 所要求的頁面可以在另一個不同的 URL 下被找到。 | |
Not Modified | ||
Use Proxy | ||
Unused | 在先前的版本中使用程式碼。現在已不再使用它,但程式碼仍被保留。||
Temporary Redirect | 所要求的頁面已經暫時轉移到一個新的 URL。 | |
Bad Request | 伺服器不理解請求。 | |
Unauthorized | #所要求的頁面需要使用者名稱和密碼。 | |
Payment Required | 您還不能使用程式碼。 | |
Forbidden | 禁止存取所要求的頁面。 | |
Not Found | 伺服器無法找到所要求的頁面。 . | |
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 | # |
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。 |
public void sendRedirect(String url)該方法產生一個302 回應,連同一個帶有新文檔URL 的 Location 頭。 | |
public 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.*; // 扩展 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 |