Servlets - Http代码( Http Codes)
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 | 切换协议 | 服务器切换协议。 |
200 | OK | 请求没问题 |
201 | Created | 请求已完成,并且已创建新资源 |
202 | Accepted | 请求被接受处理,但处理不完整。 |
203 | 非权威信息 | |
204 | 无内容 | |
205 | 重置内容 | |
206 | 部分内容 | |
300 | 多种选择 | 链接列表。 用户可以选择链接并转到该位置。 最多五个地址 |
301 | 永久移动 | 请求的页面已移至新网址 |
302 | Found | 请求的页面暂时移动到新的URL |
303 | 见其他 | 请求的页面可以在不同的URL下找到 |
304 | 没有修改 | |
305 | 使用代理服务器 | |
306 | Unused | 此代码用于以前的版本。 它已不再使用,但代码保留 |
307 | 临时重定向 | 请求的页面暂时移动到新的URL。 |
400 | 错误的请求 | 服务器不理解请求 |
401 | Unauthorized | 请求的页面需要用户名和密码 |
402 | 需要付款 | You cannot use this code yet |
403 | Forbidden | 禁止访问所请求的页面 |
404 | 未找到 | 服务器找不到请求的页面。 |
405 | 方法不允许 | 不允许在请求中指定的方法。 |
406 | 不能接受的 | 服务器只能生成客户端不接受的响应。 |
407 | 需要代理验证 | 在提供此请求之前,您必须使用代理服务器进行身份验证。 |
408 | 请求超时 | 请求花费的时间比服务器准备等待的时间长。 |
409 | Conflict | 由于冲突,请求无法完成。 |
410 | Gone | 请求的页面不再可用。 |
411 | 长度要求 | “内容长度”未定义。 没有它,服务器将不接受请求。 |
412 | 前提条件失败 | 请求中给出的前提条件由服务器评估为false。 |
413 | 请求的实体太大 | 服务器不接受请求,因为请求实体太大。 |
414 | 请求网址太长 | 服务器不接受请求,因为网址太长。 将“post”请求转换为带有长查询信息的“get”请求时发生。 |
415 | 不支持的媒体类型 | 服务器不接受请求,因为不支持媒体类型。 |
417 | 期望失败 | |
500 | 内部服务器错误 | 请求未完成。 服务器遇到意外情况。 |
501 | 未实现 | 请求未完成。 服务器不支持所需的功能。 |
502 | 错误的网关 | 请求未完成。 服务器从上游服务器收到无效响应。 |
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响应以及提供新文档的URL的Location标头 |
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会显示以下结果 -
<h1 style="font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;">HTTP Status 407 - Need authentication!!!</h1>
<p><b style="font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;" class="notranslate">type</b> Status report</p>
<p><b style="font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;" class="notranslate">message</b><u>Need authentication!!!</u></p>
<p><b style="font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;" class="notranslate">description</b><u>The client must first authenticate itself with the proxy (Need authentication!!!).</u></p>
<h3 style="font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;">Apache Tomcat/5.5.29</h3>