Java servlets

Servlet template


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SomeServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
      
    // Use "request" to read incoming HTTP headers (e.g. cookies)
    // and HTML form data (e.g. data the user entered and submitted)
    
    // Use "response" to specify the HTTP response line and headers
    // (e.g. specifying the content type, setting cookies).
    
    PrintWriter out = response.getWriter();
    // Use "out" to send content to browser
  }
}

Servlet engines


HelloWorld servlet (plain text)


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("Hello World");
  }
}

Servlet return

If a request is made to the server, it returns


telnet localhost 8088
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /jan/servlet/HelloWorld HTTP/1.1

HTTP/1.0 200 OK
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.4.2; Linux 2.6.10-1.12_FC2custom i386; java.vendor=Sun Microsystems Inc.)

Hello World
Connection closed by foreign host.

HelloWorld servlet (HTML)


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWWW extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                                        "Transitional//EN\">\n" +
                "<HTML>\n" +
                "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" +
                "<BODY>\n" +
                "<H1>Hello WWW</H1>\n" +
                "</BODY></HTML>");
  }
}

Servlet return


telnet localhost 8088
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /jan/servlet/HelloWWW HTTP/1.1

HTTP/1.0 200 OK
Content-Type: text/html
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.4.2; Linux 2.6.10-1.12_FC2custom i386; java.vendor=Sun Microsystems Inc.)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Hello WWW</TITLE></HEAD>
<BODY>
<H1>Hello WWW</H1>
</BODY></HTML>
Connection closed by foreign host.


Deploying servlets


HTTP headers

HTTP headers can be found by


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Enumeration;

public class Headers extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      Enumeration enumm = request.getHeaderNames();
      while (enumm.hasMoreElements()) {
	  String header =  (String) enumm.nextElement();
	  out.println(header + " " + request.getHeader(header) + "<br>");
      }
      
  }
}


Servlet return

The output from a request by Firefox with language set to French, English US and then English is


Cache-Control max-age=0
Host localhost:8088
Accept text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1
Keep-Alive 300
Accept-Language fr,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection keep-alive


Getting user locales

The following program uses the Accept-Language field to find possible locales:


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Enumeration;
import java.util.ResourceBundle;
import java.util.Locale;
import java.util.MissingResourceException;

public class GetLocales extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
		  "Transitional//EN\">\n" +
		  "<HTML>\n" +
		  "<HEAD><TITLE>First Screen</TITLE></HEAD>\n" +
		  "<BODY>\n" +
		  "<H1>User Locales</H1>\n <P>");
      
      String acceptLang = request.getHeader("Accept-Language");
      out.print("Accept-Language: " + acceptLang + "<br>");
      Locale preferredLocale = request.getLocale();
      Enumeration allLocales = request.getLocales();

      out.print("Preferred locale: " + preferredLocale + "<br>");
      while (allLocales.hasMoreElements()) {
	  Locale next = (Locale) allLocales.nextElement();
	  out.print("    " + next.toString() + "<br>");
      }
  }
}


Getting properties

The following program checks if there is a properties file matching any of the desired locales


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Enumeration;
import java.util.ResourceBundle;
import java.util.Locale;
import java.util.MissingResourceException;

public class FirstScreen extends HttpServlet {
    public void doGet(HttpServletRequest request,
		      HttpServletResponse response)
	throws ServletException, IOException {
	
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	
	out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
		    "Transitional//EN\">\n" +
		    "<HTML>\n" +
		    "<HEAD><TITLE>First Screen</TITLE></HEAD>\n" +
		    "<BODY>\n" +
		    "<H1>First Screen</H1>\n <P>");
	
	Enumeration allLocales = request.getLocales();
	
	ResourceBundle bundle = null;
	
	while (allLocales.hasMoreElements()) {
	    Locale loc = (Locale) allLocales.nextElement();
	    bundle = getBundle(loc);
	    if (bundle != null) {
		break;
	    }
	}
	    
	if (bundle != null) {
	    String text = bundle.getString("Language");
	    out.print("Language: " + text);
	}  else {
	    out.print("No bundle found");
	}
	
    }
    
    private ResourceBundle getBundle(Locale loc) {
	ResourceBundle bundle = null;
	try {
	    bundle = 	ResourceBundle.getBundle("FirstScreen", loc);
	} catch (MissingResourceException e) {
	    return null;
	}
	// the bundle lookup mechanism can find bundles for
	// other "related" locales. Discard them 
	if (! bundle.getLocale().equals(loc)) {
	    return null;
	}
	return bundle;
    }
      
 }

Form parameters


package hall;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class ThreeParams extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Reading Three Request Parameters";
    out.println(ServletUtilities.headWithTitle(title) +
                "<BODY>\n" +
                "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
                "<UL>\n" +
                "  <LI>param1: "
                + request.getParameter("param1") + "\n" +
                "  <LI>param2: "
                + request.getParameter("param2") + "\n" +
                "  <LI>param3: "
                + request.getParameter("param3") + "\n" +
                "</UL>\n" +
                "</BODY></HTML>");
  }

  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
    doGet(request, response);
  }
}

Cookies

Session tracking

Setting the charset

Form parameter encoding


Jan Newmarch (http://jan.newmarch.name)
jan@newmarch.name
Last modified: Fri May 13 10:17:44 EST 2005
Copyright ©Jan Newmarch
Copyright © Jan Newmarch, Monash University, 2007
Creative Commons License This work is licensed under a Creative Commons License
The moral right of Jan Newmarch to be identified as the author of this page has been asserted.