在本章中,我們將在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/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協議”版本。 |
設置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文檔內併發送給客戶端的短消息。 |
HTTP狀態代碼示例
以下示例顯示如何將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狀態代碼更友好,可嘗試設置不同的狀態代碼及其描述說明。