JSP Http狀態碼
在本章中,我們將在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狀態代碼更友好,可嘗試設置不同的狀態代碼及其描述說明。