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 |