Nearby lessons

10 of 34

Servlet - ServletResponse (MIME Types)

📌 What You Will Learn
  • Set content type using MIME types
  • Send HTML, Excel, Word, image, and video responses
  • Redirect HTTP requests to another URL
  • Add cookies to the response

ServletResponse provides methods to set response content type, write text and binary data, redirect requests, and add cookies. This lesson covers MIME types, response streams, and redirection with complete code examples.

Common MIME Types

MIME types represent the type of response being sent to the end user.

MIME TypeResponse
text/htmlHTML text
application/pdfPDF file
application/mswordWord document
application/vnd.ms-excelExcel file
image/jpegJPEG image
video/mp4MP4 video

Setting content type — 2 ways:

  • By ServletResponse: resp.setContentType("text/html");
  • By HttpServletResponse: resp.setHeader("content-type", "text/html");

Demo: HTML Response

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

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

Changing the MIME type to application/msword causes the browser to open the response as a Word document instead of rendering it as HTML.

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

Text Stream vs Binary Stream

Text Stream (PrintWriter):

Used to send text data as response. Obtained via resp.getWriter().

Binary Stream (ServletOutputStream):

Used to send binary data (images, video, audio). Obtained via resp.getOutputStream().

Note: Within a servlet, you can get either PrintWriter or ServletOutputStream, but not both. Trying to get both throws java.lang.IllegalStateException.

BinaryStreamDemo1Servlet.java (Image)

Folder structure: advapps1G/ → sunny.jpg, WEB-INF/ → classes/ → BinaryStreamDemoServlet.class

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

BinaryStreamDemo1Servlet.java (Video)

Folder structure: advapps1GA/ → dhoni.mp4, WEB-INF/ → classes/ → BinaryStreamDemoServlet.class

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

Redirecting HTTP Request

Sometimes we need to redirect an HTTP request to another URL. Use sendRedirect() from HttpServletResponse:

public void sendRedirect(String targetPath) throws IOException

Process of Redirection:

  1. Browser sends a request to servlet-1
  2. If servlet-1 is not responsible for the response, it updates the browser to contact servlet-2 by setting status code 302 and Location header with servlet-2's URL
  3. By seeing 302 status code, the browser creates a new request and sends it to servlet-2
  4. Servlet-2 provides the required response (200) to the browser

Note: After committing the response, redirection is not allowed (throws IllegalStateException). Redirection happens at the client side (browser side).

Real-world example: When you request google.com, the request is redirected to google.co.in.

FirstServlet.java (Redirect)

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

SecondServlet.java (Redirect Target)

Folder structure: advapps1H/ → WEB-INF/ → classes/ → FirstServlet.class, SecondServlet.class

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

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

Adding Cookies to Response

A Cookie is a key-value pair used in session management.

Creating and adding a cookie:

Cookie c = new Cookie("durga", "java");
resp.addCookie(c);

ServletResponse Method Summary

To Set Response Headers:

  • setHeader()
  • addHeader()
  • setIntHeader()
  • addIntHeader()
  • setDateHeader()
  • addDateHeader()

To Set Content-Type:

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

To Acquire Text Stream:

PrintWriter out = resp.getWriter();

To Acquire Binary Stream:

ServletOutputStream os = resp.getOutputStream();

To Redirect Request:

resp.sendRedirect("/advapps1A/test"); OR

resp.setStatus(302); resp.setHeader("Location", "/advapps1A/test");

Example12
JCode Cell
1 
2setHeader() 2) addHeader()
3setIntHeader() 4) addIntHeader()
4setDateHeader() 6) addDateHeader()
5
📝 Key Takeaways
  • Common MIME types and how to set them
  • PrintWriter for text, ServletOutputStream for binary
  • sendRedirect() sends 302 status + Location header
  • Exam-style questions at the end

🧠 Test Your Knowledge

3 Questions
Progress: 0 / 3