Servlets - 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 状态代码和相关消息的列表 −
Code | Message | Description |
---|---|---|
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 协议"版本。 |
设置 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 错误代码发送到客户端浏览器,浏览器会显示"需要身份验证!!!"消息。
// 导入所需的 Java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 扩展 HttpServlet 类 public class showError extends HttpServlet { // 处理 GET 方法请求的方法。 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置错误代码和原因。 response.sendError(407, "Need authentication!!!" ); } // 处理 POST 方法请求的方法。 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
现在调用上述 servlet 将显示以下结果 −
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29