J2EE Servlets

43
J2EE Servlets J2EE Servlets Ch. 10 (Architecture) Ch. 10 (Architecture) Ch. 12 (21 Days) Ch. 12 (21 Days)

description

J2EE Servlets. Ch. 10 (Architecture) Ch. 12 (21 Days). History 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 - PowerPoint PPT Presentation

Transcript of J2EE Servlets

Page 1: J2EE Servlets

J2EE ServletsJ2EE Servlets

Ch. 10 (Architecture)Ch. 10 (Architecture)

Ch. 12 (21 Days)Ch. 12 (21 Days)

Page 2: J2EE Servlets

History of Interactive WebHistory of Interactive Web AppletsApplets

Long download timesLong download times Code on client machines (maintenance)Code on client machines (maintenance)

CGICGI Custom code to interact with web serverCustom code to interact with web server Security holeSecurity hole Resource hog for large sitesResource hog for large sites

Java ServletsJava Servlets Standard, easy interface to web serverStandard, easy interface to web server Security/authenticationSecurity/authentication Implements sessionsImplements sessions

Page 3: J2EE Servlets

History (cont.)History (cont.) Early use of ServletsEarly use of Servlets

Simple, easy to use for web applicationsSimple, easy to use for web applications MVC all implemented in one big servletMVC all implemented in one big servlet

• Very complexVery complex• Difficult to maintainDifficult to maintain• Not scalableNot scalable

Current state of Servlet useCurrent state of Servlet use Smaller is better. Smaller is better. Used only for:Used only for:

• Gathering and validating data input from the userGathering and validating data input from the user• Coordinating outputCoordinating output• Minimal business logicMinimal business logic• Web page forwardingWeb page forwarding

Page 4: J2EE Servlets

Servlet FeaturesServlet Features

Tailored to interact with Web ServerTailored to interact with Web Server Server and platform independentServer and platform independent Efficient and scalableEfficient and scalable Container provides additional functionalityContainer provides additional functionality

(i.e., authentication, cookies, etc.)(i.e., authentication, cookies, etc.)

Page 5: J2EE Servlets

Interacting with HTML FormsInteracting with HTML Forms

Get – Request information from web Get – Request information from web serverserver SimpleSimple

http://www.byui.edu/j2ee?Name=Fred+&tel=3565132http://www.byui.edu/j2ee?Name=Fred+&tel=3565132

Post – Send data to the serverPost – Send data to the server Submit button, etc.Submit button, etc. Data is sent in body of messageData is sent in body of message Safer than GetSafer than Get

Page 6: J2EE Servlets

HTML Forms (Cont.)HTML Forms (Cont.)

Put – Place a file on the serverPut – Place a file on the server

Delete – Remove a web page from serverDelete – Remove a web page from server

Page 7: J2EE Servlets

Servlet Class DiagramServlet Class DiagramClass Diagram

Page 8: J2EE Servlets

Servlet Life CycleServlet Life Cycle

Class Diagram

State: Resident ProcessingRequest

START

END

init()

doGet(), doPost, …

destroy()

Page 9: J2EE Servlets

Servlet Sequence DiagramServlet Sequence Diagram

Fig. 12-15

Page 10: J2EE Servlets

Model 1 - Servlets onlyModel 1 - Servlets only

Model/View/Control

Servlet

WebServer

Database

doGet/doPost

webpageGenerate

HTML

submit

Data

Page 11: J2EE Servlets

Servlets in the EnterpriseServlets in the Enterprise

ModelView/Control

EJBEntityBeanWebServer

ServletInput

Control

Output

doGet/doPost

webpage

submit

Data

Performance and

Flexibility Issues

Page 12: J2EE Servlets

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(“<HTML>”); out.println(“<HEAD><TITLE>First Servlet</TITLE></HEAD>”); out.println(“<BODY>”); out.println(“<H1>Hello “ + name + “, Telephone “ + telephone + “</H1>”); out.println(“</BODY>”); out.println(“</HTML>”); }

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); }

}

Example ServletExample Servlet

Get value of form parameters

Sent output to web browser

Page 13: J2EE Servlets

Model 2 ArchitectureModel 2 Architecture

ModelView

Data Access Objecs

<<EntityEJB>>WebServer

Servlet

JSPpage

input

output

doGet/doPost

webpage

Control

Business

Methods<<SessionEJB>>

Data

submit

<<forward>>

Page 14: J2EE Servlets

JSPServlet

Web Development Life CycleWeb Development Life CycleModel 2 ArchitectureModel 2 Architecture

Get request Parameters

Determine and call business function

Determine next view Build view

Page 15: J2EE Servlets

Web Development Life CycleWeb Development Life Cycle

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String username = request.getParameter("username");String password = request.getParameter("password");

try {InitialContext context = new InitialContext();BusinessRulesRemote businessRules =

(BusinessRulesRemote) context.lookup(BusinessRules.REMOTE_JNDI_NAME);Long personId = businessRules.login(username,password);

} catch (Exception e) {e.printStackTrace();

}

HttpSession session = request.getSession();session.setAttribute("personid", personId);

RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");dispatcher.forward(request, response);

}

1. Get request parameters

2.Call business function

3. Determine next view

Page 16: J2EE Servlets

Web Development Life CycleWeb Development Life CycleJSP pageJSP page

<div id="login"> <span class='highlight'>Welcome to Home Town Bank!</span> <br> <a id='logout' href="">Logout</a></div>

4.Build next view

Page 17: J2EE Servlets

How to use HTTPServletHow to use HTTPServlet

HttpServletRequest

HttpServlet

doGet(request HttpServletRequest , response:HttpServletResponse)

doPost(request HttpServletRequest, response:HttpServletResponse)

doPut(request HttpServletRequest , response:HttpServletResponse)

doDelete(request HttpServletRequest , response:HttpServletResponse)

HttpServletResponse

Contains Request Info (Input) Handles Response (Output)

Page 18: J2EE Servlets

RequestResponse InterfaceRequestResponse InterfaceForwarding a Response

Page 19: J2EE Servlets

RequestResponse InterfaceRequestResponse InterfaceIncluding other Web Components

Page 20: J2EE Servlets

Deployment of ServletsDeployment of Servlets

All Servlet files zipped together into a web All Servlet files zipped together into a web archive (“war”) filearchive (“war”) file

Requires specific directory structureRequires specific directory structure

Deployment Descriptor (WSDL)Deployment Descriptor (WSDL)

Page 21: J2EE Servlets

Deployment DescriptorDeployment Descriptor<?xml version=“1.0” encoding=“UTF-8:?><!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ‘http://java.sun.com/dtd/web-app_2_3.dtd’><web-app> <display-name>A Simple Application</display-name> <servlet> <servlet-name>Verify Data</servlet-name> <servlet-class>VerifyData</servlet-class> <init-param> <param-name>maxValue</param-name> <param-value>25</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Verify Data</servlet-name> <url-pattern>/verifydata</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <error-page> <error-code>404</error-code> <location>/error404.html</location> </error-page></web-app>

Page 22: J2EE Servlets

Customizing DeploymentCustomizing Deployment

Define initialization parametersDefine initialization parameters Context parametersContext parameters

• Apply to entire web applicationApply to entire web application

Servlet parametersServlet parameters• Apply to a specific servletApply to a specific servlet

Page 23: J2EE Servlets

<?xml version=“1.0” encoding=“UTF-8:?><!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ‘http://java.sun.com/dtd/web-app_2_3.dtd’><web-app> <display-name>A Simple Application</display-name> <context-param> <param-name>location</param-name> <param-value>BYU-Idaho</param-value> <description>Site Location</description> </context-param> <servlet> <servlet-name>Verify Data</servlet-name> <servlet-class>VerifyData</servlet-class> <init-param> <param-name>maxValue</param-name> <param-value>25</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Verify Data</servlet-name> <url-pattern>/verifydata</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <error-page> <error-code>404</error-code> <location>/error404.html</location> </error-page></web-app>

Deployment DescriptorDeployment Descriptor

Context Intialization Parameter

Servlet Intialization Parameter

Page 24: J2EE Servlets

Retrieving Init. ParametersRetrieving 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"); } … …}

Page 25: J2EE Servlets

Handling ErrorsHandling Errors

HTTP Error CodesHTTP Error Codes Http Status code – set error codeHttp Status code – set error code Error page – set default error pageError page – set default error page

Send Redirect – redirect to another pageSend Redirect – redirect to another page

Servlet Exceptions – catch and handle all Servlet Exceptions – catch and handle all servlet exceptionsservlet exceptions

Page 26: J2EE Servlets

Set HTTP Status CodeSet HTTP Status Code

Sets the error status code on default error pageSets 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() < 1) response.sendError(9001, “Invalid name”); }

}

HttpServletResponse

public void sendError(int statusCode)public void sendError(int statusCode, String msg)) ….public void sendRedirect(String url);

Page 27: J2EE Servlets

Default HTTP Error PageDefault HTTP Error Page

<?xml version=“1.0” encoding=“UTF-8:?><<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ‘http://java.sun.com/dtd/web-app_2_3.dtd’><web-app><display-name>A Simple Application</display-name><servlet> <servlet-name>Verify data</servlet-name> <servlet-class>VerifyData</servlet-class> <init-param> <param-name>maxValue</param-name> <param-value>25</param-value> </init-param></servlet>

<servlet-mapping> <servlet-name>verifyData</servlet-name> <url-pattern>/verifyData</url-pattern></servlet-mapping><session-config> <session-timeout>30</session-timeout></session-config><error-page> <error-code>9001</error-code> <location>/error9001.html</location></error-page></web-app>

Define output error page for error code

Deployment Descriptor

Page 28: J2EE Servlets

Send RedirectSend Redirect Redirect to another page to handle errorRedirect 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() < 1) response.sendRedirect(“/Servlets/invalidNamePage”); }

}

HttpServletResponse

public void sendError(int statusCode)public void sendError(int statusCode, String msg)) ….public void sendRedirect(String url);

Page 29: J2EE Servlets

Servlet Session ManagementServlet Session Management Hidden fields in formHidden fields in form

Visible to client in source (not secure)Visible to client in source (not secure) Limited amount of dataLimited amount of data

URL rewrittingURL rewrittinghttp://www.byui.edu/j2ee?sessionid=9982345http://www.byui.edu/j2ee?sessionid=9982345

CookiesCookies Store on client browserStore on client browser May be disabled by some usersMay be disabled by some users

Server side session objectServer side session object Session info stored on ServerSession info stored on Server

• Unlimited amount of spaceUnlimited amount of space• More secureMore secure

Automatic managementAutomatic management

Page 30: J2EE Servlets

Creating CookiesCreating Cookies Implement transactions with CookiesImplement transactions with Cookies

Store state data in CookieStore state data in Cookie

Cookie

public void setValue(String value)public String getName()public String getValue()….

HttpServletResponse

…public void addCookie(Cookie c)public Cookie[ ] getCookies() ….

Page 31: J2EE Servlets

Creating a CookieCreating a CookieImport 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(“totalQuantity”); } catch (RemoteException remex) { response.sendError(response.SC_INTERNAL_SERVER_ERROR); } }

}

Page 32: J2EE Servlets

Retrieving a CookieRetrieving a Cookiepublc 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 i=0; i < cookies.length; i++) { cookie = cookies[i]; if (cookie.getName().equals(“userAddress”)) { String urlAddress = cookie.getValue(); break; } } } } catch (RemoteException remex) { response.sendError(response.SC_INTERNAL_SERVER_ERROR); } }

Page 33: J2EE Servlets

SessionsSessions Implement transactions with a HttpSessionImplement transactions with a HttpSession

Retains state of data between page requestRetains state of data between page request

HttpSession

public long getId()public long getLastAccessedTime()public long getCreationTime()public long getMaxInactiveInterval()public Object getAttribute() public boolean isNew() ….

HttpServletRequest

…public HttpSession getSession() ….

Page 34: J2EE Servlets

Getting a SessionGetting a SessionImport 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_ERROR); } }

}

Page 35: J2EE Servlets

Filter ServletsFilter Servlets

Acts as preprocessor to request/response Acts as preprocessor to request/response for target servletfor target servlet

AuthenticateFilter

Servlet

HttpPage Servlet

VerifyData Servlet

PageHitsFilter

Servlet

…HttpPage

…VerifyData

Page 36: J2EE Servlets

Filter ServletFilter ServletImport 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; }

Must override init. method

Must override destroy method

Must implementFilter Interface

Page 37: J2EE Servlets

Filter Servlet (cont.)Filter Servlet (cont.)

public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { if (filterConfig == null) return; synchronized (this) { Integer counter =(Integer) filterConfig.getServletContext().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("Counter", counter); }

chain.doFilter(req, resp) }

Must override doFilter method

Page 38: J2EE Servlets

Modify Deployment DescriptorModify Deployment Descriptor<?xml version=“1.0” encoding=“UTF-8:?><<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ‘http://java.sun.com/dtd/web-app_2_3.dtd’><web-app> <display-name>A Simple Application</display-name> <servlet> <servlet-name>VerifyData</servlet-name> <servlet-class>VerifyData</servlet-class> <init-param> <param-name>maxValue</param-name> <param-value>25</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Verify Data</servlet-name> <url-pattern>/verifyData/</url-pattern> </servlet-mapping>

<filter> <filter-name>Page Hits</filter-name> <display-name>Page Hits</display-name> <description>Count page hits<description> <filter-class>PageHits</filter-class> </filter> <filter-mapping> <filter-name>PageHits</filter-name> <servlet-name>VerifyData</servlet-name> </filter-mapping> </web-app>

Page 39: J2EE Servlets

Listener ServletListener Servlet

Servlet is automatically executed when Servlet is automatically executed when some external event occurssome external event occurs

HTTPSessionActivationListenerHTTPSessionActivationListener Session is activated/passivatedSession is activated/passivated

HTTPSessionAttributeListenerHTTPSessionAttributeListener Session attribute is added/removedSession attribute is added/removed

HTTPSessionListenerHTTPSessionListener Session attribute is created/destroyedSession attribute is created/destroyed

HTTPSessionContextAttributeListenerHTTPSessionContextAttributeListener Servlet contextattribute is Servlet contextattribute is added/removedadded/removed

HTTPSessionContextListenerHTTPSessionContextListener Servlet context changesServlet context changes

Page 40: J2EE Servlets

Create Listener ServletCreate Listener ServletImport java.io.*;import javax.servlet.*;import javax.servlet.http.*;publc class Listener extends HttpServlet implements ServletContextListener{ private ServletContext context = null; public void contextIntialized(ServletContextEvent 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”); }

}

Must override contextInitialized method

Must override contextInitialized method

Must implementListner Interface

Page 41: J2EE Servlets

Modify Deployment DescriptorModify Deployment Descriptor<?xml version=“1.0” encoding=“UTF-8:?><<!DOCTYPE web-app PUBLIC ‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ‘http://java.sun.com/dtd/web-app_2_3.dtd’><web-app> <display-name>A Simple Application</display-name> <servlet> <servlet-name>Verify data</servlet-name> <servlet-class>VerifyData</servlet-class> <init-param> <param-name>maxValue</param-name> <param-value>25</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Verify Data</servlet-name> <url-pattern>/verifyData/</url-pattern> </servlet-mapping> <filter> <filter-name>Page Hits</filter-name> <display-name>Page Hits</display-name> <description>Count page hitsdescription> <filter-class>PageHits</filter-class> </filter> <filter-mapping> <filter-name>PageHits</filter-name> <servlet-name>Verify data</servlet-name> </filter-mapping> <listener> < listener-class>Listener</ listener -class> </listener></web-app>

Page 42: J2EE Servlets

Modify Filter ServletModify 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().getAttribute(“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(“Counter”, counter); counter);

}

chain.doFilter(request, response); }

}

No longer needed

Page 43: J2EE Servlets

Modified Filter ServletModified 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().getAttribute(“Counter”); counter = new Integer(counter.intValue()+1); filterConfig.getServletContext().log(“Number of hits is “ + counter); filterConfig.getServletContext().setAttribute(“Counter”, counter); counter);

}

chain.doFilter(request, response); }

}