A servlet is an extension to a server that enhances the server's functionality. The most common use for a servlet is to extend a web server by providing dynamic web content. Web servers display documents written in HyperText Markup Language (HTML) and respond to user requests using the HyperText Transfer Protocol (HTTP). HTTP is the protocol for moving hypertext files across the internet. HTML documents contain text that has been marked up for interpretation by an HTML browser such as Netscape.
Servlets are easy to write. All you need is Tomcat, which is the combined Java Server Pages 1.1 and Servlets 2.2 reference implementation. You can download a free copy of Tomcat.
This lesson shows you how to create a very simple form that invokes a basic servlet to process end user data entered on the form.
A browser accepts end user input through an HTML form. The simple form used in this lesson has one text input field for the end user to enter text and a Submit button. When the end user clicks the Submit button, the simple servlet is invoked to process the end user input.
In this example, the simple servlet returns an HTML page that displays the text entered by the end user.
The HTML form is embedded in this HTML file. The diagram shows how the HTML page looks when it is opened in a browser.
The HTML file and form are similar to the simple application and applet examples in Lesson 4 so you can compare the code and learn how servlets, applets, and applications handle end user inputs.
When the user clicks the Click Me
button, the servlet gets the entered text, and returns an HTML page with the text.
The HTML page returned to the browser by the ExampServlet.java servlet is shown below. The servlet code to retrieve the user's input and generate the HTML page follows with a discussion.
Note: To run the example, you have to put the servlet and HTML
files in the correct directories for the Web server you are using. For example, with Java WebServer 1.1.1, you place the servlet in the ~/JavaWebServer1.1.1/servlets
and the HTML
file in the ~/JavaWebServer1.1.1/public_html
directory.
ExampServlet.java builds an HTML page to return to the end user. This means the servlet code does not use any Project Swing or Abstract Window Toolkit (AWT) components or have event handling code. For this simple servlet, you only need to import these packages:
java.io
for system input and output. The HttpServlet
class uses the IOException
class in this package to signal that an input or output exception of some kind has occurred.
javax.servlet
, which contains generic (protocol-independent) servlet classes. The HttpServlet
class uses the ServletException
class in this package to indicate a servlet problem.
javax.servlet.http
, which contains HTTP servlet classes. The HttpServlet
class is in this package.import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ExampServlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<title>Example</title>" +
"<body bgcolor=FFFFFF>");
out.println("<h2>Button Clicked</h2>");
String DATA = request.getParameter("DATA");
if(DATA != null){
out.println(DATA);
} else {
out.println("No text entered.");
}
out.println("<P>Return to
<A HREF="../simpleHTML.html">Form</A>");
out.close();
}
}
All servlet classes extend the HttpServlet
abstract class. HttpServlet
simplifies writing HTTP servlets by providing a framework for handling the HTTP protocol. Because HttpServlet
is abstract
, your servlet class must extend it and override at least one of its methods. An abstract
class is a class that contains unimplemented methods and cannot be instantiated itself.
public class ExampServlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
The ExampServlet
class is declared public
so the web server that runs the servlet, which is not local to the servlet, can access it.
The ExampServlet
class defines a doPost
method with the same name, return type, and parameter list as the doPost
method in the HttpServlet
class. By doing this, the ExampServlet
class overrides and implements the doPost
method in the HttpServlet
class.
The doPost
method performs the HTTP POST
operation, which is the type of operation specified in the HTML form used for this example. The other possibility is the HTTP GET
operation, in which case you would implement the doGet
method instead.
In short, POST
requests are for sending any amount of data directly over the connection without changing the URL, and GET
requests are for getting limited amounts of information appended to the URL. POST
requests cannot be bookmarked or emailed and do not change the Uniform Resource Locators (URL) of the response. GET
requests can be bookmarked and emailed and add information to the URL of the response.
The parameter list for the doPost
method takes a request
and a response
object. The browser sends a request to the servlet and the servlet sends a response back to the browser.
The doPost
method implementation accesses information in the request
object to find out who made the request, what form the request data is in, and which HTTP headers were sent, and uses the response
object to create an HTML page in response to the browser's request.
doPost
IOException
ServletException
HttpServlet
The first part of the doPost
method uses the response
object to create an HTML page. It first sets the response content type to be text/html
, then gets a PrintWriter
object for formatted text output.
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<title>Example</title>" +
"<body bgcolor=#FFFFFF>");
out.println("<h2>Button Clicked</h2>");
The next line uses the request
object to get the data from the text field on the form and store it in the DATA
variable. The getparameter
method gets the named parameter, returns null
if the parameter was not set, and an empty string if the parameter was sent without a value.
String DATA = request.getParameter("DATA");
The next part of the doPost
method gets the data out of the DATA
parameter and passes it to the response
object to add to the HTML response page.
if(DATA != null){
out.println(DATA);
} else {
out.println("No text entered.");
}
The last part of the doPost
method creates a link to take the end user from the HTML response page back to the original form, and closes the response.
out.println("<P>Return to
<A HREF="../simpleHTML.html">Form</A>");
out.close();
}
Note: To learn how to use the other methods available in the HttpServlet
, HttpServletRequest
, and HttpServletResponse
classes, see The Java Tutorial trail on Servlets.
You can find more information on servlets in The Java Tutorial.