Slide 9 Servlet API
Slide 9 Servlet API
Two packages contain the classes and interfaces that are required to build the
servlets. These are
• javax.servlet
• javax.servlet.http.
They constitute the core of the Servlet API. Keep in mind that these packages are
not part of the Java core packages. Therefore, they are not included with Java SE.
Instead, they are provided by Tomcat. They are also provided by Java EE.
The Servlet API has been in a process of ongoing development and enhancement.
The current servlet specification is version 3.1. However, because changes
happen fast in the world of Java, you will want to check for any additions or
alterations. This chapter discusses the core of the Servlet API, which will be
available to most readers and works with all modern versions of the servlet
specification.
Method : Description
Object getAttribute(String attr) : Returns the value of the server attribute named attr.
String getRealPath(String vpath) : Returns the real (i.e., absolute) path that corresponds to the
relative path vpath.
String getServerInfo( ) : Returns information about the server.
void log(String s, Throwable e) : Writes s and the stack trace for e to the servlet log.
void setAttribute(String attr, Object val) : Sets the attribute specified by attr to the value passed
in val.
The GenericServlet Class
The GenericServlet class provides implementations of the basic life cycle
methods for a servlet. GenericServlet implements
the Servlet and ServletConfig interfaces. In addition, a method to append string
to the server log file is available. The signatures of this method are shown here:
void log(String s)
void log(String s, Throwable e)
Here, s is the string to be appended to the log, and e is an exception that occurred.
After following these steps, the browser will display a response that is
dynamically generated by the servlet.
Class : Description
Cookie : Allows state information to be stored on a client machine.
HttpServlet : Provides methods to handle HTTP requests and responses.
The names and values of cookies are stored on the user’s machine. Some of the
information that can be saved for each cookie includes the following:
The name of the cookie
The value of the cookie
The expiration date of the cookie
The domain and path of the cookie
The expiration date determines when this cookie is deleted from the user’s
machine. If an expiration date is not explicitly assigned to a cookie, it is deleted
when the current browser session ends.
The domain and path of the cookie determine when it is included in the header of
an HTTP request. If the user enters a URL whose domain and path match these
values, the cookie is then supplied to the web server. Otherwise, it is not.
There is one constructor for Cookie. It has the signature shown here:
Cookie(String name, String value)
Here, the name and value of the cookie are supplied as arguments to the
constructor. The methods of the Cookie class are summarized in Table 38-8.
The HttpServlet Class
The HttpServlet class extends GenericServlet. It is commonly used when
developing servlets that receive and process HTTP requests. The methods defined
by the HttpServlet class are summarized in Table 38-9.
Method : Description
boolean getSecure( ) : Returns true if the cookie is secure. Otherwise, returns false.
boolean isHttpOnly(?) : Returns true if the cookie has the HttpOnly attribute.
void setHttpOnly(boolean httpOnly) : If httpOnly is true, then the HttpOnly attribute is added
to the cookie. If httpOnly is false, the HttpOnly attribute is removed.
void setMaxAge(int secs) : Sets the maximum age of the cookie to secs. This is the number of
seconds after which the cookie is deleted.
Compile the servlet. Next, copy it to the appropriate directory, and update
the web.xml file, as previously described. Then, perform these steps to test this
example:
Start Tomcat, if it is not already running.
Display the web page in a browser.
Select a color.
Submit the web page.
After completing these steps, the browser will display the response that is
dynamically generated by the servlet.
One other point: Parameters for an HTTP GET request are included as part of the
URL that is sent to the web server. Assume that the user selects the red option
and submits the form. The URL sent from the browser to the server is
http://localhost:8080/examples/servlets/servlet/ColorGetServlet?color=Red
The characters to the right of the question mark are known as the query string.
<html>
<body>
<center>
<form name="Form1" method="post"
action="http://localhost:8080/examples/servlets/servlet/ColorPostServlet">
<B>Color:</B>
<select name="color" size="1"> <option value="Red">Red</option> <option
value="Green">Green</option> <option value="Blue">Blue</option> </select>
<br><br>
<input type=submit value="Submit"> </form>
</body>
</html>
The source code for ColorPostServlet.java is shown in the following listing.
The doPost( ) method is overridden to process any HTTP POST requests that are
sent to this servlet. It uses the getParameter() method of HttpServletRequest to
obtain the selection that was made by the user. A response is then formulated.
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class ColorPostServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String color = request.getParameter("color"); response.setContentType("text/html");
PrintWriter pw = response.getWriter(); pw.println("<B>The selected color is: ");
pw.println(color);
pw.close();
}
}
Compile the servlet and perform the same steps as described in the previous
section to test it.
Using Cookies
Now, let’s develop a servlet that illustrates how to use cookies. The servlet is
invoked when a form on a web page is submitted. The example contains three
files as summarized here:
File : Description
AddCookie.html: Allows a user to specify a value for the cookie named MyCookie.
AddCookieServlet.java: Processes the submission of AddCookie.html.
GetCookiesServlet.java: Displays cookie values.
The HTML source code for AddCookie.html is shown in the following listing.
This page contains a text field in which a value can be entered. There is also a
submit button on the page. When this button is pressed, the value in the text field
is sent to AddCookieServlet via an HTTP POST request.
<html>
<body>
<center>
<form name="Form1" method="post"
action="http://localhost:8080/examples/servlets/servlet/AddCookieServlet"> <B>Enter a
value for MyCookie:</B>
<input type=textbox name="data" size=25 value=""> <input type=submit value="Submit">
</form>
</body>
</html>
pw.close();
}
}
Compile the servlets. Next, copy them to the appropriate directory, and update
the web.xml file, as previously described. Then, perform these steps to test this
example:
After completing these steps, you will observe that a feedback message is
displayed by the browser.
Next, request the following URL via the browser:
http://localhost:8080/examples/servlets/servlet/GetCookiesServlet
Observe that the name and value of the cookie are displayed in the browser.
In this example, an expiration date is not explicitly assigned to the cookie
via the setMaxAge( ) method of Cookie. Therefore, the cookie expires when the
browser session ends. You can experiment by using setMaxAge( ) and observe
that the cookie is then saved on the client machine.
Session Tracking
HTTP is a stateless protocol. Each request is independent of the previous one.
However, in some applications, it is necessary to save state information so that
information can be collected from several interactions between a browser and a
server. Sessions provide such a mechanism.
A session can be created via the getSession() method
of HttpServletRequest. An HttpSession object is returned. This object can store
a set of bindings that associate names with objects. The setAttribute(),
getAttribute(), getAttributeNames(),and removeAttribute() methods
of HttpSession manage these bindings. Session state is shared by all servlets that
are associated with a client.
The following servlet illustrates how to use session state.
The getSession() method gets the current session. A new session is created if one
does not already exist. The getAttribute( ) method is called to obtain the object
that is bound to the name "date". That object is a Date object that encapsulates
the date and time when this page was last accessed. (Of course, there is no such
binding when the page is first accessed.) A Date object encapsulating the current
date and time is then created. The setAttribute( ) method is called to bind the
name "date" to this object.
import java.io.*; import java.util.*; import javax.servlet.*;
import javax.servlet.http.*;
public class DateServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Get the HttpSession object.
HttpSession hs = request.getSession(true);
//Get writer.
response.setContentType("text/html");
PrintWriter pw = response.getWriter(); pw.print("<B>");
//Display date/time of last access.
Date date = (Date)hs.getAttribute("date"); if(date != null) {
pw.print("Last access: " + date + "<br>");
}
// Display current date/time.
date = new Date(); hs.setAttribute("date", date);
pw.println("Current date: " + date);
}
}
When you first request this servlet, the browser displays one line with the current
date and time information. On subsequent invocations, two lines are displayed.
The first line shows the date and time when the servlet was last accessed. The
second line shows the current date and time.