Servlets 简明教程

Servlets - Http Status Codes

HTTP 请求和 HTTP 响应消息的格式是相似的,并且将具有以下结构 -

  1. 初始状态行 + CRLF(回车 + 换行,即新行)

  2. 零或多个头行 + CRLF

  3. 一个空行,即 CRLF

  4. 一个可选的消息主体,例如文件、查询数据或查询输出。

例如,一个服务器响应头如下所示 -

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 状态代码和相关消息的列表 -

Code

Message

Description

100

Continue

服务器只收到了一部分请求,但只要它还没有被拒绝,客户端就应继续进行请求

101

Switching Protocols

The server switches protocol.

200

OK

The request is 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

服务器不会接受请求,因为 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 协议”版本。

Methods to Set HTTP Status Code

以下方法可用于在 servlet 程序中设置 HTTP 状态代码。这些方法在 HttpServletResponse 对象中可用。

Sr.No.

Method & Description

1

public void setStatus ( int statusCode ) 该方法设置任意状态代码。setStatus 方法采用 int(状态代码)作为参数。如果响应包括特殊状态代码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。

2

public void sendRedirect(String url) 该方法生成一个 302 响应以及一个 Location 头,提供新文档的 URL。

3

public void sendError(int code, String message) 该方法发送一个状态代码(通常是 404),以及一条短消息,该消息会自动格式化在 HTML 文档中并发送给客户端。

HTTP Status Code Example

以下是向客户端浏览器发送 407 错误代码的示例,浏览器将向您显示“需要授权!!!”消息。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class showError extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set error code and reason.
      response.sendError(407, "Need authentication!!!" );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

现在,调用上述 servlet 将显示以下结果 −

HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29