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 | 服务器将不接受请求,因为 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 protocol" 版本。 |
设置 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 错误码。之后,浏览器将显示“需要身份验证!!!”消息。
<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
// 设置错误码和原因。
response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>
您将收到以下输出 −
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 状态码,请尝试设置不同的状态码及其描述。