02 Servlet Basics

Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

© 2011 Marty Hall

S
Servlet
l t Basics
B i
Originals of Slides and Source Code for Examples:
http://courses.coreservlets.com/Course-Materials/csajsp2.html

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
2 Developed and taught by well-known author and developer. At public venues or onsite at your location.

© 2011 Marty Hall

For live Java EE training, please see training courses


at http://courses.coreservlets.com/.
http://courses coreservlets com/
Servlets, JSP, JSF 2, Ajax (with jQuery, Dojo, Prototype, Ext-JS, etc.),
GWT, Java 6, SOAP-based and RESTful Web Services, Spring,
Hibernate/JPA Android
Hibernate/JPA, Android, and customized combinations of topics
topics.

Taught by the author of Core Servlets and JSP, More


Servlets and JSP, JSP and this tutorial. tutorial Available at public
venues,Customized
or customized versions
Java EE Training: can be held on-site at your
http://courses.coreservlets.com/
organization. Contact [email protected] for details.
Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
Developed and taught by well-known author and developer. At public venues or onsite at your location.
Agenda
• The basic structure of servlets
• A simple servlet that generates plain text
• A servlet that generates HTML
• Using helper classes
• Giving URLs to servlets
– @WebServlet annotation
– web.xml file
• The servlet life cycle
• Servlet debugging strategies

© 2011 Marty Hall

Overview

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
5 Developed and taught by well-known author and developer. At public venues or onsite at your location.
A Servlet’s Job
• Read explicit data sent by client (form data)
• Read implicit data sent by client
(request headers)
• Generate
G t the
th resultslt
• Send the explicit data back to client (HTML)
• Send
S d the
th implicit
i li it data
d t to
t client
li t
(status codes and response headers)

© 2011 Marty Hall

Simple Servlets

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
7 Developed and taught by well-known author and developer. At public venues or onsite at your location.
A Servlet That Generates Plain
Text (HelloWorld
(HelloWorld.java)
java)
package testPackage; // Always use packages.
import java
java.io.
io *;
;
import javax.servlet.*;
import javax.servlet.annotation.*;
import
p javax.servlet.http.*;
j p

@WebServlet("/hello")
public class HelloWorld extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
th
throws S
ServletException,
l tE ti IOE
IOException
ti {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
URL assumes you have deployed from a project named “test-app”. Code can be downloaded from
Web site. General form is http://hostName/appName/address-from-WebServlet-annotation.
8 Review previous tutorial section for info on how to deploy the app from Eclipse.

Interpreting HelloWorld Servlet


• @WebServlet("/address")
– This is the URL relative to the app name. More later.
• doGet
– Code
C d for
f an HTTP GET request.
t doPost
d P t also
l common.
• HttpServletRequest
– Contains anything that comes from the browser
• HttpServletResponse
– Used to send stuff to the browser. Most common is
getWriter for a PrintWriter that points at browser.
• @Override
– General best practice when overriding inherited methods
• But, I will omit on many of my PowerPoint slides to
9 conserve space. Downloadable source has @Override.
A Servlet That Generates HTML
• Tell the browser that you’re sending it HTML
– response.setContentType("text/html");
• Modify the println statements to build a
legal Web page
– Print statements should output HTML tags
• Check your HTML with a formal syntax
validator
– http://validator.w3.org/
p g
– http://www.htmlhelp.com/tools/validator/

Caveat: As of 2010, it has become moderately conventional to use the HTML 5 DOCTYPE: <!DOCTYPE html>. Even though few browsers have full support for HTML 5, this
declaration is supported in practice by virtually all browsers. So, most validators will give some warnings or errors, and you have to search for the “real” errors in the list, or use a
different declaration. My examples use a mix of this doc type, the formal HTML 4 doc type, and the formal xhtml doc type.
10

A Servlet That Generates HTML


(Code)
@WebServlet("/test1")
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println
("<!DOCTYPE html>\n" +
"<html>\n" +
ead t t e
"<head><title>A Test
est Se
Servlet</title></head>\n"
et /t t e / ead \ +
"<body bgcolor=\"#fdf5e6\">\n" +
"<h1>Test</h1>\n" +
p p
"<p>Simple servlet for testing.</p>\n"
g /p \ +
"</body></html>");
}
11 }
A Servlet That Generates HTML
(Result)

Assumes project is named test-app.

Eclipse users can use the TestServlet code as a basis for their own servlets.
Avoid usingg “New  Servlet” in Eclipse
p since it results in ugly
g y code.

12

© 2011 Marty Hall

Using Helper Classes

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
13 Developed and taught by well-known author and developer. At public venues or onsite at your location.
Idea
• All Java code goes in the same place
– In Eclipse, it is src/packageName
• It does not matter if code is for a servlet, helper class,
filter,, bean,, custom tag
g class,, or anything
y g else
• Don’t forget OOP principles
– If you find you are doing the same logic multiple times,
put the logic in a helper class and reuse it
• Simple example here
– Generates HTML.
HTML Building
B ilding HTML from a helper class is
probably not really worth it for real projects, but we
haven’t covered logic in servlets yet. But the general
principle still holds: if you are doing the same thing in
several servlets, move the code into shared helper class.
14

A Simple HTML-Building Utility


public class ServletUtilities {
public static String headWithTitle(String title) {
return("<!DOCTYPE html>\n" +
"<html>\n" +
)
"<head><title>" + title + "</title></head>\n");
}
...
}
• Don’t go overboard
– Complete HTML generation packages
usually work poorly
• The JSP framework is a better solution
– More important
p is to avoid repeating
p g logic.
g
ServletUtilities has a few methods for that, as will
be seen later
15
TestServlet2
...

@WebServlet("/test-with-utils")
public class TestServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request
request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Test Servlet with Utilities";
out.println
(ServletUtilities headWithTitle(title) +
(ServletUtilities.headWithTitle(title)
"<body bgcolor=\"#fdf5e6\">\n" +
"<h1>" + title + "</h1>\n" +
"<p>Simple servlet for testing.</p>\n" +
"</body></html>");
/ /
}
}
16

TestServlet2: Result

Assumes project is named test-app.

17
© 2011 Marty Hall

Custom URLs
and web.xml

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
18 Developed and taught by well-known author and developer. At public venues or onsite at your location.

Tomcat 7 or Other Servlet 3.0


Containers
• Give address with @WebServlet
@WebServlet("/my-address")
public class MyServlet extends HttpServlet { … }

– Resulting URL
• http://hostName/appName/my-address

• Omit web.xml entirely


– You are permitted to use web.xml
web xml even when using
@WebServlet, but the entire file is completely optional.
• In earlier versions, you must have a web.xml file even if
th
there were no tags
t other
th than
th the
th main
i start
t t and d end
d tags
t
(<web-app …> and </web-app>).
19
Example: URLs with
@WebServlet
package testPackage;

@WebServlet("/test1")
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response
response.getWriter();
getWriter();
out.println
("<!DOCTYPE html>\n" +
…);
}
}

20

Defining Custom URLs in


web xml (Servlets 2
web.xml 2.5
5 & Earlier)
• Java code
package myPackage; ...
public class MyServlet extends HttpServlet { ... }
• web.xml entry (in <web-app...>...</web-app>)
– Give
Gi name to
t servlet
l t
<servlet>
<servlet-name>MyName</servlet-name>
<servlet class>myPackage MyServlet</servlet class>
<servlet-class>myPackage.MyServlet</servlet-class>
</servlet>
– Give address (URL mapping) to servlet
<servlet-mapping>
<servlet-name>MyName</servlet-name>
<url-pattern>/my-address</url-pattern>
</servlet-mapping>
pp g
• Resultant URL
– http://hostname/appName/my-address
21
Defining Custom URLs: Example
<?xml version="1.0" encoding="UTF-8"?> Don't edit this manually.
Should match version supported
<web-app
<web app version="2
version 2.44" by your server.
server If your server
supports 3.0, can omit web.xml
... > totally and use annotations.

<!-- Use the URL http://hostName/appName/test2


p pp for
testPackage.TestServlet -->
<servlet> Fully qualified classname.
<servlet-name>Test</servlet-name>
<servlet-class>testPackage.TestServlet</servlet-class>
</servlet> Any arbitrary name.
<servlet-mapping> But must be the same both times.

<
<servlet-name>Test</servlet-name>
l t >T t</ l t >
<url-pattern>/test2</url-pattern>
</servlet-mapping>
The part of the URL that comes after the app (project) name.
</web-app> Should start with a slash.

22

Defining Custom URLs: Result

• Eclipse details
– Name off Eclipse
li project
j isi “test-app”
– Servlet is in src/testPackage/TestServlet.java
– Deployed by right-clicking on Tomcat,
Tomcat Add and Remove
Projects, Add, choosing test-app project, Finish,
23
right-clicking again, Start (or Restart)
© 2011 Marty Hall

Advanced Topics

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
24 Developed and taught by well-known author and developer. At public venues or onsite at your location.

The Servlet Life Cycle


• init
– Executed once when the servlet is first loaded.
Not called for each request.
• service
– Called in a new thread by server for each request.
Dispatches
p to doGet, doPost, etc.
Do not override this method!
• doGet, doPost, doBlah
–HHandles
dl GET,
GET POST,
POST etc. requests.
– Override these to provide desired behavior.
• destroy
– Called when server deletes servlet instance.
25 Not called after each request.
Why You Should
Not Override service
• The service method does other things
g
besides just calling doGet
– You can add support for other services later by adding
d P t doTrace,
doPut, d T etc.
t
– You can add support for modification dates by adding a
ggetLastModified method
– The service method gives you automatic support for:
• HEAD requests
• OPTIONS requests
• TRACE requests
• Alternative: have doPost call doGet

26

Debugging Servlets
• Use print statements; run server on desktop
• Use Apache Log4J
• Integrated debugger in IDE
– Right-click in left margin in source to set breakpoint (Eclipse)
– R
R-click
click Tomcat and use “Debug”
Debug instead of “Start”
Start
• Look at the HTML source
• Return error pages to the client
– Plan ahead for missingg or malformed data
• Use the log file
– log("message") or log("message", Throwable)
• Separate
p the request
q and response
p data.
– Request: see EchoServer at www.coreservlets.com
– Response: see WebClient at www.coreservlets.com
• Make sure browser is not caching
– Internet Explorer: use Shift-RELOAD
– Firefox: use Control-RELOAD
27
• Stop and restart the server
© 2011 Marty Hall

Wrap-Up

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
28 Developed and taught by well-known author and developer. At public venues or onsite at your location.

Summary
• Main servlet code goes in doGet or doPost:
– The HttpServletRequest contains the incoming
information
– The HttpServletResponse lets you set outgoing
information
• Call setContentType to specify MIME type
• Call
C ll getWriter
tW it tot obtain
bt i a Writer
W it pointing
i ti tto client
li t (browser)
(b )
• Make sure output is legal HTML
• Give address with @WebServlet or web.xml
@WebServlet("/some-address")
public class SomeServlet extends HttpServlet { … }

• Resulting URL
– http://hostName/appName/some-address
29
© 2011 Marty Hall

Questions?

Customized Java EE Training: http://courses.coreservlets.com/


Servlets, JSP, JSF 2.0, Java 6, Ajax, jQuery, GWT, Spring, Hibernate, RESTful Web Services, Android.
30 Developed and taught by well-known author and developer. At public venues or onsite at your location.

You might also like