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 , 可以看到以下結果 -

JSP
爲了使用HTTP狀態代碼更友好,可嘗試設置不同的狀態代碼及其描述說明。