在本章中,我们将在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状态代码更友好,可尝试设置不同的状态代码及其描述说明。