JSP Http状态码

在本章中,我们将在JSP中讨论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 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 因为网址太长,服务器将不接受该请求。 当将“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对象。

编号 方法 描述
1 public void setStatus ( int statusCode ) 此方法设置任意状态代码。 setStatus()方法将一个int(状态代码)作为参数。如果响应包含特殊的状态代码和文档,请确保在实际返回PrintWriter的内容之前调用setStatus()方法。
2 public void sendRedirect(String url) 此方法将生成302响应以及给出新文档的URL的位置标头。
3 public void sendError(int code, String message) 该方法发送状态码(通常为404)以及自动格式化在HTML文档内并发送给客户端的短消息。

HTTP状态代码示例

以下示例显示如何将407错误代码发送到客户端浏览器。之后,浏览器会显示“需要验证!!!”的 信息。

打开Eclipse,创建一个动态Web项目:HttpStatusCode , 其目录结构如下所示 -

文件:index.jsp 的代码如下所示 -

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>发送HTTP状态码</title>
</head>
<body>
    <%
        // Set error code and reason.
        response.sendError(407, "Need authentication!!!");
    %>
</body>
</html>

部署上面项目,然后打开浏览器访问URL: http://localhost:8080/HttpStatusCode/index.jsp , 可以看到以下结果 -


为了使用HTTP状态代码更友好,可尝试设置不同的状态代码及其描述说明。