极客学院团队出品 · 更新于 2018-11-28 11:00:43

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

下面是 HTTP 状态代码和相关可能从Web服务器返回的消息的一个列表:

编码: 消息: 描述:
100 Continue 只有一部分的服务器请求已经收到,但只要没有被拒绝,客户端应该继续请求
101 Switching Protocols 服务器交换了协议。
200 OK 请求是 OK
201 Created 请求已经完成,新的资源被创建  
202 Accepted 请求被接受处理,但是处理还没有完成。
203 Non-authoritative Information  
204 No Content  
205 Reset Content  
206 Partial Content  
300 Multiple Choices 一个链接列表。用户可以选择一个链接然后跳转到那个位置。最多可选择 5 个地址  
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 "内容-长度" 没有被定义。没有它服务器不会接受请求。
412 Precondition Failed 服务器给出给定的请求评估的前提为假。
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 状态码的方法:

有以下方法可以用来设置 servlet 程序的 HTTP 状态码。有了 HttpServletResponse 对象,这些方法都是可用的。

S.N. 方法 &描述
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 错误代码到客户端浏览器,浏览器将显示“需要验证! ! !”的消息。

<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
   // Set error code and reason.
   response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>

现在调用上述代码,JSP 将显示如下所示的结果:

HTTP Status 407 - Need authentication!!!

type Status report

message Need authentication!!!

description The client must first authenticate itself with the proxy (Need authentication!!!).

Apache Tomcat/5.5.29

想要使用 HTTP 状态代码变得更加舒适,尝试设置不同的状态代码和描述。

上一篇: JSP- 服务器响应 下一篇: JSP- 表单处理