Title: Servlets: Building Your First Servlet
1ServletsBuilding Your First Servlet
- Ethan Cerami
- New York University
2Road Map
- Generic Template for Creating Servlets
- Servlet 2.2 API
- Hello World Examples
- Outputting Text, HTML, and the current time.
- Compiling your own Servlets
- Instructions for installing/compiling servlets on
I5 - Packaging Servlets
- HTML Utilities
3Generic Servlet Template
4Servlet Template
- First, lets take a look at a generic servlet
template. - The code does not actually do anything, but all
your future servlets will follow this general
structure. - The most important pieces are noted in yellow.
5import java.io. import javax.servlet. import
javax.servlet.http. public class
ServletTemplate 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
status // code and headers (e.g. the content
type, cookies). PrintWriter out
response.getWriter() // Use "out" to send
content to browser
6Generic Template
- Import the Servlet API
- import javax.servlet.
- import javax.servlet.http.
- To create servlets, you must remember to always
use these two import statements.
7Generic Template
- All your servlets must extend HTTPServlet.
- HTTPServlet represents the base class for
creating Servlets within the Servlet API. - The Full Servlet API is available at
- http//www.java.sun.com/products/servlet/2.2/javad
oc/index.html - Once you have extended HTTPServlet, you must
override one or both - doGet() to capture HTTP Get Requests
- doPost() to capture HTTP Post Requests
8doGet and doPost
- The doGet() and doPost() methods each take two
parameters - HTTPServletRequest encapsulates all information
regarding the browser request. - Form data, client host name, HTTP request
headers. - HTTPServletResponse encapsulate all information
regarding the servlet response. - HTTP Return status, outgoing cookies, HTML
response. - If you want the same servlet to handle both GET
and POST, you can have doGet call doPost or vice
versa.
9Getting an OutputStream
- The HTTPResponse object has a getWriter() method.
- This method returns a java.io.PrintWriter object
for writing data out to the Web Browser. - PrintWriter out response.getWriter()
10Hello World!
11Hello World!
- We are finally ready to see our first real
servlet. - This servlet outputs Hello World! as plain
text, not HTML. - Note All examples are available on the web
site. - Lets take a look at the code, and then see the
servlet in action.
12import 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")
13Output Stream
- Once you have an OutputStream object, you just
call the println() method to output to the
browser. - Anything you print will display directly within
the web browser. - As we will now see, you can also output any HTML
tags.
14Generating HTML
- To generate HTML, you need to add two steps
- Tell the browser that you are sending back HTML.
- Modify the println() statements to return valid
HTML.
15HelloWWW.java
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") PrintWrite
r out response.getWriter() out.println("ltHTMLgt
\n" "ltHEADgtltTITLEgtHello
WWWlt/TITLEgtlt/HEADgt\n"
"ltBODYgt\n" "ltH1gtHello
WWWlt/H1gt\n" "lt/BODYgtlt/HTMLgt")
16Generating HTML
- To return HTML, you must set the content MIME
type to text/html - response.setContentType("text/html")
- Remember that you must set the content type
before you output any content. - Once you have set the MIME type, you can return
any HTML document you want.
17Time Servlet
- Lets try one more simple servlet
- Using the java.util.Date object, you can obtain
the current time. - Lets create a simple Servlet that outputs the
current time.
18import java.io. import java.util. import
javax.servlet. import javax.servlet.http. pub
lic class TimeServlet extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
response.setContentType("text/html") Date
now new Date() PrintWriter out
response.getWriter() out.println("ltHTMLgt\n"
"ltHEADgtltTITLEgtHello
WWWlt/TITLEgtlt/HEADgt\n"
"ltBODYgt\n" "ltH1gtHello
WWWlt/H1gt\n" "ltH2gtTime is now
"now"lt/H2gt" "lt/BODYgtlt/HTMLgt")
19Installing / Compiling Servlets
20Basic Setup
- I5 now has the Jakarta-Tomcat Servlet Engine
installed. - Tomcat is an open source servlet engine.
- Supports both Servlets and JSPs.
- Maintained by the same group that develops the
Apache Web Server.
21Tomcat Set-up
Send request to port 9712
Web Browser
Tomcat Servlet Engine
Hello World Servlet
22Getting Started
- Lets take a look at todays handout.
- Handout is also available online at
- http//ecerami.com/applied_fall_2001/handouts/i5_s
ervlets.php4 - Change to handout
- CLASSPATH"/usr/local/jakarta-tomcat-3.2.3/lib/ser
vlet.jar."
Add . to Classpath!
23Packaging Servlets
24What is a Package?
- Package Group of related classes.
- For example
- package coreservlets
- In real web sites, multiple programmers may be
creating multiple servlets. - By dividing your code base into packages, it
helps to modularize the code. - A very common practice in the real world, and
used throughout our textbook.
25Creating Packages
- To create your own package, you need to follow
three steps - Move your .java files to a subdirectory that
matches your package name. - For example, the text book uses the package name
coreservlets. - You therefore need to create a coreservlets
directory within /public_html/tomcat/WEB-INF/clas
ses and place your code here.
26Creating Packages
- Insert a package statement in the first line of
your class file - For example package coreservlets
- Compile your Java code like this
- type servlets
- type javac coreservlets/HelloWWW2.java
27package coreservlets import java.io. import
javax.servlet. import javax.servlet.http. pub
lic class HelloWWW2 extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println("ltHTMLgt\n"
"ltHEADgtltTITLEgtHello WWWlt/TITLEgtlt/HEADgt\n"
"ltBODYgt\n" "ltH1gtHello
WWWlt/H1gt\n" "ltH2gtThis is a
servlet within a package.lt/H2gt"
"lt/BODYgtlt/HTMLgt")
28Invoking a Packaged Servlet
- To invoke a packaged servlet, you need to specify
the package name and the servlet name - http//host/servlet/packageName.servletName
- For example, to access the HelloWWW2 servlet on
ecerami.com - http//ecerami.com/servlet/coreservlets.HelloWWW2
- To access the servlet on I5
- http//i5.nyu.edu9712/eqc3844/servlet/coreservlet
s.HelloWWW2
29HTML Utilities
30Servlet Utilities
- Author of our text book has created a class
called ServletUtilities. - This class contains some simple HTML utilities
that you can use. - As we read further in the book, the author adds
more utilities to this class. - Lets first examine the ServletUtilities class,
and then examine how to use it.
31ServletUtilities.java
- For now, let us examine just one method
headWithTitle(). - This method outputs
- HTML DOCTYPE, used to specify which version of
HTML we are using. - The title of the page via the HTML ltTITLEgt tag.
32package coreservlets import javax.servlet. impo
rt javax.servlet.http. / Some simple time
savers. Note that most are static
methods. / public class ServletUtilities
public static final String DOCTYPE
"lt!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "
"Transitional//EN\"gt" public static
String headWithTitle(String title)
return(DOCTYPE "\n" "ltHTMLgt\n"
"ltHEADgtltTITLEgt" title
"lt/TITLEgtlt/HEADgt\n") ...
33Using Servlet Utilities
- To use the Servlet Utilities class, you just need
to call the headWithTitle() method - ServletUtilities.headWithTitle("Hello WWW")
- If you are placing your servlet in a different
package, you also need to import coreservlets
34package coreservlets import java.io. import
javax.servlet. import javax.servlet.http. pub
lic class HelloWWW3 extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
response.setContentType("text/html")
PrintWriter out response.getWriter()
out.println(ServletUtilities.headWithTitle("Hello
WWW") "ltBODYgt\n"
"ltH1gtHello WWWlt/H1gt\n"
"lt/BODYgtlt/HTMLgt")
35Compiling
- To compile this servlet
- Download ServletUtilities.java and copy to your
coreservlets directory. - Download HelloWorldWWW3.java and copy to your
coreservlets directory. - Type
- javac coreservlets/HelloWWW3.java
- Then, open browser and go to
- http//i5.nyu.edu9712/NET-ID/servlet/coreservle
ts.HelloWWW3