在本章中,我們將在JSP中討論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。 |
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協定」版本。 |
以下方法可用於在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文件內並行送給用戶端的短訊息。 |
以下範例顯示如何將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狀態程式碼更友好,可嘗試設定不同的狀態程式碼及其描述說明。