Nearby lessons

28 of 34

Servlet - Examples: HTTP Methods & Response

📌 What You Will Learn
  • See complete runnable servlet programs
  • Understand the output of each program
  • Copy and deploy programs in Tomcat

Programs demonstrating GET/POST methods, form parameters, request headers, and response MIME types.

Retrieving Form Parameters

It returns all values associated with the specified parameter.

If the specified parameter is not available then this method returns null.

Argument is case sensitive

Eg: String[] s = req.getParameterValues("course");

for(String s1: s)

{

SOP(s1);

}

Example01
JCode Cell
1 
2 public String[] getParameterValues(String pname)
3

Retrieving Form Parameters

returns all form parameter names.

Example02
JCode Cell
1 
2 public Enumeration getParmeterNames()
3

Retrieving Form Parameters

returns Map object which contains all parameter names and values.

getParameter()

getParameterValues()

getParameterNames()

getParameterMap()

Example03
JCode Cell
1 
2 public Map getParameterMap()
3

Demo Program to retrieve Form Parameters

Example04
JCode Cell
1 
2 <html>
3 <body bgcolor=green text=white><center><h1>Durga Software Solutions:Registration form</h1></center>
4 <form action = "/advapps1D/test" method="GET">
5 <table border=0>
6 <tr><td>Enter Name :</td><td><input type=text name=uname></td></tr>
7 <tr><td>Enter contact number:</td><td>
8 <input type=text name=ucontact></td></tr>
9 <tr><td>Enter Course:</td><td>
10 <select name=course multiple>
11 <option value=CoreJava>Core Java</option>
12 <option value=AdvJava>Advanced Java</option>
13 <option value=Hibernate>HIBERNATE</option>
14 <option value=Spring>SPRING</option>
15 <option value=WebServices>Web Services</option>
16 </select></td></td>
17 <tr><td><input type=submit></td><td></td></tr></table>
18 </form>
19 </body>
20 </html>
21

FormDemoServlet.java

advapps1D

|-register.html

|-WEB-INF

|-classes

|-FormDemoServlet.class

Example05
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test")
7 public class FormDemoServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 PrintWriter out = resp.getWriter();
12 String username=req.getParameter("uname");
13 String usercontact=req.getParameter("ucontact");
14 out.println("<h1>User Name:"+username+"<br>");
15 out.println("User Contact:"+usercontact+"<br>");
16 String[] s = req.getParameterValues("course");
17 out.println("Your Selected Courses:<br/>");
18 for(String s1 : s)
19 {
20 out.println(s1+"<br>");
21 }
22 out.println("</h1>");
23 }
24
25 }
26

Retrieving Request Headers

2.accept-encoding: encoding types accepted by browser like gzip,dflate etc..

3.accept-language: languages types accepted by browser like un-en

4.user-agent: It represents the type of browser

5.cookie: used to send cookies for session management

etc...

utilities of request headers:

case-1:

By using accept-encoding request header,server can send compressed data instead of original

data.It reduces download time and improves performance.

Eg:

String encoding=req.getHeader("accept-encoding");

if(encoding.equals("gzip"))

{

send movie in gzip format

}

case-2:

By using user-agent request header,server can send browser specific customized response,so that

we can increase hit rate of our application.

String userAgent=req.getHeader("user-agent");

if(userAgent.equals("mozilla"))

{

provide mozilla compatible response

}

else if(userAgent.equals("chrome"))

{

provide chrome compatible response

}

case-3:

By using cookie request header,browser can send cookies to the server so that server can

implement session management.

Note:

Browser will send request headers and server can use these request headers to provide proper

response.

HttpServletRequest defines the following methods to retrieve header information at server side

Example06
JCode Cell
1 
2 accept:media types accepted by browser (like html,pdf,images etc..)
3

Retrieving Request Headers

returns value associated with specified request header

If the specified request header is not already available then we will get null

If the header associated with multiple values then this method returns only first value.

argument is case insensitive

Eg:

String userAgent=req.getHeader("USER-AGENT");

String userAgent=req.getHeader("user-agent");

Example07
JCode Cell
1 
2 public String getHeader(String hname)
3

Retrieving Request Headers

returns all values associated with specified header.

If the specified header is not available then this method returns empty Enumeration object but

not null.

argument is not case sensitive

Example08
JCode Cell
1 
2 public Enumeration getHeaders(String hname):
3

Retrieving Request Headers

returns all header names associated with the request.

Example09
JCode Cell
1 
2 public Enumeration getHeaderNames()
3

Retrieving Request Headers

We can use this method if header associated with int value.

String length=req.getHeader("content-length");

int l = Integer.parseInt(length);

or

int l = req.getIntHeader("content-length");

Example10
JCode Cell
1 
2 public int getIntHeader(String hname)
3

Retrieving Request Headers

We can use this method if header associated with Date value.

Returns Date value associated with the header as the number of milli seconds since jan 1st 1970.

If we pass these milliseconds as argument to Date constructor then we will get exact date.

1970 JAN 1st 12:00 AM

Milli Seconds

Date Value

Eg:

long l =req.getDateHeader("date");

Date d = new Date(l);

getHeader()

getHeaders()

getHeaderNames()

getIntHeader()

getDateHeader()

Demo Program to display all request headers information

Example11
JCode Cell
1 
2 public long getDateHeader(String hname)
3

RequestHeaderDemoServlet.java

advapps1E

|-WEB-INF

|-classes

|-RequestHeaderDemoServlet.class

Example12
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import java.util.*;
6 import javax.servlet.annotation.*;
7 @WebServlet("/test")
8 public class RequestHeaderDemoServlet extends HttpServlet
9 {
10 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
11 {
12 PrintWriter out = resp.getWriter();
13 out.println("<h1>Request Headers Information</h1></hr>");
14 out.println("<table border=2><tr><th>HeaderName</th><th>Header values</th></tr>");
15 Enumeration e = req.getHeaderNames();
16 while(e.hasMoreElements())
17 {
18 String hname = (String)e.nextElement();
19 String hvalue=req.getHeader(hname);
20 out.println("<tr><td>"+hname+"</td><td>"+hvalue+"</td></tr>");
21 }
22 out.println("</table></body></html>");
23 }
24 }
25

Retrieving Client and Server information from the request

returns IP address of the client

Example13
JCode Cell
1 
2 public String getRemoteAddr()
3

Retrieving Client and Server information from the request

returns the port number on which client is running

Example14
JCode Cell
1 
2 public int getRemotePort()
3

Retrieving Client and Server information from the request

returns the server name to which request sent

Example15
JCode Cell
1 
2 public String getServerName()
3

Retrieving Client and Server information from the request

returns port number at which server is running

Example16
JCode Cell
1 
2 public int getServerPort()
3

ClientServerInfoServlet.java

advapps1E

|-WEB-INF

|-classes

|-ClientServerInfoServlet.class

To Retrieve Form Parameters

Example17
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test")
7 public class ClientServerInfoServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 PrintWriter out = resp.getWriter();
12 out.println("<h1>Client IP Address:" +req.getRemoteAddr()+"</h1>");
13 out.println("<h1>Client Host:" +req.getRemoteHost()+"</h1>");
14 out.println("<h1>Client Port" +req.getRemotePort()+"</h1>");
15 out.println("<h1>Server Name:" +req.getServerName()+"</h1>");
16 out.println("<h1>Server Port:" +req.getServerPort()+"</h1>");
17 }
18 }
19

ClientServerInfoServlet.java

To Retrieve Request Headers

Example18
JCode Cell
1 
2 getParameter() 2) getParameterValues()
3 getParameterNames() 4) getParameterMap()
4

ClientServerInfoServlet.java

Request5) getDateHeader()

Object

To Retrieve Cookies

Cookie() c = req.getCookies();

To Retrieve Client And Server Information

Example19
JCode Cell
1 
2 getHeader() 2) getHeaders()
3 getHeaderNames() 4) getIntHeader()
4

ClientServerInfoServlet.java

Playing Games with Response Object

Objective:

By using HttpServletResponse interface,write code

  • To set Response headers
  • To set Content type of Response
  • To acquire Text Stream for response
  • To acquire Binary Stream for response
  • To redirect request to another url
  • To add cookies to the response
  • To set Response headers:

Http Response headers provides configuration information of the server and information about

the response like content-type,content-length etc

Browser will use these response headers to display response body properly to the end user.

HttpServletResponse interface defines the following methods to add headers to the response.

Example20
JCode Cell
1 
2 getRemoteHost() 2) getRemoteAddr()
3 getRemotePort() 4) getServerName()
4 getServerPost()
5

ClientServerInfoServlet.java

If the specified header is already available then old value will be replaced with new value.

Example21
JCode Cell
1 
2 public void setHeader(String hname,String hvalue)
3

ClientServerInfoServlet.java

If the specified header is already available then this new value also will be added to existing list

of values. In this case replacement won't be happend.

HttpServletResponse interface defines the following extra methods to add int and date headers.

Example22
JCode Cell
1 
2 public void addHeader(String hname,String hvalue)
3

ClientServerInfoServlet.java

2.set content type of response:

ContentType header represents MIME type(multi purpose internet mail extension)of the

response.

Example23
JCode Cell
1 
2 public void setIntHeader(String hname,int hvalue)
3 public void addIntHeader(String hname,int hvalue)
4 public void setDateHeader(String hname,long ms)
5 public void addDateHeader(String hname,long ms)
6

Demo Program to send HTML Response

Example24
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test")
7 public class HtmlServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 PrintWriter out = resp.getWriter();
12 resp.setContentType("text/html");
13 out.println("<h1><table border=1>");
14 out.println("<tr><th>NAME</th><th>RANK</th></tr>");
15 out.println("<tr><td>SUNNY</td><td>1</td></tr>");
16 out.println("<tr><td>MALLIKA</td><td>2</td></tr>");
17 out.println("<tr><td>VEENA</td><td>3</td></tr>");
18 out.println("<tr><td>MALLIKA ARORA</td><td>4</td></tr></h1>");
19 }
20 }
21
Output

    <h1><table border=1>
    <tr><th>NAME</th><th>RANK</th></tr>
    <tr><td>SUNNY</td><td>1</td></tr>
    <tr><td>MALLIKA</td><td>2</td></tr>
    <tr><td>VEENA</td><td>3</td></tr>
    <tr><td>MALLIKA ARORA</td><td>4</td></tr></h1>
          

Demo Program to send Excel File as Response

Example25
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test")
7 public class ExcelServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 PrintWriter out = resp.getWriter();
12 resp.setContentType("application/vnd.ms-excel");
13 out.println("<h1><table border=1>");
14 out.println("<tr><th>NAME</th><th>RANK</th></tr>");
15 out.println("<tr><td>SUNNY</td><td>1</td></tr>");
16 out.println("<tr><td>MALLIKA</td><td>2</td></tr>");
17 out.println("<tr><td>VEENA</td><td>3</td></tr>");
18 out.println("<tr><td>MALLIKA ARORA</td><td>4</td></tr></h1>");
19 }
20 }
21
Output

    <h1><table border=1>
    <tr><th>NAME</th><th>RANK</th></tr>
    <tr><td>SUNNY</td><td>1</td></tr>
    <tr><td>MALLIKA</td><td>2</td></tr>
    <tr><td>VEENA</td><td>3</td></tr>
    <tr><td>MALLIKA ARORA</td><td>4</td></tr></h1>
          

Demo Program to send Word File as Response

  • To acquire text stream for the response:

We can send text data as the response by using PrintWriter object.

We can get PrintWriter object by using getWriter() method of ServletResponse interface.

Eg:

PrintWriter out=resp.getWriter();

out.println("Hello this is text response from the servlet");

  • To acquire binary stream for the response:

We can send binary information(like video files,audio files,images etc..)as response by using

ServletOutputStream object.

We can create ServletOutputStream object by using getOutputStream() method of

ServletResponse interface.

Eg: ServletOutputStream os=resp.getOutputStream();

Example26
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test")
7 public class WordServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 PrintWriter out = resp.getWriter();
12 resp.setContentType("application/msword");
13 out.println("<h1><table border=1>");
14 out.println("<tr><th>NAME</th><th>RANK</th></tr>");
15 out.println("<tr><td>SUNNY</td><td>1</td></tr>");
16 out.println("<tr><td>MALLIKA</td><td>2</td></tr>");
17 out.println("<tr><td>VEENA</td><td>3</td></tr>");
18 out.println("<tr><td>MALLIKA ARORA</td><td>4</td></tr></h1>");
19 }
20 }
21
Output

    <h1><table border=1>
    <tr><th>NAME</th><th>RANK</th></tr>
    <tr><td>SUNNY</td><td>1</td></tr>
    <tr><td>MALLIKA</td><td>2</td></tr>
    <tr><td>VEENA</td><td>3</td></tr>
    <tr><td>MALLIKA ARORA</td><td>4</td></tr></h1>
          

BinaryStreamDemo1Servlet.java

advapps1G

|- sunny.jpg

|-WEB-INF

|-classes

|-BinaryStreamDemoServlet.class

Example27
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 public class BinaryStreamDemo1Servlet extends HttpServlet
6 {
7 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
8 {
9 resp.setContentType("image/JPEG");
10 ServletOutputStream os = resp.getOutputStream();
11 String path=getServletContext().getRealPath("sunny.jpg");
12 File f = new File(path);
13 FileInputStream fis = new FileInputStream(f);
14 byte[] b = new byte[(int)f.length()];
15 fis.read(b);//reading the image and placing into byte array
16 os.write(b);//write byte array to the respose
17 os.flush();
18 os.close();
19 }
20 }
21

Demo Program to send Video file as Response

advapps1GA

|- dhoni.mp4

|-WEB-INF

|-classes

|-BinaryStreamDemoServlet.class

Note:

By using PrintWriter we can send text data as response but by using ServletOutputStream we can

send both text data and binary data as response.

Note:

Within the servlet we can get either PrintWriter or ServletOutputStream but not both

simultaneously.

If we are trying to get both then we will get RuntimeException saying IllegalStateException.

Eg:

public void doGet(..)...

{

PrintWriter out=resp.getWriter();

ServletOutputStream os = resp.getOutputStream();

}

RE: java.lang.IllegalStateException: getWriter() has already been called for this response

Example28
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test")
7 public class BinaryStreamDemo1Servlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 resp.setContentType("video/mp4");
12 ServletOutputStream os = resp.getOutputStream();
13 String path=getServletContext().getRealPath("dhoni.mp4");
14 File f = new File(path);
15 FileInputStream fis = new FileInputStream(f);
16 byte[] b = new byte[(int)f.length()];
17 fis.read(b);//reading the image and placing into byte array
18 os.write(b);//write byte array to the respose
19 os.flush();
20 os.close();
21 }
22 }
23

FirstServlet.java

Example29
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test1")
7 public class FirstServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 //resp.sendRedirect("/advapps1H/test2");
12 resp.setStatus(302);
13 resp.setHeader("Location","/advapps1H/test2");
14 }
15 }
16

SecondServlet.java

advapps1H

|-WEB-INF

|-classes

|-FirstServlet.class

|-SecondServlet.class

In the above example whenever we are sending the request to FirstServlet,SecondServlet will

provide required response b'z of redirection.

*Note:

After committing the response we are not allowed to perform redirection,otherwise we will get

RuntimeException saying IllegalStateException.(But this feature is not implemented by Tomcat)

Note: sendRedirection is happening at client side(browser side)

Eg of redirection:

Whenever we are sending the request to google.com, our request will be redirected to

google.co.in

Example30
JCode Cell
1 
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.io.*;
5 import javax.servlet.annotation.*;
6 @WebServlet("/test2")
7 public class SecondServlet extends HttpServlet
8 {
9 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
10 {
11 PrintWriter out =resp.getWriter();
12 out.println("<h1>Hi This is Second Servlet</h1>");
13 }
14 }
15
Output

    <h1>Hi This is Second Servlet</h1>
          

Adding Cookies to Response

To Set Content-Type of Response

resp.setContentType("text/html");

OR

resp.setHeader("Content-Type","text/html");

Response To Acquire Text Stream For Response

ObjectPrintWriter out = resp.getWriter();

To Acquire Binary Stream For Response

ServletOutputStream os =

resp.getOutputStream();

To Redirect Request to Another URL

resp.sendRedirect("/advapps1A/text");

OR

resp.setStatus(302);

resp.setHeader("Location", "/advapps1A/text ");

Example31
JCode Cell
1 
2 setHeader() 2) addHeader()
3 setIntHeader() 4) addIntHeader()
4 setDateHeader() 6) addDateHeader()
5
📝 Key Takeaways
  • Every example is complete and compiles as-is
  • Examples are grouped by topic
  • Typing programs is the fastest way to learn servlets