- Servlet 教程
- Servlet - 首页
- Servlet - 概述
- Servlet - 环境设置
- Servlet - 生命周期
- Servlet - 示例
- Servlet - 表单数据
- Servlet - 客户端请求
- Servlet - 服务器响应
- Servlet - HTTP 代码
- Servlet - 编写过滤器
- Servlet - 异常
- Servlet - Cookie 处理
- Servlet - Session跟踪
- Servlet - 数据库访问
- Servlet - 文件上传
- Servlet - 日期处理
- Servlet - 页面重定向
- Servlet - 点击计数器
- Servlet - 自动刷新
- Servlet - 发送邮件
- Servlet - 打包
- Servlet - 调试
- Servlet - 国际化
- Servlet - 注解
- Servlet 有用资源
- Servlet - 问答
- Servlet - 快速指南
- Servlet - 有用资源
- Servlet - 讨论
Servlet - 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) | 服务器评估请求中给定的前提条件为假。 |
413 | 请求实体过大 (Request Entity Too Large) | 服务器将不接受请求,因为请求实体过大。 |
414 | 请求 URL 过长 (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 版本 (HTTP Version Not Supported) | 服务器不支持“http 协议”版本。 |
设置 HTTP 状态码的方法
以下方法可用于在 Servlet 程序中设置 HTTP 状态码。这些方法可用于`HttpServletResponse`对象。
序号 | 方法及描述 |
---|---|
1 |
此方法设置任意状态码。setStatus 方法将 int(状态码)作为参数。如果您的响应包含特殊状态码和文档,请确保在使用`PrintWriter`实际返回任何内容之前调用 setStatus。 |
2 |
此方法生成 302 响应以及包含新文档 URL 的`Location`标头。 |
3 |
此方法发送状态码(通常为 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 将显示以下结果:
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