Title: J2EE Servlets
1J2EE Servlets
- Ch. 10 (Architecture)
- Ch. 12 (21 Days)
2History of Interactive Web
- Applets
- Long download times
- Code on client machines (maintenance)
- CGI
- Custom code to interact with web server
- Security hole
- Resource hog for large sites
- Java Servlets
- Standard, easy interface to web server
- Security/authentication
- Implements sessions
3History (cont.)
- Early use of Servlets
- Simple, easy to use for web applications
- MVC all implemented in one big servlet
- Very complex
- Difficult to maintain
- Not scalable
- Current state of Servlet use
- Smaller is better.
- Used only for
- Gathering and validating data input from the user
- Coordinating output
- Minimal business logic
- Web page forwarding
4Servlet Features
- Tailored to interact with Web Server
- Server and platform independent
- Efficient and scalable
- Container provides additional functionality
- (i.e., authentication, cookies, etc.)
5Interacting with HTML Forms
- Get Request information from web server
- Simple
- http//www.byui.edu/j2ee?NameFredtel3565132
- Post Send data to the server
- Submit button, etc.
- Data is sent in body of message
- Safer than Get
6HTML Forms (Cont.)
- Put Place a file on the server
- Delete Remove a web page from server
7Servlet Class Diagram
8Servlet Life Cycle
init()
doGet(), doPost,
State Resident
ProcessingRequest
destroy()
9Servlet Sequence Diagram
Fig. 12-15
10Model 1 - Servlets only
Model/View/Control
Servlet
WebServer
Generate HTML
Data
11Servlets in the Enterprise
View/Control
Model
WebServer
EJBEntityBean
Servlet
Input Control Output
Data
12Example Servlet
publc class HtmlPage extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException
String name request.getParameter(name)
String telephone request.getParameter(tel)
response.setContentType(text/html)
. Business logic .
PrintWriter out response.getWriter()
out.println(ltHTMLgt)
out.println(ltHEADgtltTITLEgtFirst
Servletlt/TITLEgtlt/HEADgt)
out.println(ltBODYgt)
out.println(ltH1gtHello name , Telephone
telephone lt/H1gt)
out.println(lt/BODYgt)
out.println(lt/HTMLgt) public void
doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException
doGet(request, response)
13Model 2 Architecture
Model
View
Control
WebServer
Data Access ObjecsltltEntityEJBgtgt
Servlet
Business MethodsltltSessionEJBgtgt
input
Data
JSPpage
output
14Web Development Life CycleModel 2 Architecture
JSP
Servlet
Determine and call business function
Determine next view
Get request Parameters
Build view
15Web Development Life Cycle
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException String username
request.getParameter("username") String
password request.getParameter("password") tr
y InitialContext context new
InitialContext() BusinessRulesRemote
businessRules (BusinessRulesRemote)
context.lookup(BusinessRules.REMOTE_JNDI_NAME)
Long personId businessRules.login(username,passw
ord) catch (Exception e) e.printStackTrace
() HttpSession session
request.getSession() session.setAttribute("perso
nid", personId) RequestDispatcher dispatcher
request.getRequestDispatcher("index.jsp") disp
atcher.forward(request, response)
16Web Development Life CycleJSP page
ltdiv id"login"gt ltspan class'highlight'gtWelc
ome to Home Town Bank!lt/spangt ltbrgt
lta id'logout' href""gtLogoutlt/agt lt/divgt
17How to use HTTPServlet
Contains Request Info (Input)
Handles Response (Output)
18RequestResponse Interface
Forwarding a Response
19RequestResponse Interface
Including other Web Components
20Deployment of Servlets
- All Servlet files zipped together into a web
archive (war) file - Requires specific directory structure
- Deployment Descriptor (WSDL)
21Deployment Descriptor
lt?xml version1.0 encodingUTF-8?gtlt!DOCTYPE
web-app PUBLIC -//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN http//java.sun.co
m/dtd/web-app_2_3.dtdgtltweb-appgt
ltdisplay-namegtA Simple Applicationlt/display-namegt
ltservletgt ltservlet-namegtVerify
Datalt/servlet-namegt ltservlet-classgtVerif
yDatalt/servlet-classgt ltinit-paramgt
ltparam-namegtmaxValuelt/param-namegt
ltparam-valuegt25lt/param-valuegt
lt/init-paramgt lt/servletgt
ltservlet-mappinggt ltservlet-namegtVerify
Datalt/servlet-namegt lturl-patterngt/verify
datalt/url-patterngt lt/servlet-mappinggt
ltsession-configgt ltsession-timeoutgt30lt/se
ssion-timeoutgt lt/session-configgt
lterror-pagegt lterror-codegt404lt/error-code
gt ltlocationgt/error404.htmllt/locationgt
lt/error-pagegtlt/web-appgt
22Customizing Deployment
- Define initialization parameters
- Context parameters
- Apply to entire web application
- Servlet parameters
- Apply to a specific servlet
23Deployment Descriptor
lt?xml version1.0 encodingUTF-8?gtlt!DOCTYPE
web-app PUBLIC -//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN http//java.sun.co
m/dtd/web-app_2_3.dtdgtltweb-appgt
ltdisplay-namegtA Simple Applicationlt/display-namegt
ltcontext-paramgt
ltparam-namegtlocationlt/param-namegt
ltparam-valuegtBYU-Idaholt/param-valuegt
ltdescriptiongtSite Locationlt/descriptiongt
lt/context-paramgt ltservletgt
ltservlet-namegtVerify Datalt/servlet-namegt
ltservlet-classgtVerifyDatalt/servlet-classgt
ltinit-paramgt
ltparam-namegtmaxValuelt/param-namegt
ltparam-valuegt25lt/param-valuegt
lt/init-paramgt lt/servletgt
ltservlet-mappinggt ltservlet-namegtVerify
Datalt/servlet-namegt lturl-patterngt/verify
datalt/url-patterngt lt/servlet-mappinggt
ltsession-configgt ltsession-timeoutgt30lt/se
ssion-timeoutgt lt/session-configgt
lterror-pagegt lterror-codegt404lt/error-code
gt ltlocationgt/error404.htmllt/locationgt
lt/error-pagegtlt/web-appgt
Context Intialization Parameter
Servlet Intialization Parameter
24Retrieving Init. Parameters
public void init() throws ServletException
super.init() ServletContext context
this.getServletContext() String location
context.getInitParameter(location") if
(maxValue null) int maxValue
Integer.parseInt(this.getInitParameter(maxValue")
25Handling Errors
- HTTP Error Codes
- Http Status code set error code
- Error page set default error page
- Send Redirect redirect to another page
- Servlet Exceptions catch and handle all servlet
exceptions
26Set HTTP Status Code
- Sets the error status code on default error page
Import java.io.import javax.servlet.import
javax.servlet.http.publc class HtmlPage
extends HttpServlet public void
doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException
String name request.getParameter(name)
if (name.length() lt 1)
response.sendError(9001, Invalid name)
27Default HTTP Error Page
Deployment Descriptor
lt?xml version1.0 encodingUTF-8?gtltlt!DOCTYPE
web-app PUBLIC -//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN http//java.sun.co
m/dtd/web-app_2_3.dtdgtltweb-appgtltdisplay-namegtA
Simple Applicationlt/display-namegtltservletgt
ltservlet-namegtVerify datalt/servlet-namegt
ltservlet-classgtVerifyDatalt/servlet-classgt
ltinit-paramgt ltparam-namegtmaxValuelt/param
-namegt ltparam-valuegt25lt/param-valuegt
lt/init-paramgtlt/servletgt ltservlet-mappinggt
ltservlet-namegtverifyDatalt/servlet-namegt
lturl-patterngt/verifyDatalt/url-patterngtlt/serv
let-mappinggtltsession-configgt
ltsession-timeoutgt30lt/session-timeoutgtlt/session-co
nfiggtlterror-pagegt lterror-codegt9001lt/err
or-codegt ltlocationgt/error9001.htmllt/loca
tiongtlt/error-pagegtlt/web-appgt
28Send Redirect
- Redirect to another page to handle error
Import java.io.import javax.servlet.import
javax.servlet.http.publc class HtmlPage
extends HttpServlet public void
doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException
String name request.getParameter(name)
if (name.length() lt 1)
response.sendRedirect(/Servlets/invalidNamePage)
29Servlet Session Management
- Hidden fields in form
- Visible to client in source (not secure)
- Limited amount of data
- URL rewritting
- http//www.byui.edu/j2ee?sessionid9982345
- Cookies
- Store on client browser
- May be disabled by some users
- Server side session object
- Session info stored on Server
- Unlimited amount of space
- More secure
- Automatic management
30Creating Cookies
- Implement transactions with Cookies
- Store state data in Cookie
31Creating a Cookie
Import java.io.import javax.servlet.import
javax.servlet.http.publc class HtmlPage
extends HttpServlet public void
doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException try
Cookie cookie new
Cookie(userAddress, null)
String url this.getRequextURI()
cookie.addValue(url)
response.addCookie(cookie)
double quantity Double.parseDouble(request
.getParameter(quantity)) double
totalQuantity (Double) session.getAttribute(to
talQuantity) catch
(RemoteException remex)
response.sendError(response.SC_INTERNAL_SERVER_
ERROR)
32Retrieving a Cookie
publc class HtmlPage extends HttpServlet
String userUrl new UniqueID() public
void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException try
Cookie cookie null
Cookie cookies
response.getCookies() if
(cookies ! null)
for (int i0 i lt cookies.length i)
cookie
cookiesi if
(cookie.getName().equals(userAddress))
String urlAddress cookie.getValue()
break
catch
(RemoteException remex)
response.sendError(response.SC_INTERNAL_SERVER_
ERROR)
33Sessions
- Implement transactions with a HttpSession
- Retains state of data between page request
34Getting a Session
Import java.io.import javax.servlet.import
javax.servlet.http.publc class HtmlPage
extends HttpServlet public void
doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException try
HttpSession session
request.getSession() if
(session.isNew()) Long personId
(Long) session.getAttribute(personId)
double quantity
Double.parseDouble(request.getParameter(quantity
)) session.setAttribute(quantity
) catch (RemoteException
remex)
response.sendError(response.SC_INTERNAL_SERVER_ERR
OR)
35Filter Servlets
- Acts as preprocessor to request/response for
target servlet
HttpPage
VerifyData
36Filter Servlet
Import java.io.import javax.servlet.import
javax.servlet.http.publc class PageHits
extends HttpServlet implements Filter
private FilterConfig filterConfig null
public void init(FilterConfig filterConfig)
throws ServletException
this.filterConfig filterConfig
public void destroy(
this.filterConfig null
37Filter Servlet (cont.)
public void doFilter(HttpServletRequest
request, HttpServletResponse response,
FilterChain chain)
throws IOException, ServletException
if (filterConfig null) return
synchronized (this)
Integer counter (Integer) filterConfig.getServlet
Context().getAttribute("Counter")
if (counter null) counter
new Integer(0) counter new
Integer(counter.intValue()1)
filterConfig.getServletContext().log("Number of
hits is " counter)
filterConfig.getServletContext().setAttribute("Cou
nter", counter)
chain.doFilter(req, resp)
38Modify Deployment Descriptor
lt?xml version1.0 encodingUTF-8?gtltlt!DOCTYPE
web-app PUBLIC -//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN http//java.sun.co
m/dtd/web-app_2_3.dtdgtltweb-appgt
ltdisplay-namegtA Simple Applicationlt/display-namegt
ltservletgt ltservlet-namegtVerifyDatalt
/servlet-namegt ltservlet-classgtVerifyData
lt/servlet-classgt ltinit-paramgt
ltparam-namegtmaxValuelt/param-namegt
ltparam-valuegt25lt/param-valuegt
lt/init-paramgt lt/servletgt
ltservlet-mappinggt ltservlet-namegtVerify
Datalt/servlet-namegt lturl-patterngt/verify
Data/lt/url-patterngt lt/servlet-mappinggt
ltfiltergt ltfilter-namegtPage
Hitslt/filter-namegt ltdisplay-namegtPage
Hitslt/display-namegt ltdescriptiongtCount
page hitsltdescriptiongt
ltfilter-classgtPageHitslt/filter-classgt
lt/filtergt ltfilter-mappinggt
ltfilter-namegtPageHitslt/filter-namegt
ltservlet-namegtVerifyDatalt/servlet-namegt
lt/filter-mappinggt lt/web-appgt
39Listener Servlet
- Servlet is automatically executed when some
external event occurs
HTTPSessionActivationListener Session is activated/passivated
HTTPSessionAttributeListener Session attribute is added/removed
HTTPSessionListener Session attribute is created/destroyed
HTTPSessionContextAttributeListener Servlet contextattribute is added/removed
HTTPSessionContextListener Servlet context changes
40Create Listener Servlet
Import java.io.import javax.servlet.import
javax.servlet.http.publc class Listener
extends HttpServlet implements ServletContextListe
ner private ServletContext context
null public void contextIntialized(ServletC
ontextEvent event) context
event.getServerContext() Integer
counter new Integer(0)
context.setAttribute(Counter, counter)
context.log(Created Counter)
public void contextDestroyed(ServletContextEvent
event) event.getServletContext(
).removeAttribute(Counter)
41Modify Deployment Descriptor
lt?xml version1.0 encodingUTF-8?gtltlt!DOCTYPE
web-app PUBLIC -//Sun Microsystems, Inc.//DTD
Web Application 2.3//EN http//java.sun.co
m/dtd/web-app_2_3.dtdgtltweb-appgt
ltdisplay-namegtA Simple Applicationlt/display-namegt
ltservletgt ltservlet-namegtVerify
datalt/servlet-namegt ltservlet-classgtVerif
yDatalt/servlet-classgt ltinit-paramgt
ltparam-namegtmaxValuelt/param-namegt
ltparam-valuegt25lt/param-valuegt
lt/init-paramgt lt/servletgt
ltservlet-mappinggt ltservlet-namegtVerify
Datalt/servlet-namegt lturl-patterngt/verify
Data/lt/url-patterngt lt/servlet-mappinggt
ltfiltergt ltfilter-namegtPage
Hitslt/filter-namegt ltdisplay-namegtPage
Hitslt/display-namegt ltdescriptiongtCount
page hitsdescriptiongt
ltfilter-classgtPageHitslt/filter-classgt
lt/filtergt ltfilter-mappinggt
ltfilter-namegtPageHitslt/filter-namegt
ltservlet-namegtVerify datalt/servlet-namegt
lt/filter-mappinggt ltlistenergt lt
listener-classgtListenerlt/ listener -classgt
lt/listenergtlt/web-appgt
42Modify Filter Servlet
public void doFilter(HttpServletRequest
request, HttpServletResponse response,
FilterChain chain)
throws IOException, ServletException
if (filterConfig null)
return synchronized (this)
Integer counter (
Integer) filterConfig.getServletContext().getAttri
bute(Counter) if (counter
null) counter new
Integer(1) counter new
Integer(counter.intValue()1)
filterConfig.getServletContext().log(Number of
hits is counter)
filterConfig.getServletContext().setAttribute(Cou
nter, counter) counter)
chain.doFilter(request, response)
43Modified Filter Servlet
public void doFilter(HttpServletRequest
request, HttpServletResponse response,
FilterChain chain)
throws IOException, ServletException
if (filterConfig null)
return synchronized (this)
Integer counter (
Integer) filterConfig.getServletContext().getAttri
bute(Counter) counter
new Integer(counter.intValue()1)
filterConfig.getServletContext().log(Number
of hits is counter)
filterConfig.getServletContext().setAttribute(Cou
nter, counter) counter)
chain.doFilter(request, response)