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

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

设置 HTTP 状态代码的方法

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

Sr.No. 方法和说明
1

public void setStatus ( int statusCode )

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

2

public void sendRedirect(String url)

此方法生成 302 响应以及提供新文档 URL 的 Location 标头

3

public void sendError(int code, String message)

此方法发送状态代码(通常为 404)以及在 HTML 文档中自动格式化并发送到客户端的短消息。

HTTP 状态代码示例

以下示例将发送407 错误代码发送到客户端浏览器,浏览器会显示"需要身份验证!!!"消息。

// 导入所需的 Java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// 扩展 HttpServlet 类
public class showError extends HttpServlet {
 
   // 处理 GET 方法请求的方法。
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // 设置错误代码和原因。
      response.sendError(407, "Need authentication!!!" );
   }
   
   // 处理 POST 方法请求的方法。
   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