📅  最后修改于: 2023-12-03 15:34:56.743000             🧑  作者: Mango
Servlet – HTTP 状态码
HTTP状态码指的是在HTTP协议通信过程中,由服务端向客户端返回的3位数字代码,用来表示本次HTTP请求的处理结果。其中,第一位数字表示状态码的类别,后两位数字无具体分类作用。
常见的HTTP状态码有以下几种:
| 状态码 | 类别 | 描述 |
| --- | --- | --- |
| 1xx | 信息性状态码 | 表示服务器已接收到客户端的请求,正在进一步处理 |
| 2xx | 成功状态码 | 表示本次请求已经被正常处理完毕 |
| 3xx | 重定向状态码 | 表示客户端需要进行附加操作以完成请求 |
| 4xx | 客户端错误状态码 | 表示客户端发送的请求有错误,服务器无法处理 |
| 5xx | 服务器错误状态码 | 表示服务器在处理请求过程中遇到了错误 |
常见的HTTP状态码及其含义
1xx 信息性状态码
- 100:继续。客户端应当继续发出请求。服务器收到了请求
- 101:切换协议。请求者已要求服务器切换协议,服务器已经确认并准备切换
2xx 成功状态码
- 200:成功。请求已成功被服务器接收、理解、并接受
- 201:已创建。请求成功,并且服务器创建了新的资源
- 202:已接受。服务器已经接受了请求,但尚未处理完成
- 203:非授权信息。服务器已经成功处理了请求,但返回的信息可能来自另一来源
- 204:无内容。服务器成功处理了请求,但没有返回任何内容
- 205:重置内容。服务器成功处理了请求,但没有返回任何内容。与204响应不同之处在于,该响应要求请求者重置文档视图
- 206:部分内容。服务器成功处理了部分GET请求
3xx 重定向状态码
- 300:多种选择。请求的资源有多种表示形式,服务器可以根据请求者的特定需求来切换显示
- 301:永久移动。请求的资源已被永久移动到新URI
- 302:临时移动。请求的资源临时从不同的URI响应请求
- 303:查看其它地址。告诉客户端应该使用GET方式请求资源来获取资源
- 304:未修改。客户端请求资源的时间比服务器上该资源被修改的时间早,服务器直接返回304状态码
- 307:临时重定向。与302状态码含义相同,但要求客户端保留请求Method(GET、POST)
4xx 客户端错误状态码
- 400:错误的请求。服务器无法识别请求,或请求参数有误
- 401:未授权。请求要求身份验证,无效的身份验证信息
- 403:禁止访问。服务器拒绝了客户端的访问,没有权限
- 404:未找到。请求的资源不存在
- 405:方法不允许。请求方法不支持
- 408:请求超时。服务器等待客户端发送请求超时
- 413:请求实体过大。请求实体比服务器能够或者希望处理的要大
5xx 服务器错误状态码
- 500:服务器内部错误。服务器遇到了不知道如何处理的情况
- 501:未实现。服务器不支持客户端请求的功能
- 502:错误网关。服务器作为网关或代理,从上游服务器收到了无效的响应
- 503:服务不可用。服务器暂时不可用
- 504:网关超时。服务器作为网关或代理,没有及时从上游服务器收到请求
- 505:HTTP 版本不受支持。服务器不支持请求中所用的 HTTP 协议版本
如何在Servlet中获取HTTP状态码
在Servlet处理请求过程中,可以通过HttpServletResponse对象来设置、获取HTTP状态码。以下是获取HTTP状态码的示例代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); // 设置HTTP状态码为404
int statusCode = response.getStatus(); // 获取当前HTTP状态码
}
以上代码中,我们首先使用response.setStatus()
方法将HTTP状态码设置为404,然后通过response.getStatus()
方法获取当前的HTTP状态码。如果使用默认的HTTP状态码,则可以不进行设置,由Servlet容器自动生成。