Servlet的HTTP状态码

本文详细介绍了HTTP状态码的含义及用途,包括常见的200、301、404等状态码,并提供了如何在Servlet中设置这些状态码的具体示例。

以下内容引用自http://wiki.jikexueyuan.com/project/servlet/http-status-codes.html

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)。

以下HTTP状态码以及可能从Web服务器返回的相关的消息的列表:

代码:消息:描述:
100Continue只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。
101Switching Protocols服务器切换协议。
200OK请求成功。
201Created该请求是完整的,并创建一个新的资源。
202Accepted该请求被接受处理,但是该处理是不完整的。
203Non-authoritative Information 
204No Content 
205Reset Content 
206Partial Content 
300Multiple Choices链接列表。用户可以选择一个链接,进入到该位置。最多五个地址
301Moved Permanently所请求的页面已经转移到一个新的URL。
302Found所请求的页面已经临时转移到一个新的URL。
303See Other所请求的页面可以在另一个不同的URL下被找到。
304Not Modified 
305Use Proxy 
306Unused在以前的版本中使用该代码。现在已不再使用它,但代码仍被保留。
307Temporary Redirect所请求的页面已经临时转移到一个新的URL。
400Bad Request服务器不理解请求。
401Unauthorized所请求的页面需要用户名和密码。
402Payment Required还不能使用该代码。
403Forbidden禁止访问所请求的页面。
404Not Found服务器无法找到所请求的页面。
405Method Not Allowed在请求中指定的方法是不允许的。
406Not Acceptable服务器只生成一个不被客户端接受的响应。
407Proxy Authentication Required在请求送达之前,您必须使用代理服务器的验证。
408Request Timeout请求需要的时间比服务器能够等待的时间长,超时。
409Conflict请求因为冲突无法完成。
410Gone所请求的页面不再可用。
411Length Required"Content-Length"未定义。服务器无法处理客户端发送的不带Content-Length的请求信息。
412Precondition Failed请求中给出的先决条件被服务器评估为false。
413Request Entity Too Large服务器不接受该请求,因为请求实体过大。
414Request-url Too Long服务器不接受该请求,因为URL太长。当转换一个“post”请求为一个带有长的查询信息的“get”请求时发生。
415Unsupported Media Type服务器不接受该请求,因为媒体类型不被支持。
417Expectation Failed 
500Internal Server Error未完成的请求。服务器遇到了一个意外的情况。
501Not Implemented未完成的请求。服务器不支持所需的功能。
502Bad Gateway未完成的请求。服务器从上游服务器收到无效响应。
503Service Unavailable未完成的请求。服务器暂时超载或死机。
504Gateway Timeout网关超时。
505HTTP Version Not Supported服务器不支持“HTTP协议”版本。

一、设置HTTP状态码的方法:

下面是在Servlet程序中可以用于设置HTTP状态码的方法。通过HttpServletResponse对象这些方法是可用的。

方法描述

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文档内部自动格式化并发送到客户端的短消息。

二、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);
  }
}

配置web.xml:

    <servlet>
        <servlet-name>ShowError</servlet-name>
        <servlet-class>com.jsoft.testservletbasics.ShowError</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ShowError</servlet-name>
        <url-pattern>/ShowError</url-pattern>
    </servlet-mapping>

 

现在调用上述 servlet 会显示如下所示结果:

 

测试工程:https://github.com/easonjim/5_java_example/tree/master/servletbasics/test5

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值