What's a Servlet?
Home ] Up ] HTTP ] A Simple Java Web Server ] CGI ] Java Servlets ] Apache Tomcat ] Tomcat Directory Structure ] Creating a Web Application ] Web Application Directory Structure ] [ What's a Servlet? ] Generating Other Content ] The Servlet Life Cycle ] Servlets & Form Data ] Request Headers ] CGI Variables ] Redirection ]

 

 

A servlet is a server-side component, written in Java, that dynamically extends the functionality of a server.  Usually, we're talking about a web server.

A servlet replaces the CGI program in a pure CGI solution.  It has a number of advantages over a CGI program:

  • Can be run in-process, avoiding the time and overhead of CGI processes.
  • Is compiled, which can improve performance over non-compiled languages such as Perl.
  • Multithreaded
  • Extensible
  • Portable across server operating systems and web servers.

Basic Servlet Structure

Here's a simple servlet that handles a GET request:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * SimpleServlet.java
 *
 * Created on November 24, 2006
 */

/**
 * Simple Servlet Example.
 *
 * @author Bryan Higgs
 * @version
 */
public class SimpleServlet extends HttpServlet
{
  /** 
   * Handles the HTTP <code>GET</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    PrintWriter out = response.getWriter();
    out.println("Hello from a very simple servlet!");
    out.close();
  }
}

It outputs just plain text:

If you'd like to generate an HTML document, you'll have to add slightly more stuff.

Here is a simple servlet that:

  • Creates an HTML page

 and

  • Handles both GET and POST HTTP requests

 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * SimpleHtmlServlet.java
 *
 * Created on November 24, 2006
 */

/**
 * A simple servlet that produces an HTML page.
 *
 * @author Bryan Higgs
 * @version
 */
public class SimpleHtmlServlet extends HttpServlet
{
  /** 
   * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
   * @param request servlet request
   * @param response servlet response
   */
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();
    String docType = "<!DOCTYE html PUBLIC \"-//w3c//DTD XHTML 1.0 Strict//EN\"" + 
	             "         \"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
    out.println(docType +
                "<html>\n" +
                "<head><title>A simple HTML document</title></head>\n" +
                "<body>\n" +
                " <h1>This is a simple HTML document</h1>\n" +
                " <h2>Produced by a simple servlet</h2>" +
                "</body>\n" +
                "</html>"
                );
    out.close();
  }
  
  /** 
   * Handles the HTTP <code>GET</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    processRequest(request, response);
  }
  
  /** 
   * Handles the HTTP <code>POST</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    processRequest(request, response);
  }
  
  /** 
   * Returns a short description of the servlet.
   */
  public String getServletInfo()
  {
    return "Simple HTML Servlet";
  }
}

which produces:

 
The page was last updated February 19, 2008