j2ee servlets
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 PresentationTRANSCRIPT
![Page 1: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/1.jpg)
J2EE ServletsJ2EE Servlets
Ch. 10 (Architecture)Ch. 10 (Architecture)
Ch. 12 (21 Days)Ch. 12 (21 Days)
![Page 2: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/7.jpg)
Servlet Class DiagramServlet Class DiagramClass Diagram
![Page 8: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/8.jpg)
Servlet Life CycleServlet Life Cycle
Class Diagram
State: Resident ProcessingRequest
START
END
init()
doGet(), doPost, …
destroy()
![Page 9: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/9.jpg)
Servlet Sequence DiagramServlet Sequence Diagram
Fig. 12-15
![Page 10: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/10.jpg)
Model 1 - Servlets onlyModel 1 - Servlets only
Model/View/Control
Servlet
WebServer
Database
doGet/doPost
webpageGenerate
HTML
submit
Data
![Page 11: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/18.jpg)
RequestResponse InterfaceRequestResponse InterfaceForwarding a Response
![Page 19: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/19.jpg)
RequestResponse InterfaceRequestResponse InterfaceIncluding other Web Components
![Page 20: J2EE Servlets](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/23.jpg)
<?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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081504/56815175550346895dbfad09/html5/thumbnails/43.jpg)
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); }
}