This chapter acts as a Servlet tutorial. You will learn how to use
important techniques for Servlet development by writing some
typical Servlets, ranging from very simple to rather complex.
All examples in this chapter are fully functional and complete
Servlets which have been successfully compiled and run.
This section shows how to
- use the framework that makes up a simple Servlet
- write a Servlet that provides static content (i.e. it produces
the same output every time it is called by a client)
We start our venture into Servlet programming with the well-known
"Hello World" example, this time named more suitably "Hello Client":
1: import java.io.*;
2: import javax.servlet.*;
3: import javax.servlet.http.*;
4:
5: public class HelloClientServlet extends HttpServlet
6: {
7: protected void doGet(HttpServletRequest req,
8: HttpServletResponse res)
9: throws ServletException, IOException
10: {
11: res.setContentType("text/html");
12: PrintWriter out = res.getWriter();
13: out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+
14: "</HEAD><BODY>Hello Client!</BODY></HTML>");
15: out.close();
16: }
17:
18: public String getServletInfo()
19: {
20: return "HelloClientServlet 1.0 by Stefan Zeiger";
21: }
22: }
When you compile this Servlet and
run it by requesting a URL which is assigned
to it in a Web Browser it produces the following output:
Let's have a look at how the Servlet works.
-
Lines 1 to 3 import some packages which contain many classes
which are used by the Servlet (almost every Servlet
needs classes from these packages).
1: import java.io.*;
2: import javax.servlet.*;
3: import javax.servlet.http.*;
-
The Servlet class is declared in line 5. Our Servlet extends
javax.servlet.http.HttpServlet
, the standard base class
for HTTP Servlets.
5: public class HelloClientServlet extends HttpServlet
-
In lines 7 through 16 HttpServlet
's doGet
method is getting overridden.
7: protected void doGet(HttpServletRequest req,
8: HttpServletResponse res)
9: throws ServletException, IOException
10: {
...
16: }
-
In line 11 we use a method of the HttpServletResponse
object to set the content type of the response that we are going to
send. All response headers must be set before a
PrintWriter
or ServletOutputStream
is requested to write body data to the response.
11: res.setContentType("text/html");
-
In line 12 we request a PrintWriter
object to write
text to the response message.
12: PrintWriter out = res.getWriter();
[API 2.0]
ServletResponse.getWriter()
is a new feature of
JSDK version 2.0. If your Servlet engine does not support
JSDK 2.0 you can replace the above line by
"
ServletOutputStream out = res.getOutputStream();
".
This change can be made in most of the example Servlets in this
tutorial. The advantages of using
ServletResponse.getWriter()
are discussed in
section
4.4.
-
In lines 13 and 14 we use the PrintWriter
to write
the text of type text/html (as specified through the
content type).
13: out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+
14: "</HEAD><BODY>Hello Client!</BODY></HTML>");
-
The PrintWriter
gets closed in line 15 when we are
finished writing to it.
15: out.close();
This line is included for completeness. It is not strictly
necessary. The Web Server closes the PrintWriter
or
ServletOutputStream
automatically when a
service
call returns. An explicit call to
close()
is useful when you want to do some
post-processing after the response to the client has been
fully written. Calling close()
tells the Web
Server that the response is finished and the connection to
the client may be closed as well.
-
In lines 18 through 21 we override the getServletInfo()
method which is supposed to return information about the Servlet,
e.g. the Servlet name, version, author and copyright notice.
This is not required for the function of the
HelloClientServlet
but can provide valuable
information to the user of a Servlet who sees the returned text
in the administration tool of the Web Server.
18: public String getServletInfo()
19: {
20: return "HelloClientServlet 1.0 by Stefan Zeiger";
21: }