Servlet 3.1 发送 HTTP 状态码

HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下:

  • 初始状态行 + 回车换行符(回车+换行)
  • 零个或多个标题行+回车换行符
  • 一个空白行,即回车换行符
  • 一个可选的消息主体,比如文件、查询数据或查询输出

例如,服务器的响应头如下所示:

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)

HTTP 响应状态码

下表列出了 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" 未定义
服务器无法处理不带 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 状态代码的方法

Java Servlet HttpServletResponse 类中的以下方法可以设置 HTTP 状态码

方法 & 描述
public void setStatus ( int statusCode )
设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。如果您的反应包含了一个特殊的状态码和文档,请确保在使用PrintWriter实际返回任何内容之前调用 setStatus
public void sendRedirect(String url)
生成一个 302 响应,连同一个带有新文档 URL 的 Location 头
public void sendError(int code, String message)
发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息

范例

下面的范例演示了如何是使用 sendError 发送 407 错误码 和 "Need authentication!!!" 错误消息

// author: 简单教程(www.twle.cn)
// Copyright © 2015-2065 www.twle.cn. All rights reserved.

package cn.twle.demo;


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.util.*;

@WebServlet(name = "ShowErrorServlet", urlPatterns = {"show_error"})
public class ShowErrorServlet extends HttpServlet
{

    public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
    {
        // 设置错误代码和原因
        response.sendError(403, "www.twle.cn Need authentication!!!" );

        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
    }
}

在浏览器上输入 http://localhost:8080/servlet/show_error 显示结果如下

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.