An Introduction to Java Servlet
K. Yue April 15, 2001
Introduction
javac -classpath ./servlet.jar;./server.jar MyProg.java
Servlet Lifecycle
Writing Java Servlets
Defining Servlets
import javax.servlet.*;
import javax.servlet.http.*;
public class MyIterativeServlet extends HttpServlet
implements SingleThreadModel {
/* Servlet which handles client requests iteratively */
...
}
Example: SimpleHello.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleHello extends HttpServlet {
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter toClient = response.getWriter();
toClient.println("<html>");
toClient.println("<p>Hello,
world</p>");
toClient.println("</html>");
toClient.close();
}
}
javax.servlet.http.HttpServletResponse
Example: SetCookie.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class SetCookie extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException
{ // set a cookie
String name = "last_visited";
String value = (new Date()).toString();
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(1000000);
response.addCookie(cookie);
response.setContentType("text/html");
PrintWriter toClient = response.getWriter();
toClient.println("<html>");
toClient.println("<p>A cookie
has been set: ");
toClient.println(name + " => "
+ value + ".");
toClient.println("</html>");
toClient.close();
}
}
javax.servlet.http.HttpServletRequest
Example 1: ParameterSnoop.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ParameterSnoop extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println("Query String:");
out.println(req.getQueryString());
out.println();
out.println("Request Parameters:");
Enumeration enum = req.getParameterNames();
while (enum.hasMoreElements()) {
String name = (String) enum.nextElement();
String values[] = req.getParameterValues(name);
if (values != null) {
for (int i = 0; i <
values.length; i++) {
out.println(name
+ " (" + i + "): " + values[i]);
}
}
}
}
}
Example: GetCookie.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class GetCookie extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{ // get all cookies
Cookie[] cookies = request.getCookies();
String name = "";
String value = "";
response.setContentType("text/html");
PrintWriter toClient = response.getWriter();
toClient.println("<html>");
if (cookies != null) {
toClient.println("<p><ul>The
following cookies found: ");
for (int i=0; i<cookies.length; i++)
{
name = cookies[i].getName();
value = cookies[i].getValue();
toClient.println("<li>"
+ name + " => " + value + ".");
}
toClient.println("</ul>");
}
else {
toClient.println("There is no cookie.");
}
toClient.println("</html>");
toClient.close();
}
}
Handling HTTP Requests
Example: Hello.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws
ServletException, IOException {
// Set the Content-Type header
res.setContentType("text/html");
// Return early if this is a HEAD method. Note that
doHead calls
// doGet by default.
if (req.getMethod().equals("HEAD")) return;
PrintWriter out = res.getWriter();
String name = req.getParameter("name");
// generate the dynamic HTML contents.
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello, "
+ name + "</TITLE></HEAD>");
out.println("<BODY>");
out.println("Hello, " + name);
out.println("</BODY></HTML>");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req, res);
}
}
More details on Java Servlet Life-Cycle
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InitDestroyCounter extends HttpServlet {
int count;
String counterFileName = "InitDestroyCounter.initial";
public void init(ServletConfig config) throws ServletException {
// Always call super.init(config) first (servlet mantra
#1)
super.init(config);
// Try to load the initial count from our saved persistent
state
try {
FileReader fileReader = new FileReader(counterFileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String initial = bufferedReader.readLine();
count = Integer.parseInt(initial);
return;
}
catch (FileNotFoundException ignored) { } // no saved
state
catch (IOException ignored) { }
// problem during read
catch (NumberFormatException ignored) { } // corrupt
saved state
String initial = getInitParameter("initial");
try {
count = Integer.parseInt(initial);
return;
}
catch (NumberFormatException ignored) { }
// null or non-integer value
// Default to an initial count of "0"
count = 0;
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// Here, I change it to HTML.
res.setContentType("text/html");
PrintWriter out = res.getWriter();
int local_count;
synchronized(this) {
local_count = ++count;
if (count % 10 == 0) saveState();
}
out.println("<html><body bgcolor=#ccccff>"
+
"Since loading, this servlet has been accessed " +
local_count + " times. See you.</body></html>");
}
public void destroy() {
saveState();
}
public void saveState() {
// Try to save the accumulated count
try {
FileWriter fileWriter = new FileWriter(counterFileName);
String initial = Integer.toString(count);
fileWriter.write(initial, 0, initial.length());
fileWriter.close();
return;
}
catch (IOException e) { // problem during write
// Log the exception.
}
}
}