📜  Servlet – HTTP 状态码

📅  最后修改于: 2022-05-13 01:55:50.571000             🧑  作者: Mango

Servlet – HTTP 状态码

对于每个 HTTP 请求和 HTTP 响应,我们都有消息。 HTTP 请求和 HTTP 响应消息的格式相似,将具有以下结构 -

  • 初始状态行 + CRLF
  • CRLF =(回车+换行,即换行)
  • 零个或多个标题行 + CRLF
  • 空行,即 CRLF
  • 可选消息正文,如文件、查询数据或查询输出。

例如,服务器响应标头看起来像 -

HTML
HTTP/5.0 200 OK
Content-Type: text/html
Headers:
   (Blank Line)


   
   
   


Java
// 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(404, "Not Found!!!" );
   }
     
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
        
      doGet(request, response);
   }
}


状态行由 HTTP 版本(示例中为 HTTP/5)、状态码(示例中为 200)和与状态码对应的非常短的消息(示例中为 OK)组成。这是可能从 Web 服务器返回的 HTTP 状态代码和相关消息的列表 -

Status Code       

Message

Description

100ContinueOnly a part of the request has been received by the server, but as long as it has not been rejected, the client should continue with the request
101       Switching ProtocolsThe server switches protocol.
200OKThe request is OK
201CreatedThe request is complete, and a new resource is created
202AcceptedThe request is accepted for processing, but the processing is not complete.
203Non-authoritative Information   
204No content 
205Reset content 
206Partial content 
300Multiple choicesA link list. The user can select a link and go to that location. Maximum five addresses
301Moved permanentlyThe requested page has moved to a new URL
302FoundThe requested page has moved temporarily to a new URL
303See otherThe requested page can be found under a different URL
304Not Modified   
305Use Proxy   
306UnusedThis code was used in a previous version. It is no longer used, but the code is reserved
307Temporary redirectThe requested page has moved temporarily to a new URL
400Bad requestThe server did not understand the request
401UnauthorizedThe requested page needs a username and a password
402Payment requiredYou cannot use this code yet
403ForbiddenAccess is forbidden to the requested page
404Not foundThe server cannot find the requested page.
405Method not foundThe method specified in the request is not allowed.
406Not AcceptableThe server can only generate a response that is not accepted by the client.
407Proxy Authentication Required You must authenticate with a proxy server before this request can be served.
408Request Timeout The request took longer than the server was prepared to wait.
409Conflict The request could not be completed because of a conflict.
410Gone The requested page is no longer available.
411Length Required The “Content-Length” is not defined. The server will not accept the request without it.
412Precondition Failed The precondition given in the request was evaluated as false by the server.
413Request Entity Too Large The server will not accept the request, because the request entity is too large.
414Request-url Too Long The server will not accept the request, because the URL is too long. Occurs when you convert a “post” request to a “get” request with long query information.
415Unsupported Media Type The server will not accept the request, because the media type is not supported.
417 Expectation Failed  
500Internal Server Error The request was not completed. The server met an unexpected condition.
501Not Implemented The request was not completed. The server did not support the functionality required.
502Bad Gateway The request was not completed. The server received an invalid response from the upstream server.
503Service Unavailable The request was not completed. The server is temporarily overloading or down.
504Gateway Timeout The gateway has timed out.
505HTTP Version Not Supported The server does not support the “http protocol” version.

设置 HTTP 状态码的方法

以下方法可用于在您的 servlet 程序中设置 HTTP 状态码。这些方法可用于 HttpServletResponse 对象。

S.No.

Method and Description

1

public void setStatus ( int statusCode )

This method sets an arbitrary status code. The setStatus method takes an int (the status code) as an argument. If your response includes a special status code and a document, be sure to call setStatus before actually returning any of the content with the PrintWriter.

2

public void sendRedirect(String url)

This method generates a 302 response along with a Location header giving the URL of the new document

3

public void sendError(int code, String message)

This method sends a status code (usually 404) along with a short message that is automatically formatted inside an HTML document and sent to the client.

HTTP 状态代码示例

下面的代码是将 407 错误代码发送到客户端浏览器的示例,浏览器会显示“未找到!!!”信息。

Java

// 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(404, "Not Found!!!" );
   }
     
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
        
      doGet(request, response);
   }
}

现在调用上述 servlet 将显示以下结果 -