Servlet HTTP 狀態(tài)碼

2022-07-23 14:32 更新

Servlet HTTP 狀態(tài)碼

HTTP 請(qǐng)求和 HTTP 響應(yīng)消息的格式是類似的,結(jié)構(gòu)如下:

  • 初始狀態(tài)行 + 回車換行符(回車+換行)
  • 零個(gè)或多個(gè)標(biāo)題行+回車換行符
  • 一個(gè)空白行,即回車換行符
  • 一個(gè)可選的消息主體,比如文件、查詢數(shù)據(jù)或查詢輸出

例如,服務(wù)器的響應(yīng)頭如下所示:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

狀態(tài)行包括 HTTP 版本(在本例中為 HTTP/1.1)、一個(gè)狀態(tài)碼(在本例中為 200)和一個(gè)對(duì)應(yīng)于狀態(tài)碼的短消息(在本例中為 OK)。

以下是可能從 Web 服務(wù)器返回的 HTTP 狀態(tài)碼和相關(guān)的信息列表:

代碼 消息 描述
100 Continue 只有請(qǐng)求的一部分已經(jīng)被服務(wù)器接收,但只要它沒有被拒絕,客戶端應(yīng)繼續(xù)該請(qǐng)求。
101 Switching Protocols 服務(wù)器切換協(xié)議。
200 OK 請(qǐng)求成功。
201 Created 該請(qǐng)求是完整的,并創(chuàng)建一個(gè)新的資源。
202 Accepted 該請(qǐng)求被接受處理,但是該處理是不完整的。
203 Non-authoritative Information  
204 No Content  
205 Reset Content  
206 Partial Content  
300 Multiple Choices 鏈接列表。用戶可以選擇一個(gè)鏈接,進(jìn)入到該位置。最多五個(gè)地址。
301 Moved Permanently 所請(qǐng)求的頁面已經(jīng)轉(zhuǎn)移到一個(gè)新的 URL。
302 Found 所請(qǐng)求的頁面已經(jīng)臨時(shí)轉(zhuǎn)移到一個(gè)新的 URL。
303 See Other 所請(qǐng)求的頁面可以在另一個(gè)不同的 URL 下被找到。
304 Not Modified  
305 Use Proxy  
306 Unused 在以前的版本中使用該代碼?,F(xiàn)在已不再使用它,但代碼仍被保留。
307 Temporary Redirect 所請(qǐng)求的頁面已經(jīng)臨時(shí)轉(zhuǎn)移到一個(gè)新的 URL。
400Bad Request 服務(wù)器不理解請(qǐng)求。
401 Unauthorized 所請(qǐng)求的頁面需要用戶名和密碼。
402 Payment Required 您還不能使用該代碼。
403 Forbidden 禁止訪問所請(qǐng)求的頁面。
404 Not Found 服務(wù)器無法找到所請(qǐng)求的頁面。.
405 Method Not Allowed 在請(qǐng)求中指定的方法是不允許的。
406 Not Acceptable 服務(wù)器只生成一個(gè)不被客戶端接受的響應(yīng)。
407 Proxy Authentication Required 在請(qǐng)求送達(dá)之前,您必須使用代理服務(wù)器的驗(yàn)證。
408 Request Timeout 請(qǐng)求需要的時(shí)間比服務(wù)器能夠等待的時(shí)間長,超時(shí)。
409 Conflict 請(qǐng)求因?yàn)闆_突無法完成。
410 Gone 所請(qǐng)求的頁面不再可用。
411 Length Required "Content-Length" 未定義。服務(wù)器無法處理客戶端發(fā)送的不帶 Content-Length 的請(qǐng)求信息。
412 Precondition Failed 請(qǐng)求中給出的先決條件被服務(wù)器評(píng)估為 false。
413 Request Entity Too Large 服務(wù)器不接受該請(qǐng)求,因?yàn)檎?qǐng)求實(shí)體過大。
414 Request-url Too Long 服務(wù)器不接受該請(qǐng)求,因?yàn)?URL 太長。當(dāng)您轉(zhuǎn)換一個(gè) "post" 請(qǐng)求為一個(gè)帶有長的查詢信息的 "get" 請(qǐng)求時(shí)發(fā)生。
415 Unsupported Media Type 服務(wù)器不接受該請(qǐng)求,因?yàn)槊襟w類型不被支持。
417 Expectation Failed  
500Internal Server Error 未完成的請(qǐng)求。服務(wù)器遇到了一個(gè)意外的情況。
501 Not Implemented 未完成的請(qǐng)求。服務(wù)器不支持所需的功能。
502 Bad Gateway 未完成的請(qǐng)求。服務(wù)器從上游服務(wù)器收到無效響應(yīng)。
503 Service Unavailable 未完成的請(qǐng)求。服務(wù)器暫時(shí)超載或死機(jī)。
504 Gateway Timeout 網(wǎng)關(guān)超時(shí)。
505 HTTP Version Not Supported 服務(wù)器不支持"HTTP協(xié)議"版本。

設(shè)置 HTTP 狀態(tài)代碼的方法

下面的方法可用于在 Servlet 程序中設(shè)置 HTTP 狀態(tài)碼。這些方法通過 HttpServletResponse 對(duì)象可用。

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

HTTP 狀態(tài)碼實(shí)例

下面的例子把 407 錯(cuò)誤代碼發(fā)送到客戶端瀏覽器,瀏覽器會(huì)顯示 "Need authentication!!!" 消息。

// 導(dǎo)入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// 擴(kuò)展 HttpServlet 類
public class showError extends HttpServlet {
 
  // 處理 GET 方法請(qǐng)求的方法
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 設(shè)置錯(cuò)誤代碼和原因
      response.sendError(407, "Need authentication!!!" );
  }
  // 處理 POST 方法請(qǐng)求的方法
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

現(xiàn)在,調(diào)用上面的 Servlet 將顯示以下結(jié)果:

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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)