Servlet HTTP Status Codes
The format of HTTP requests and HTTP response messages is similar, structured as follows:
- Initial status line + carriage return and line feed (CR+LF)
- Zero or more header lines + carriage return and line feed
- A blank line, i.e., carriage return and line feed
- An optional message body, such as a file, query data, or query output
For example, the server's response header looks like this:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
The status line includes the HTTP version (in this case, HTTP/1.1), a status code (in this case, 200), and a short message corresponding to the status code (in this case, OK).
Below is a list of possible HTTP status codes and related information that may be returned by a web server:
| Code | Message | Description |
|---|---|---|
| 100 | Continue | Only part of the request has been received by the server, but as long as it is not rejected, the client should continue with the request. |
| 101 | Switching Protocols | The server is switching protocols. |
| 200 | OK | The request is successful. |
| 201 | Created | The request is complete, and a new resource has been created. |
| 202 | Accepted | The request has been accepted for processing, but the processing is not complete. |
| 203 | Non-authoritative Information | |
| 204 | No Content | |
| 205 | Reset Content | |
| 206 | Partial Content | |
| 300 | Multiple Choices | A list of links. The user can select a link and go to that location. Maximum five addresses. |
| 301 | Moved Permanently | The requested page has been moved to a new URL. |
| 302 | Found | The requested page has been temporarily moved to a new URL. |
| 303 | See Other | The requested page can be found under a different URL. |
| 304 | Not Modified | |
| 305 | Use Proxy | |
| 306 | Unused | This code was used in a previous version. It is no longer used, but the code is still reserved. |
| 307 | Temporary Redirect | The requested page has been temporarily moved to a new URL. |
| 400 | Bad Request | The server did not understand the request. |
| 401 | Unauthorized | The requested page needs a username and password. |
| 402 | Payment Required | You cannot use this code yet. |
| 403 | Forbidden | Access is forbidden to the requested page. |
| 404 | Not Found | The server cannot find the requested page. |
| 405 | Method Not Allowed | The specified method in the request is not allowed. |
| 406 | Not Acceptable | The server can only generate a response that is not accepted by the client. |
| 407 | Proxy Authentication Required | You must authenticate with a proxy server before this request is served. |
| 408 | Request Timeout | The request took longer than the server was prepared to wait. |
| 409 | Conflict | The request could not be completed because of a conflict. |
| 410 | Gone | The requested page is no longer available. |
| 411 | Length Required | "Content-Length" is not defined. The server will not accept the request without it. |
| 412 | Precondition Failed | The precondition given in the request evaluated to false by the server. |
| 413 | Request Entity Too Large | The server will not accept the request because the request entity is too large. |
| 414 | Request-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 a long query information. |
| 415 | Unsupported Media Type | The server will not accept the request because the media type is not supported. |
| 417 | Expectation Failed | |
| 500 | Internal Server Error | The request was not completed. The server met an unexpected condition. |
| 501 | Not Implemented | The request is not completed. The server does not support the required functionality. |
| 502 | Bad Gateway | The request is not completed. The server received an invalid response from the upstream server. |
| 503 | Service Unavailable | The request is not completed. The server is temporarily overloaded or down. |
| 504 | Gateway Timeout | Gateway timeout. |
| 505 | HTTP Version Not Supported | The server does not support the "HTTP protocol" version. |
Methods to Set HTTP Status Codes
The following methods can be used to set HTTP status codes in Servlet programs. These methods are available through the HttpServletResponse object.
| No. | Method & Description |
|---|---|
| 1 | public void setStatus ( int statusCode ) <br>This method sets an arbitrary status code. The setStatus method takes an int (status code) as a parameter. If your response includes a special status code and a document, make sure to call setStatus before actually returning any content with PrintWriter. |
| 2 | public void sendRedirect(String url) <br>This method generates a 302 response, along with a Location header containing the new document's URL. |
| 3 | public void sendError(int code, String message) <br>This method sends a status code (usually 404), along with a short message that is automatically formatted and sent to the client within an HTML document. |
HTTP Status Code Example
The following example sends a 407 error code to the client browser, which will display the message "Need authentication!!!".
// Import necessary Java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import javax.servlet.annotation.WebServlet;
@WebServlet("/showError")
// 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);
}
}
Now, calling the above Servlet will display the following result:
| HTTP Status 407 - Need authentication!!! type Status report message Need authentication!!! description The client must first authenticate itself with the proxy (Need authentication!!!). Apache Tomcat/5.5.29 |