Servlet - 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 继续 服务器只收到了一部分请求,但只要没有被拒绝,客户端就应该继续请求
    101 交换协议 服务器切换协议。
    200 好的 请求没问题
    201 已创建 请求完成,创建新资源
    202 公认 接受请求进行处理,但处理未完成。
    203 非权威信息  
    204 无内容  
    205 重置内容  
    206 部分内容  
    300 多项选择 一个链接列表。用户可以选择一个链接并转到该位置。最多五个地址
    301 永久移动 请求的页面已移至新网址
    302 成立 请求的页面已临时移至新网址
    303 查看其他 可以在不同的 url 下找到请求的页面
    304 未修改  
    305 使用代理服务器  
    306 没用过 此代码在以前的版本中使用过。已不再使用,但代码保留
    307 临时重定向 请求的页面已临时移至新网址。
    400 错误的请求 服务器无法理解请求
    401 未经授权 请求的页面需要用户名和密码
    402 需要付款 您还不能使用此代码
    403 禁止的 禁止访问请求的页面
    404 未找到 服务器找不到请求的页面。
    405 不允许的方法 请求中指定的方法不被允许。
    406 不能接受的 服务器只能生成客户端不接受的响应。
    407 需要代理身份验证 您必须先通过代理服务器进行身份验证,然后才能处理此请求。
    408 请求超时 请求花费的时间比服务器准备等待的时间长。
    409 冲突 由于冲突,无法完成请求。
    410 不见了 请求的页面不再可用。
    411 长度要求 “内容长度”未定义。没有它,服务器将不会接受请求。
    412 先决条件失败 请求中给出的前提条件被服务器评估为假。
    413 请求的实体太大 服务器不会接受请求,因为请求实体太大。
    414 请求 url 太长 服务器不会接受请求,因为 url 太长。当您将“post”请求转换为带有长查询信息的“get”请求时发生。
    415 不支持的媒体类型 服务器不会接受请求,因为不支持媒体类型。
    417 期望失败  
    500 内部服务器错误 请求未完成。服务器遇到意外情况。
    501 未实现 请求未完成。服务器不支持所需的功能。
    502 错误的网关 请求未完成。服务器收到来自上游服务器的无效响应。
    503 暂停服务 请求未完成。服务器暂时过载或停机。
    504 网关超时 网关超时。
    505 不支持 HTTP 版本 服务器不支持“http 协议”版本。
  • 设置 HTTP 状态码的方法

    以下方法可用于在您的 servlet 程序中设置 HTTP 状态代码。这些方法可用于HttpServletResponse对象。
    序号 方法和说明
    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 状态代码示例

    以下是向客户端浏览器发送 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 将显示以下结果 -
    type Status report
    messageNeed authentication!!!
    descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).

    Apache Tomcat/5.5.29