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

代码消息描述
100继续服务器只接收到部分请求,但只要它没有被拒绝,客户端就应该继续请求
101切换协议服务器切换协议.
200确定请求正常
201创建请求完成,并创建新资源
202接受请求被接受处理,但处理不完整.
203非权威信息 
204无内容 
205重置内容 
206部分内容 
300Multiple Choices
链接列表.用户可以选择链接并转到该位置.最多五个地址
301永久移动请求的页面已移至新网址
302找到请求的页面暂时移动到新网址
303参见其他请求的页面可以在不同的网址下找到
304未修改 
305使用代理 
306未使用 此代码用于以前的版本.它已不再使用,但代码保留
307临时重定向请求的页面暂时移动到新的URL.
400错误请求服务器不明白请求
401未经授权请求的页面需要用户名和密码
402需要付款您无法使用此代码
403Forbidden禁止访问所请求的page
404Not Found服务器找不到请求的页面.
405方法不允许不允许在请求中指定的方法.
406不可接受服务器只能生成客户端不接受的响应.
407需要代理身份验证在提供此请求之前,您必须使用代理服务器进行身份验证.
408请求超时请求花费的时间比服务器准备等待的时间长.
409冲突请求无法是comp因冲突而被租借.
410Gone请求的页面不再可用.
411长度必需未定义"Content-Length".没有它,服务器将不接受请求.
412前提条件失败服务器评估为false的请求中给出的前提条件.
413请求实体太大服务器将不接受请求,因为请求实体太大.
414Request-url太长服务器不接受请求,因为网址太长.将"post"请求转换为带有长查询信息的"get"请求时发生.
415不支持的媒体类型服务器不接受请求,因为不支持媒体类型.
417预期失败 
500内部服务器错误请求未完成.服务器遇到意外情况.
501未实现请求未完成.服务器不支持所需的功能.
502Bad Gateway请求未完成.服务器从上游服务器收到无效响应.
503服务不可用请求未完成.服务器暂时超载或停机.
504网关超时网关已超时.
505不支持HTTP版本服务器不支持"http协议"版本.

设置HTTP状态码的方法

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

Sr.No.方法&描述
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会显示以下结果 :

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