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狀態碼和與之關聯的訊息:

#
狀態碼訊息#
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 一個超連結表,使用者可以選擇一個超連結並訪問,最大支援5個超連結
# 301 Moved Permanently 被請求的頁面已經移動到了新的URL下方
302 Found 被請求的頁面暫時性地移動到了新的URL下
303 See Other 被請求的頁面可以在一個不同的URL下找到
304 Not Modified  
# 305 Use Proxy  
# 306Unused# 已經不再使用此狀態碼,但狀態碼被保留
# 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 伺服器拒絕接受請求,因為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狀態碼的方法

下表列出了HttpServletResponse 類別中用來設定狀態碼的方法:

# 1## 2public void sendRedirect(String url) 3public void sendError(int code, String message)
##S.N. 方法 & 描述
public void setStatus ( int statusCode )


# 此方法可以設定任意的狀態碼。如果您的回應包含一個特殊的狀態碼和一個文檔,請確保在用PrintWriter返回任何內容之前調用setStatus方法

此方法產生302回應,同時產生一個 
Location

 頭告訴URL 一個新的文件

此方法將一個狀態碼(通常為 404)和一個短訊息,自動插入HTML文件中並發回給客戶端


js_http_status_codes.jpg

############################## HTTP狀態碼程式範例######接下來的範例將會傳送407錯誤碼給瀏覽器,然後瀏覽器將會告訴您"Need authentication!!!"。 ###
<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
   // 设置错误代码,并说明原因
   response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>
###造訪以上JSP頁面,將會得到以下結果:#########您也可以試試使用其他的狀態碼,看會不會得到什麼意想不到結果。 ######