📜  Servlet – HTTP 状态码(1)

📅  最后修改于: 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容器自动生成。