Skip to main content

JSP : Server Response and Http Status Codes

When a Web server responds to a HTTP request, the response typically consists of a status line, some response headers, a blank line, and the document. A typical response 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 consists of the HTTP version (HTTP/1.1 in the example), a status code (200 in the example), and a very short message corresponding to the status code (OK in the example).

Following is a summary of the most useful HTTP 1.1 response headers which go back to the browser from the web server. These headers are frequently used in web programming −

S.No.Header & Description
1

Allow

This header specifies the request methods (GET, POST, etc.) that the server supports.

2

Cache-Control

This header specifies the circumstances in which the response document can safely be cached. It can have values public, private or no-cache etc. Public means document is cacheable, Private means document is for a single user and can only be stored in private (nonshared) caches and no-cache means document should never be cached.

3

Connection

This header instructs the browser whether to use persistent HTTP connections or not. A value of close instructs the browser not to use persistent HTTP connections and keep-alive means using persistent connections.

4

Content-Disposition

This header lets you request that the browser ask the user to save the response to disk in a file of the given name.

5

Content-Encoding

This header specifies the way in which the page was encoded during transmission.

6

Content-Language

This header signifies the language in which the document is written. For example, en, en-us, ru, etc.

7

Content-Length

This header indicates the number of bytes in the response. This information is needed only if the browser is using a persistent (keep-alive) HTTP connection.

8

Content-Type

This header gives the MIME (Multipurpose Internet Mail Extension) type of the response document.

9

Expires

This header specifies the time at which the content should be considered out-of-date and thus no longer be cached.

10

Last-Modified

This header indicates when the document was last changed. The client can then cache the document and supply a date by an If-Modified-Since request header in later requests.

11

Location

This header should be included with all responses that have a status code in the 300s. This notifies the browser of the document address. The browser automatically reconnects to this location and retrieves the new document.

12

Refresh

This header specifies how soon the browser should ask for an updated page. You can specify time in number of seconds after which a page would be refreshed.

13

Retry-After

This header can be used in conjunction with a 503 (Service Unavailable) response to tell the client how soon it can repeat its request.

14

Set-Cookie

This header specifies a cookie associated with the page.

The HttpServletResponse Object

The response object is an instance of a javax.servlet.http.HttpServletResponse object. Just as the server creates the request object, it also creates an object to represent the response to the client.

The response object also defines the interfaces that deal with creating new HTTP headers. Through this object, the JSP programmer can add new cookies or date stamps, HTTP status codes etc.

The following methods can be used to set HTTP response header in your servlet program. These methods are available with the HttpServletResponse object. This object represents the server response.

S.No.Method & Description
1

String encodeRedirectURL(String url)

Encodes the specified URL for use in the sendRedirect method or, if encoding is not needed, returns the URL unchanged.

2

String encodeURL(String url)

Encodes the specified URL by including the session ID in it, or, if encoding is not needed, returns the URL unchanged.

3

boolean containsHeader(String name)

Returns a boolean indicating whether the named response header has already been set.

4

boolean isCommitted()

Returns a boolean indicating if the response has been committed.

5

void addCookie(Cookie cookie)

Adds the specified cookie to the response.

6

void addDateHeader(String name, long date)

Adds a response header with the given name and date-value.

7

void addHeader(String name, String value)

Adds a response header with the given name and value.

8

void addIntHeader(String name, int value)

Adds a response header with the given name and integer value.

9

void flushBuffer()

Forces any content in the buffer to be written to the client.

10

void reset()

Clears any data that exists in the buffer as well as the status code and headers.

11

void resetBuffer()

Clears the content of the underlying buffer in the response without clearing headers or status code.

12

void sendError(int sc)

Sends an error response to the client using the specified status code and clearing the buffer.

13

void sendError(int sc, String msg)

Sends an error response to the client using the specified status.

14

void sendRedirect(String location)

Sends a temporary redirect response to the client using the specified redirect location URL.

15

void setBufferSize(int size)

Sets the preferred buffer size for the body of the response.

16

void setCharacterEncoding(String charset)

Sets the character encoding (MIME charset) of the response being sent to the client, for example, to UTF-8.

17

void setContentLength(int len)

Sets the length of the content body in the response In HTTP servlets; this method also sets the HTTP Content-Length header.

18

void setContentType(String type)

Sets the content type of the response being sent to the client, if the response has not been committed yet.

19

void setDateHeader(String name, long date)

Sets a response header with the given name and date-value.

20

void setHeader(String name, String value)

Sets a response header with the given name and value.

21

void setIntHeader(String name, int value)

Sets a response header with the given name and integer value.

22

void setLocale(Locale loc)

Sets the locale of the response, if the response has not been committed yet.

23

void setStatus(int sc)

Sets the status code for this response.

HTTP Header Response Example

Following example would use setIntHeader() method to set Refresh header to simulate a digital clock −

<%@ page import = "java.io.*,java.util.*" %>

<html>
   
   <head>
      <title>Auto Refresh Header Example</title>
   </head>
   
   <body>
      <center>
         <h2>Auto Refresh Header Example</h2>
         <%
            // Set refresh, autoload time as 5 seconds
            response.setIntHeader("Refresh", 5);
            
            // Get current time
            Calendar calendar = new GregorianCalendar();
            
            String am_pm;
            int hour = calendar.get(Calendar.HOUR);
            int minute = calendar.get(Calendar.MINUTE);
            int second = calendar.get(Calendar.SECOND);
            
            if(calendar.get(Calendar.AM_PM) == 0) 
               am_pm = "AM";
            else
               am_pm = "PM";
               String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
               out.println("Current Time is: " + CT + "\n");
         %>
      </center>
   
   </body>
</html>

Now put the above code in main.jsp and try to access it. This will display the current system time after every 5 seconds as follows. Run the JSP. You will receive the following output: −

Auto Refresh Header Example

Current Time is: 9:44:50 PM

You can try working out on the other methods in a similar way.

JSP - Http Status Codes


The format of the HTTP request and the HTTP response messages are similar and will have the following structure −

  • An initial status line + CRLF (Carriage Return + Line Feed ie. New Line)

  • Zero or more header lines + CRLF

  • A blank line ie. a CRLF

  • An optional message body like file, query data or query output.

For example, a server response header looks like the following −

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>

<html>
   <head>...</head>
   
   <body>
      ...
   </body>
</html>

The status line consists of the HTTP version (HTTP/1.1 in the example), a status code (200 in the example), and a very short message corresponding to the status code (OK in the example).

Following table lists out the HTTP status codes and associated messages that might be returned from the Web Server −

CodeMessageDescription
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
101Switching 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 can not use this code yet.
403ForbiddenAccess is forbidden to the requested page
404Not FoundThe server can not find the requested page.
405Method Not AllowedThe 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 RequiredYou must authenticate with a proxy server before this request can be served.
408Request TimeoutThe request took longer than the server was prepared to wait.
409ConflictThe request could not be completed because of a conflict.
410GoneThe requested page is no longer available.
411Length RequiredThe "Content-Length" is not defined. The server will not accept the request without it.
412Precondition FailedThe precondition given in the request evaluated to false by the server.
413Request Entity Too LargeThe server will not accept the request, because the request entity is too large.
414Request-url Too LongThe server will not accept the request, because the url is too long. This occurs when you convert a "post" request to a "get" request with a long query information.
415Unsupported Media TypeThe server will not accept the request, because the media type is not supported.
417Expectation Failed
500Internal Server ErrorThe request was not completed. The server met an unexpected condition.
501Not ImplementedThe request was not completed. The server did not support the functionality required.
502Bad GatewayThe request was not completed. The server received an invalid response from the upstream server.
503Service UnavailableThe request was not completed. The server is temporarily overloading or down.
504Gateway TimeoutThe gateway has timed out.
505HTTP Version Not SupportedThe server does not support the "http protocol" version.

Methods to Set HTTP Status Code

Following methods can be used to set the HTTP Status Code in your servlet program. These methods are available with the HttpServletResponse object.

S.No.Method & 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 Status Code Example

Following example shows how a 407 error code is sent to the client browser. After this, the browser would show you "Need authentication!!!" message.

<html>
   <head>
      <title>Setting HTTP Status Code</title>
   </head>
   
   <body>
      <%
         // Set error code and reason.
         response.sendError(407, "Need authentication!!!" );
      %>
   </body>
</html>

You will receive the following output −

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

To become more comfortable with HTTP status codes, try to set different status codes and their description.


Anurag Rana

Comments

Popular posts from this blog

JAVA Scrollbar, MenuItem and Menu, PopupMenu

ava AWT Scrollbar The  object  of Scrollbar class is used to add horizontal and vertical scrollbar. Scrollbar is a  GUI  component allows us to see invisible number of rows and columns. AWT Scrollbar class declaration public   class  Scrollbar  extends  Component  implements  Adjustable, Accessible   Java AWT Scrollbar Example import  java.awt.*;   class  ScrollbarExample{   ScrollbarExample(){               Frame f=  new  Frame( "Scrollbar Example" );               Scrollbar s= new  Scrollbar();               s.setBounds( 100 , 100 ,  50 , 100 );               f.add(s);               f.setSize( 400 , 400 );               f.setLayout( null );               f.setVisible( true );   }   public   static   void  main(String args[]){           new  ScrollbarExample();   }   }   Output: Java AWT Scrollbar Example with AdjustmentListener import  java.awt.*;   import  java.awt.event.*;   class  ScrollbarExample{        ScrollbarExample(){               Frame f=  new  Frame( "Scro

Difference between net platform and dot net framework...

Difference between net platform and dot net framework... .net platform supports programming languages that are .net compatible. It is the platform using which we can build and develop the applications. .net framework is the engine inside the .net platform which actually compiles and produces the executable code. .net framework contains CLR(Common Language Runtime) and FCL(Framework Class Library) using which it produces the platform independent codes. What is the .NET Framework? The Microsoft .NET Framework is a platform for building, deploying, and running Web Services and applications. It provides a highly productive, standards-based, multi-language environment for integrating existing investments with next-generation applications and services as well as the agility to solve the challenges of deployment and operation of Internet-scale applications. The .NET Framework consists of three main parts: the common language runtime, a hierarchical set of unified class librari

C++ this Pointer, static, struct and Enumeration

C++ this Pointer In C++ programming,  this  is a keyword that refers to the current instance of the class. There can be 3 main usage of this keyword in C++. It can be used  to pass current object as a parameter to another method. It can be used  to refer current class instance variable. It can be used  to declare indexers. C++ this Pointer Example Let's see the example of this keyword in C++ that refers to the fields of current class. #include <iostream>    using   namespace  std;   class  Employee {       public :           int  id;  //data member (also instance variable)               string name;  //data member(also instance variable)            float  salary;          Employee( int  id, string name,  float  salary)             {                   this ->id = id;                  this ->name = name;                  this ->salary = salary;            }             void  display()             {                 cout<<id<< "  " <<name<&