100
Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3 HttpServletRequest Interface 11.2.4 HttpServletResponse Interface 11.3 Handling HTTP get Requests 11.3.1 Setting Up the Apache Tomcat Server 11.3.2 Deploying a Web Application 11.4 Handling HTTP get Requests Containing Data 11.5 Handling HTTP post Requests 11.6 Redirecting Requests to Other Resources 11.7 Session Tracking 11.7.1 Cookies 11.7.2 Session Tracking with HttpSession 11.8 Multi-Tier Applications: Using JDBC from a Servlet 11.9 Servlet Context 11.10 Servlet filter 11.11 Web application listener Unit 09 - Servlet Programming

Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Embed Size (px)

DESCRIPTION

Java Stream 3 Servlet Overview and Architecture Typical uses for Servlets include: –Processing and/or storing data submitted by an HTML form. –Providing dynamic content, e.g. returning the results of a database query to the client. –Managing state information on top of the stateless HTTP, e.g. for an online shopping cart system which manages shopping carts for many concurrent customers and maps every request to the right customer Servlets make use of the Java standard extension classes in the packages javax.servlet (the basic Servlet framework) and javax.servlet.http (extensions of the Servlet framework for Servlets that answer HTTP requests). Servlet container (servlet engine) –Server that executes a servlet

Citation preview

Page 1: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

1

11.1 Introduction11.2 Servlet Overview and Architecture11.2.1 Interface Servlet and the Servlet Life Cycle11.2.2 HttpServlet Class11.2.3 HttpServletRequest Interface11.2.4 HttpServletResponse Interface11.3 Handling HTTP get Requests11.3.1 Setting Up the Apache Tomcat Server11.3.2 Deploying a Web Application11.4 Handling HTTP get Requests Containing Data11.5 Handling HTTP post Requests11.6 Redirecting Requests to Other Resources11.7 Session Tracking11.7.1 Cookies11.7.2 Session Tracking with HttpSession11.8 Multi-Tier Applications: Using JDBC from a Servlet11.9 Servlet Context11.10 Servlet filter11.11 Web application listener

Unit 09 - Servlet Programming

Page 2: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

2

Introduction• Java networking capabilities

– Socket-based and packet-based communications• Package java.net

– Remote Method Invocation (RMI)• Package java.rmi

– Servlets and Java Server Pages (JSP)• Request-response model• Packages javax.servlet

javax.servlet.http javax.servlet.jsp javax.servlet.tagext

• Form the Web tier of J2EE

• Servlets are modules of Java code that run in a server application to answer client requests.

Page 3: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

3

Servlet Overview and Architecture• Typical uses for Servlets include:

– Processing and/or storing data submitted by an HTML form.– Providing dynamic content, e.g. returning the results of a database

query to the client.– Managing state information on top of the stateless HTTP, e.g. for

an online shopping cart system which manages shopping carts for many concurrent customers and maps every request to the right customer

• Servlets make use of the Java standard extension classes in the packages javax.servlet (the basic Servlet framework) and javax.servlet.http (extensions of the Servlet framework for Servlets that answer HTTP requests).

• Servlet container (servlet engine)– Server that executes a servlet

Page 4: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

4

Interface Servlet and the Servlet Life Cycle

• Interface Servlet– All servlets must implement this interface– All methods of interface Servlet are invoked

automatically

• Servlet life cycle– Servlet container invokes the servlet’s init method– Servlet’s service method handles requests– Servlet’s destroy method releases servlet resources when

the servlet container terminates the servlet

Page 5: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

5

Interface Servlet and the Servlet Life Cycle (Cont.)

Method Description void init( ServletConfig config )

This method is automatically called once during a servlet’s execution cycle to initialize the servlet. The ServletConfig argument is supplied by the servlet container that executes the servlet.

ServletConfig getServletConfig()

This method returns a reference to an object that implements interface ServletConfig. This object provides access to the servlet’s configuration information such as servlet initialization parameters and the servlet’s ServletContext, which provides the servlet with access to its environment (i.e., the servlet container in which the servlet executes).

String getServletInfo()

This method is defined by a servlet programmer to return a String containing servlet information such as the servlet’s author and version.

void service( ServletRequest request, ServletResponse response )

The servlet container calls this method to respond to a client request to the servlet.

void destroy() This “cleanup” method is called when a servlet is terminated by its servlet container. Resources used by the servlet, such as an open file or an open database connection, should be deallocated here.

Methods of interface Servlet (package javax.servlet).

Page 6: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

6

HttpServlet Class

• Overrides method service• Two most common HTTP request types

– get requests– post requests

• Method doGet responds to get requests• Method doPost responds to post requests• HttpServletRequest and HttpServletResponse objects

Page 7: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

7

• Web server – creates an HttpServletRequest object– passes it to the servlet’s service method

• HttpServletRequest object contains the request from the client

HttpServletRequest Interface

Page 8: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

8

HttpServletRequest Interface (Cont.)Method Description String getParameter( String name )

Obtains the value of a parameter sent to the servlet as part of a get or post request. The name argument represents the parameter name.

Enumeration getParameterNames()

Returns the names of all the parameters sent to the servlet as part of a post request.

String[] getParameterValues( String name )

For a parameter with multiple values, this method returns an array of Strings containing the values for a specified servlet parameter.

Cookie[] getCookies()

Returns an array of Cookie objects stored on the client by the server. Cookies can be used to uniquely identify clients to the servlet.

HttpSession getSession( boolean create )

Returns an HttpSession object associated with the client’s current browsing session. An HttpSession object can be created by this method (true argument) if an HttpSession object does not already exist for the client. HttpSession objects can be used in similar ways to Cookies for uniquely identifying clients.

Some methods of interface HttpServletRequest.

Page 9: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

9

HttpServletResponse Interface

Method Description void addCookie( Cookie cookie )

Used to add a Cookie to the header of the response to the client. The Cookie’s maximum age and whether Cookies are enabled on the client determine if Cookies are stored on the client.

ServletOutputStream getOutputStream()

Obtains a byte-based output stream for sending binary data to the client.

PrintWriter getWriter()

Obtains a character-based output stream for sending text data to the client.

void setContentType( String type )

Specifies the MIME type of the response to the browser. The MIME type helps the browser determine how to display the data (or possibly what other application to execute to process the data). For example, MIME type "text/html" indicates that the response is an HTML document, so the browser displays the HTML page.

Some methods of interface HttpServletResponse.

HttpServletResponse object contains the request from the client

Page 10: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

10

Handling HTTP GET Requests• GET request

– Retrieve the content of a URL

• Example: WelcomeServlet – a servlet handles HTTP GET requests

Page 11: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

11

WelcomeServlet that responds to a simple HTTP get request.

Lines 5-6

Line 9

Lines 12-44

Line 16

Line 17

Lines 22-42

1 // WelcomeServlet.java2 // A simple servlet to process get requests.3 package com.alliant.test.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 9 public class WelcomeServlet extends HttpServlet { 10 11 // process "get" requests from clients12 protected void doGet( HttpServletRequest request, 13 HttpServletResponse response )14 throws ServletException, IOException 15 {16 response.setContentType( "text/html" );17 PrintWriter out = response.getWriter(); 18 19 // send XHTML page to client20 21 // start XHTML document22 out.println( "<?xml version = \"1.0\"?>" );23 24 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +25 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +26 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 27 28 out.println( 29 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );30 31 // head section of document32 out.println( "<head>" );33 out.println( "<title>A Simple Servlet Example</title>" );34 out.println( "</head>" );35

Import the javax.servlet and javax.servlet.http packages.

Extends HttpServlet to handle HTTP get requests and HTTP post requests.

Override method doGet to provide custom get request processing.

Uses the response object’s setContentType method to specify the content type of the data to be sent as the response to the client.

Uses the response object’s getWriter method to obtain a reference to the PrintWriter object that enables the servlet to send content to the client.

Create the XHTML document by writing strings with the out object’s println method.

Page 12: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

12

WelcomeServlet that responds to a simple HTTP get request.

Line 43

36 // body section of document37 out.println( "<body>" );38 out.println( "<h1>Welcome to Servlets!</h1>" );39 out.println( "</body>" );40 41 // end XHTML document42 out.println( "</html>" );43 out.close(); // close stream to complete the page44 } 45 }

Closes the output stream, flushes the output buffer and sends the information to the client.

Page 13: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

13

HTML document in which the form’s action invokes WelcomeServlet through the alias welcome1 specified in web.xml.

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- WelcomeServlet.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Handling an HTTP Get Request</title>10 </head>11 12 <body>13 <form action = "/test/welcome1" method = "get">14 15 <p><label>Click the button to invoke the servlet16 <input type = "submit" value = "Get HTML Document" />17 </label></p>18 19 </form>20 </body>21 </html>

Page 14: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

14

Setting Up the Apache Tomcat Server• Download Tomcat (version 5.0.27)

– http://jakarta.apache.org/builds/jakarta-tomcat/

• Define environment variables– JAVA_HOME– CATALINA_HOME

• Start the Tomcat server– CATALINA_HOME\bin\startup.bat

• Launch the Tomcat server– http://localhost:8080/

• Shutdown the Tomcat server– CATALINA_HOME\bin\shutdown.bat

Page 15: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

15

Setting Up the Apache Tomcat Server (Cont.).

Tomcat documentation home page. (Courtesy of The Apache Software Foundation.)

Page 16: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

16

Deploying a Web Application • Web applications

– JSPs, servlets and their supporting files

• Deploying a Web application– Directory structure

• Context root– Web application archive file (WAR file) OR Web

application folder– Deployment descriptor

• web.xml

Page 17: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

17

Deploying a Web Application (Cont.)Directory Description context root This is the root directory for the Web application. The name of

this directory is chosen by the Web application developer. All the JSPs, HTML documents, servlets and supporting files such as images and class files reside in this directory or its subdirectories. The name of this directory is specified by the Web application creator. To provide structure in a Web application, subdirectories can be placed in the context root. For example, if your application uses many images, you might place an images subdirectory in this directory.

WEB-INF This directory contains the Web application deployment descriptor (web.xml).

WEB-INF/classes This directory contains the servlet class files and other supporting class files used in a Web application. If the classes are part of a package, the complete package directory structure would begin here.

WEB-INF/lib This directory contains Java archive (JAR) files. The JAR files can contain servlet class files and other supporting class files used in a Web application.

Web application standard directories.

Page 18: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

18

Deployment descriptor (web.xml) for the advjhtp1 Web application.

Lines 5-37

Lines 8-11

Lines 13-16

Lines 19-29

Line 20

Lines 22-24

Lines 26-28

1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 3 "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">4 5 <web-app>6 7 <!-- General description of your Web application -->8 <display-name>9 Sample 10 Servlet Examples11 </display-name>12 13 <description>14 This is the Web application in which we 15 demonstrate our JSP and Servlet examples.16 </description>17 18 <!-- Servlet definitions -->19 <servlet>20 <servlet-name>welcome1</servlet-name>21 22 <description>23 A simple servlet that handles an HTTP get request.24 </description>25 26 <servlet-class>27 com.alliant.test.servlets.WelcomeServlet28 </servlet-class>29 </servlet>30

Element web-app defines the configuration of each servlet in the Web application and the servlet mapping for each servlet.

Element display-name specifies a name that can be displayed to the administrator of the server on which the Web application is installed.

Element description specifies a description of the Web application that might be displayed to the administrator of the server.

Element servlet describes a servlet.Element servlet-name is the name for the servlet.

Element description specifies a description for this particular servlet.

Element servlet-class specifies compiled servlet’s fully qualified class name.

Page 19: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

19

Deployment descriptor (web.xml) for the advjhtp1 Web application.

Lines 32-35

31 <!-- Servlet mappings -->32 <servlet-mapping>33 <servlet-name>welcome1</servlet-name>34 <url-pattern>/welcome1</url-pattern>35 </servlet-mapping>36 37 </web-app>

Element servlet-mapping specifies servlet-name and url-pattern elements.

Page 20: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

20

Deploying a Web Application (Cont.)• Invoke WelcomeServlet example

– /test/welcome1• /test specifies the context root• /welcome1 specifies the URL pattern

• URL pattern formats– Exact match

• /test/welcome1– Path mappings

• /test/example/*– Extension mappings

• *.jsp– Default servlet

• /test/example/

Page 21: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

21

Deploying a Web Application (Cont.)

WelcomeServlet Web application directory and file structure test servlets WelcomeServlet.html WEB-INF web.xml classes com alliant test servlets WelcomeServlet.class Web application directory and file structure for WelcomeServlet.

Page 22: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

22

Handling HTTP GET Requests Containing Data

• Servlet WelcomeServlet2– Responds to a get request that contains data

Page 23: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

23

WelcomeServlet2 responds to a get request that contains data.

Line 16

1 // WelcomeServlet2.java2 // Processing HTTP get requests containing data.3 package com.alliant.test.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 9 public class WelcomeServlet2 extends HttpServlet { 10 11 // process "get" request from client12 protected void doGet( HttpServletRequest request, 13 HttpServletResponse response )14 throws ServletException, IOException 15 {16 String firstName = request.getParameter( "firstname" );17 18 response.setContentType( "text/html" );19 PrintWriter out = response.getWriter(); 20 21 // send XHTML document to client22 23 // start XHTML document24 out.println( "<?xml version = \"1.0\"?>" );25 26 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +27 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +28 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 29 30 out.println( 31 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );32

The request object’s getParameter method receives the parameter name and returns the corresponding String value.

Page 24: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

24

WelcomeServlet2 responds to a get request that contains data.

Line 41

33 // head section of document34 out.println( "<head>" );35 out.println( 36 "<title>Processing get requests with data</title>" );37 out.println( "</head>" );38 39 // body section of document40 out.println( "<body>" );41 out.println( "<h1>Hello " + firstName + ",<br />" );42 out.println( "Welcome to Servlets!</h1>" );43 out.println( "</body>" );44 45 // end XHTML document46 out.println( "</html>" );47 out.close(); // close stream to complete the page48 } 49 }

Uses the result of line 16 as part of the response to the client.

Page 25: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

25

HTML document in which the form’s action invokes WelcomeServlet2 through the alias welcome2 specified in web.xml.

Line 17

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- WelcomeServlet2.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Processing get requests with data</title>10 </head>11 12 <body>13 <form action = "/test/welcome2" method = "get">14 15 <p><label>16 Type your first name and press the Submit button17 <br /><input type = "text" name = "firstname" />18 <input type = "submit" value = "Submit" />19 </p></label>20 21 </form>22 </body>23 </html>

Get the first name from the user.

Page 26: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

26

HTML document in which the form’s action invokes WelcomeServlet2 through the alias welcome2 specified in web.xml.

Program output

Page 27: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

27

Handling HTTP get Requests Containing Data (Cont.)

Descriptor element Value servlet element servlet-name welcome2 description Handling HTTP get requests with data. servlet-class com.deitel.test.servlets.WelcomeServlet2 servlet-mapping element

servlet-name welcome2 url-pattern /welcome2 Deployment descriptor information for servlet WelcomeServlet2.

Page 28: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

28

Handling HTTP post Requests

• HTTP post request– Post data from an HTML form to a server-side form handler– Browsers cache Web pages

• Servlet WelcomeServlet3– Responds to a post request that contains data

Page 29: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

29

WelcomeServlet3 responds to a post request that contains data.

Lines 12-48

1 // WelcomeServlet3.java2 // Processing post requests containing data.3 package com.deitel.advjhtp1.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 9 public class WelcomeServlet3 extends HttpServlet { 10 11 // process "post" request from client12 protected void doPost( HttpServletRequest request, 13 HttpServletResponse response )14 throws ServletException, IOException 15 {16 String firstName = request.getParameter( "firstname" );17 18 response.setContentType( "text/html" );19 PrintWriter out = response.getWriter(); 20 21 // send XHTML page to client22 23 // start XHTML document24 out.println( "<?xml version = \"1.0\"?>" );25 26 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +27 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +28 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 29 30 out.println( 31 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );32

Define a doPost method to responds to post requests.

Page 30: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

30

WelcomeServlet3.java

33 // head section of document34 out.println( "<head>" );35 out.println( 36 "<title>Processing post requests with data</title>" );37 out.println( "</head>" );38 39 // body section of document40 out.println( "<body>" );41 out.println( "<h1>Hello " + firstName + ",<br />" );42 out.println( "Welcome to Servlets!</h1>" );43 out.println( "</body>" );44 45 // end XHTML document46 out.println( "</html>" );47 out.close(); // close stream to complete the page48 } 49 }

Page 31: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

31

HTML document in which the form’s action invokes WelcomeServlet3 through the alias welcome3 specified in web.xml.

Lines 13-21

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- Fig. 9.15: WelcomeServlet3.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Handling an HTTP Post Request with Data</title>10 </head>11 12 <body>13 <form action = "/test/welcome3" method = "post">14 15 <p><label>16 Type your first name and press the Submit button17 <br /><input type = "text" name = "firstname" />18 <input type = "submit" value = "Submit" />19 </label></p>20 21 </form>22 </body>23 </html>

Provide a form in which the user can input a name in the text input element firstname, then click the Submit button to invoke WelcomeServlet3.

Page 32: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

32

HTML document in which the form’s action invokes WelcomeServlet3 through the alias welcome3 specified in web.xml.

Program output

Page 33: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

33

Handling HTTP post Requests (Cont.)

Descriptor element Value servlet element servlet-name welcome3 description Handling HTTP post requests with data. servlet-class com.deitel.test.servlets.WelcomeServlet3 servlet-mapping element

servlet-name welcome3 url-pattern /welcome3 Deployment descriptor information for servlet WelcomeServlet3.

Page 34: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

34

Redirecting Requests to Other Resources

• Servlet RedirectServlet– Redirects the request to a different resource

Page 35: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

35

Redirecting requests to other resources.

Line 16

Lines 20-24

Line 21

Line 24

Lines 29-56

1 // RedirectServlet.java2 // Redirecting a user to a different Web page.3 package com.deitel.advjhtp1.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 9 public class RedirectServlet extends HttpServlet { 10 11 // process "get" request from client12 protected void doGet( HttpServletRequest request, 13 HttpServletResponse response )14 throws ServletException, IOException 15 {16 String location = request.getParameter( "page" );17 18 if ( location != null ) 19 20 if ( location.equals( “alliant" ) )21 response.sendRedirect( "http://www.alliant-corp.com" );22 else 23 if ( location.equals( "welcome1" ) )24 response.sendRedirect( "welcome1" );25 26 // code that executes only if this servlet27 // does not redirect the user to another page28 29 response.setContentType( "text/html" );30 PrintWriter out = response.getWriter(); 31

Obtains the page parameter from the request.

Determine if the value is either “deitel” or “welcome1”Redirects the request to

www.deitel.com.Redirects the request to the servlet WelcomeServlet.

Output a Web page indicating that an invalid request was made if method sendRedirect is not called.

Page 36: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

36

Redirecting requests to other resources.

32 // start XHTML document33 out.println( "<?xml version = \"1.0\"?>" );34 35 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +36 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +37 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 38 39 out.println( 40 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );41 42 // head section of document43 out.println( "<head>" );44 out.println( "<title>Invalid page</title>" );45 out.println( "</head>" );46 47 // body section of document48 out.println( "<body>" );49 out.println( "<h1>Invalid page requested</h1>" );50 out.println( "<p><a href = " + 51 "\"servlets/RedirectServlet.html\">" );52 out.println( "Click here to choose again</a></p>" );53 out.println( "</body>" );54 55 // end XHTML document56 out.println( "</html>" );57 out.close(); // close stream to complete the page 58 } 59 }

Page 37: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

37

RedirectServlet.html document to demonstrate redirecting requests to other resources.

Lines 15-16

Lines 17-18

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- RedirectServlet.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Redirecting a Request to Another Site</title>10 </head>11 12 <body>13 <p>Click a link to be redirected to the appropriate page</p>14 <p>15 <a href = "/test/redirect?page=alliant">16 www.alliant-corp.com</a><br />17 <a href = "/test/redirect?page=welcome1">18 Welcome servlet</a>19 </p>20 </body>21 </html>

Provide hyperlinks that allow the user to invoke the servlet RedirectServlet.

Page 38: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

38

Redirecting Requests to other Resources (Cont.)

Descriptor element Value servlet element servlet-name redirect description Redirecting to static Web pages and other

servlets. servlet-class com.deitel.advjhtp1.servlets.RedirectServlet servlet-mapping element

servlet-name redirect url-pattern /redirect Deployment descriptor information for servlet RedirectServlet.

Page 39: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

39

Session Tracking• Personalization• Privacy invasion• HTTP – stateless protocol

– Does not support persistent information

• Track clients individually– Cookies– Session tracking– hidden type input– URL rewriting

Page 40: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

40

Cookies

• Stored on the user’s computer for retrieval later• Text-based data sent by servlets• Maximum age of a cookie• Deleted automatically when they expire• Servlet CookieServlet

– Handles both get and post requests

Page 41: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

41

Storing user data on the client computer with cookies.

Lines 14-20

Line 28

Line 29

Line 30

Line 32

1 // CookieServlet.java2 // Using cookies to store data on the client computer.3 package com.alliant.test.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 import java.util.*;9 10 public class CookieServlet extends HttpServlet {11 private final Map books = new HashMap();12 13 // initialize Map books14 public void init()15 {16 books.put( "C", "0130895725" );17 books.put( "C++", "0130895717" );18 books.put( "Java", "0130125075" );19 books.put( "VB6", "0134569555" );20 }21 22 // receive language selection and send cookie containing23 // recommended book to the client24 protected void doPost( HttpServletRequest request,25 HttpServletResponse response )26 throws ServletException, IOException27 {28 String language = request.getParameter( "language" );29 String isbn = books.get( language ).toString();30 Cookie cookie = new Cookie( language, isbn );31 32 response.addCookie( cookie ); // must precede getWriter 33 response.setContentType( "text/html" );34 PrintWriter out = response.getWriter(); 35

Method init populates books with four key/value pair of books.

Uses method getParameter to obtain the user’s language selection.

Gets the ISBN number for the selected language from books.Creates a new Cookie object,

using the language and isbn values as the cookie name and cookie value, respectively.

Adds the cookie to the response with method addCookie of interface HttpServletResponse.

Page 42: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

42

Storing user data on the client computer with cookies.

36 // send XHTML page to client37 38 // start XHTML document39 out.println( "<?xml version = \"1.0\"?>" );40 41 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +42 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +43 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 44 45 out.println( 46 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );47 48 // head section of document49 out.println( "<head>" );50 out.println( "<title>Welcome to Cookies</title>" ); 51 out.println( "</head>" );52 53 // body section of document54 out.println( "<body>" );55 out.println( "<p>Welcome to Cookies! You selected " +56 language + "</p>" );57 58 out.println( "<p><a href = " +59 "\"/advjhtp1/servlets/CookieSelectLanguage.html\">" +60 "Click here to choose another language</a></p>" );61 62 out.println( "<p><a href = \"/advjhtp1/cookies\">" + 63 "Click here to get book recommendations</a></p>" );64 out.println( "</body>" );65 66 // end XHTML document67 out.println( "</html>" );68 out.close(); // close stream69 }70

Page 43: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

43

Storing user data on the client computer with cookies.

Line 77

71 // read cookies from client and create XHTML document72 // containing recommended books73 protected void doGet( HttpServletRequest request,74 HttpServletResponse response )75 throws ServletException, IOException76 {77 Cookie cookies[] = request.getCookies(); // get cookies78 79 response.setContentType( "text/html" ); 80 PrintWriter out = response.getWriter();81 82 // start XHTML document83 out.println( "<?xml version = \"1.0\"?>" );84 85 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +86 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +87 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 88 89 out.println( 90 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );91 92 // head section of document93 out.println( "<head>" );94 out.println( "<title>Recommendations</title>" );95 out.println( "</head>" );96 97 // body section of document98 out.println( "<body>" );99 100 // if there are any cookies, recommend a book for each ISBN101 if ( cookies != null && cookies.length != 0 ) {102 out.println( "<h1>Recommendations</h1>" );103 out.println( "<p>" );104

Retrieves the cookies from the client using HttpServletRequest method getCookies, which returns an array of Cookie objects.

Page 44: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

44

Storing user data on the client computer with cookies.

105 // get the name of each cookie106 for ( int i = 0; i < cookies.length; i++ ) 107 out.println( cookies[ i ].getName() + 108 " How to Program. ISBN#: " + 109 cookies[ i ].getValue() + "<br />" );110 111 out.println( "</p>" );112 }113 else { // there were no cookies114 out.println( "<h1>No Recommendations</h1>" );115 out.println( "<p>You did not select a language.</p>" );116 }117 118 out.println( "</body>" );119 120 // end XHTML document121 out.println( "</html>" );122 out.close(); // close stream123 }124 }

Page 45: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

45

CookieSelectLanguage.html document for selecting a programming language and posting the data to the CookieServlet.

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- CookieSelectLanguage.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Using Cookies</title> 10 </head>11 12 <body>13 <form action = "/advjhtp1/cookies" method = "post"> 14 15 <p>Select a programming language:</p>16 <p>17 <input type = "radio" name = "language" 18 value = "C" />C <br />19 20 <input type = "radio" name = "language" 21 value = "C++" />C++ <br />22 23 <!-- this radio button checked by default -->24 <input type = "radio" name = "language" 25 value = "Java" checked = "checked" />Java<br />26 27 <input type = "radio" name = "language" 28 value = "VB6" />VB 629 </p>30 31 <p><input type = "submit" value = "Submit" /></p>32 33 </form>34 </body>35 </html>

Page 46: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

46

CookieSelectLanguage.html document for selecting a programming language and posting the data to the CookieServlet. Program output

Page 47: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

47

CookieSelectLanguage.html document for selecting a programming language and posting the data to the CookieServlet.

Program output

Page 48: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

48

Cookies (Cont.)

Descriptor element Value servlet element servlet-name cookies description Using cookies to maintain state information. servlet-class com.deitel.advjhtp1.servlets.CookieServlet servlet-mapping element

servlet-name cookies url-pattern /cookies Deployment descriptor information for servlet CookieServlet.

Page 49: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

49

Cookies (Cont.)Method Description getComment() Returns a String describing the purpose of the cookie

(null if no comment has been set with setComment). getDomain() Returns a String containing the cookie’s domain. This

determines which servers can receive the cookie. By default, cookies are sent to the server that originally sent the cookie to the client.

getMaxAge() Returns an int representing the maximum age of the cookie in seconds.

getName() Returns a String containing the name of the cookie as set by the constructor.

getPath() Returns a String containing the URL prefix for the cookie. Cookies can be “targeted” to specific URLs that include directories on the Web server. By default, a cookie is returned to services operating in the same directory as the service that sent the cookie or a subdirectory of that directory.

getSecure() Returns a boolean value indicating if the cookie should be transmitted using a secure protocol (true).

getValue() Returns a String containing the value of the cookie as set with setValue or the constructor.

getVersion() Returns an int containing the version of the cookie protocol used to create the cookie. A value of 0 (the default) indicates the original cookie protocol as defined by Netscape. A value of 1 indicates the current version, which is based on Request for Comments (RFC) 2109.

(Part 1 of 2) Important methods of class Cookie.

Page 50: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

50

Cookies (Cont.)

setComment( String )

The comment describing the purpose of the cookie that is presented by the browser to the user. (Some browsers allow the user to accept cookies on a per-cookie basis.)

setDomain( String ) This determines which servers can receive the cookie. By default, cookies are sent to the server that originally sent the cookie to the client. The domain is specified in the form ".alliant.com", indicating that all servers ending with .alliant.com can receive this cookie.

setMaxAge( int ) Sets the maximum age of the cookie in seconds. setPath( String ) Sets the “target” URL prefix indicating the directories on

the server that lead to the services that can receive this cookie.

setSecure( boolean )

A true value indicates that the cookie should only be sent using a secure protocol.

setValue( String ) Sets the value of a cookie. setVersion( int ) Sets the cookie protocol for this cookie. (Part 2 of 2) Important methods of class Cookie.

Page 51: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

51

Session How Do We Need HTTP State?

• Web applications need to track the users across a series of requests:– Online shopping (e.g. Order books)– Financial portfolio manager– Movie listings

• HTTP does not support directly• Need a mechanism to maintain state about a series

of requests from the same user ( or originating from the same browser) over some period of time

Page 52: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

52

Session Tracking Overview

• The servlet API has a built-in support for session tracking• Session objects live on the server

– Each user has associated an HttpSession object—one user/session– HttpSession object operates like a hashtable

Page 53: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

53

Session Tracking with HttpSession

• To get a user's existing or new session object:– HttpSession session = request.getSession(true);– "true" means the server should create a new session object if

necessary

• To store or retrieve an object in the session:– Stores values: setAttribute("cartItem", cart);– Retrieves values: getAttribute("cartItem");

Page 54: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

54

Maintaining state information with HttpSession objects.

Line 28

Line 32

Line 35

1 // SessionServlet.java2 // Using HttpSession to maintain client state information.3 package com.deitel.test.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 import java.util.*;9 10 public class SessionServlet extends HttpServlet {11 private final Map books = new HashMap();12 13 // initialize Map books14 public void init()15 {16 books.put( "C", "0130895725" );17 books.put( "C++", "0130895717" );18 books.put( "Java", "0130125075" );19 books.put( "VB6", "0134569555" );20 }21 22 // receive language selection and create HttpSession object23 // containing recommended book for the client24 protected void doPost( HttpServletRequest request,25 HttpServletResponse response )26 throws ServletException, IOException27 {28 String language = request.getParameter( "language" );29 30 // Get the user's session object.31 // Create a session (true) if one does not exist.32 HttpSession session = request.getSession( true );33 34 // add a value for user's choice to session35 session.setAttribute( language, books.get( language ) );

Gets the user’s language selection.

Uses method getSession of interface HttpServletRequest to obtain the HttpSession object for the client.

Uses setAttribute to put the language and the corresponding recommended book’s ISBN number into the HttpSession object.

Page 55: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

55

Maintaining state information with HttpSession objects.

Line 64

Line 67

36 37 response.setContentType( "text/html" );38 PrintWriter out = response.getWriter(); 39 40 // send XHTML page to client41 42 // start XHTML document43 out.println( "<?xml version = \"1.0\"?>" );44 45 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +46 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +47 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 48 49 out.println( 50 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );51 52 // head section of document53 out.println( "<head>" );54 out.println( "<title>Welcome to Sessions</title>" );55 out.println( "</head>" );56 57 // body section of document58 out.println( "<body>" );59 out.println( "<p>Welcome to Sessions! You selected " +60 language + ".</p>" );61 62 // display information about the session63 out.println( "<p>Your unique session ID is: " + 64 session.getId() + "<br />" );65 66 out.println( 67 "This " + ( session.isNew() ? "is" : "is not" ) +68 " a new session<br />" );69

Uses HttpSession method getID to obtain the session’s unique ID number.

Determines whether the session is new or already exists with method isNew.

Page 56: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

56

Fig. 9.24 Maintaining state information with HttpSession objects.

Line 71

Line 74

Line 77

Line 100

70 out.println( "The session was created at: " + 71 new Date( session.getCreationTime() ) + "<br />" );72 73 out.println( "You last accessed the session at: " + 74 new Date( session.getLastAccessedTime() ) + "<br />" );75 76 out.println( "The maximum inactive interval is: " + 77 session.getMaxInactiveInterval() + " seconds</p>" );78 79 out.println( "<p><a href = " +80 "\"servlets/SessionSelectLanguage.html\">" +81 "Click here to choose another language</a></p>" );82 83 out.println( "<p><a href = \"sessions\">" +84 "Click here to get book recommendations</a></p>" );85 out.println( "</body>" );86 87 // end XHTML document88 out.println( "</html>" );89 out.close(); // close stream90 }91 92 // read session attributes and create XHTML document93 // containing recommended books94 protected void doGet( HttpServletRequest request,95 HttpServletResponse response )96 throws ServletException, IOException97 {98 // Get the user's session object.99 // Do not create a session (false) if one does not exist.100 HttpSession session = request.getSession( false );101 102 // get names of session object's values103 Enumeration valueNames;104

Obtains the time at which the session was created with method getCreationTime.

Obtains the time at which the session was last accessed with method getLastAccessedTime.

Uses method getMaxInactiveInterval to obtain the maximum amount of time that an HttpSession object can be inactive before the servlet container discards it.

Obtains the HttpSession object for the client with method getSession.

Page 57: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

57

Maintaining state information with HttpSession objects.

Line 106

105 if ( session != null )106 valueNames = session.getAttributeNames();107 else108 valueNames = null;109 110 PrintWriter out = response.getWriter();111 response.setContentType( "text/html" ); 112 113 // start XHTML document114 out.println( "<?xml version = \"1.0\"?>" );115 116 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +117 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +118 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 119 120 out.println( 121 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );122 123 // head section of document124 out.println( "<head>" );125 out.println( "<title>Recommendations</title>" );126 out.println( "</head>" );127 128 // body section of document129 out.println( "<body>" );130 131 if ( valueNames != null && 132 valueNames.hasMoreElements() ) {133 out.println( "<h1>Recommendations</h1>" );134 out.println( "<p>" );135 136 String name, value; 137

Uses HttpSession method getAttributeNames to retrieve an Enumeration of the attribute names.

Page 58: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

58

Maintaining state information with HttpSession objects.

Line 141

138 // get value for each name in valueNames139 while ( valueNames.hasMoreElements() ) {140 name = valueNames.nextElement().toString();141 value = session.getAttribute( name ).toString();142 143 out.println( name + " How to Program. " +144 "ISBN#: " + value + "<br />" );145 } 146 147 out.println( "</p>" );148 }149 else {150 out.println( "<h1>No Recommendations</h1>" );151 out.println( "<p>You did not select a language.</p>" );152 }153 154 out.println( "</body>" );155 156 // end XHTML document157 out.println( "</html>" );158 out.close(); // close stream159 }160 }

Invokes method getAttribute of HttpSession to retrieve the ISBN of a book from the HttpSession object.

Page 59: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

59

SessionSelectLanguage.html document for selecting a programming language and posting the data to the SessionServlet.

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- SessionSelectLanguage.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Using Sessions</title> 10 </head>11 12 <body>13 <form action = "/test/sessions" method = "post"> 14 15 <p>Select a programming language:</p>16 <p>17 <input type = "radio" name = "language" 18 value = "C" />C <br />19 20 <input type = "radio" name = "language" 21 value = "C++" />C++ <br />22 23 <!-- this radio button checked by default -->24 <input type = "radio" name = "language" 25 value = "Java" checked = "checked" />Java<br />26 27 <input type = "radio" name = "language" 28 value = "VB6" />VB 629 </p>30 31 <p><input type = "submit" value = "Submit" /></p>32 33 </form>34 </body>35 </html>

Page 60: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

60

SessionSelectLanguage.html document for selecting a programming language and posting the data to the SessionServlet.

Program output

Page 61: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

61

SessionSelectLanguage.html document for selecting a programming language and posting the data to the SessionServlet.

Program output

Page 62: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

62

SessionSelectLanguage.html document for selecting a programming language and posting the data to the SessionServlet.

Program output

Page 63: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

63

SessionSelectLanguage.html document for selecting a programming language and posting the data to the SessionServlet.

Program output

Page 64: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

64

Session Tracking with HttpSession (Cont.)

Descriptor element Value servlet element servlet-name sessions description Using sessions to maintain state information. servlet-class com.alliant.test.servlets.SessionServlet servlet-mapping element

servlet-name sessions url-pattern /sessions Deployment descriptor information for servlet WelcomeServlet2.

Page 65: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

65

Multi-Tier Applications: Using JDBC from a Servlet

• Three-tier distributed applications– User interface– Business logic– Database access

• Web servers often represent the middle tier• Three-tier distributed application example

– SurveyServlet– Survey.html– MySQL database

Page 66: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

66

Multi-tier Web-based survey using XHTML, servlets and JDBC.

Lines 16-54

Line 21

Lines 22-23

Lines 27-31

1 // SurveyServlet.java2 // A Web-based survey that uses JDBC from a servlet.3 package com.alliant.test.servlets;4 5 import java.io.*;6 import java.text.*;7 import java.sql.*;8 import javax.servlet.*;9 import javax.servlet.http.*;10 11 public class SurveyServlet extends HttpServlet {12 private Connection connection;13 private PreparedStatement updateVotes, totalVotes, results;14 15 // set up database connection and prepare SQL statements16 public void init( ServletConfig config ) 17 throws ServletException18 {19 // attempt database connection and create PreparedStatements20 try {21 Class.forName( "com.mysql.jdbc.Driver" );22 connection = DriverManager.getConnection(23 "jdbc:mysql://localhost:3306/test" );24 25 // PreparedStatement to add one to vote total for a 26 // specific animal 27 updateVotes =28 connection.prepareStatement(29 "UPDATE surveyresults SET votes = votes + 1 " +30 "WHERE id = ?"31 );32

Servlets are initialized by overriding method init.

Loads the database driver.Attempt to open a connection

to the animalsurvey database.

Create PreparedStatement updateVotes object.

Page 67: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

67

Multi-tier Web-based survey using XHTML, servlets and JDBC.

Lines 34-44

33 // PreparedStatement to sum the votes34 totalVotes =35 connection.prepareStatement(36 "SELECT sum( votes ) FROM surveyresults"37 );38 39 // PreparedStatement to obtain surveyoption table's data40 results =41 connection.prepareStatement(42 "SELECT surveyoption, votes, id " +43 "FROM surveyresults ORDER BY id"44 );45 }46 47 // for any exception throw an UnavailableException to 48 // indicate that the servlet is not currently available49 catch ( Exception exception ) {50 exception.printStackTrace();51 throw new UnavailableException(exception.getMessage());52 }53 54 } // end of init method55 56 // process survey response57 protected void doPost( HttpServletRequest request,58 HttpServletResponse response )59 throws ServletException, IOException60 {61 // set up response to client62 response.setContentType( "text/html" ); 63 PrintWriter out = response.getWriter();64 DecimalFormat twoDigits = new DecimalFormat( "0.00" );65

Create PreparedStatement totalVotes and results objects.

Page 68: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

68

Multi-tier Web-based survey using XHTML, servlets and JDBC.

Lines 80-81

Lines 87-88

Lines 91-93

Lines 96-123

66 // start XHTML document67 out.println( "<?xml version = \"1.0\"?>" );68 69 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " +70 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" +71 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 72 73 out.println( 74 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" );75 76 // head section of document77 out.println( "<head>" ); 78 79 // read current survey response80 int value = 81 Integer.parseInt( request.getParameter( "animal" ) );82 83 // attempt to process a vote and display current results84 try {85 86 // update total for current surevy response87 updateVotes.setInt( 1, value );88 updateVotes.executeUpdate();89 90 // get total of all survey responses91 ResultSet totalRS = totalVotes.executeQuery();92 totalRS.next();93 int total = totalRS.getInt( 1 );94 95 // get results96 ResultSet resultsRS = results.executeQuery();97 out.println( "<title>Thank you!</title>" );98 out.println( "</head>" ); 99

Obtain the survey response

Set the first parameter of PreparedStatement updateVotes to the survey response and update the database.

Execute PreparedStatement totalVotes to retrieve the total number of votes received.

Execute PreparedStatement results and process the ResultSet to create the survey summary for the client.

Page 69: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

69

Multi-tier Web-based survey using XHTML, servlets and JDBC.

100 out.println( "<body>" ); 101 out.println( "<p>Thank you for participating." );102 out.println( "<br />Results:</p><pre>" );103 104 // process results105 int votes;106 107 while ( resultsRS.next() ) {108 out.print( resultsRS.getString( 1 ) );109 out.print( ": " );110 votes = resultsRS.getInt( 2 );111 out.print( twoDigits.format( 112 ( double ) votes / total * 100 ) );113 out.print( "% responses: " );114 out.println( votes );115 }116 117 resultsRS.close();118 119 out.print( "Total responses: " );120 out.print( total );121 122 // end XHTML document123 out.println( "</pre></body></html>" ); 124 out.close();125 }126 127 // if database exception occurs, return error page128 catch ( SQLException sqlException ) {129 sqlException.printStackTrace();130 out.println( "<title>Error</title>" );131 out.println( "</head>" ); 132 out.println( "<body><p>Database error occurred. " );133 out.println( "Try again later.</p></body></html>" );134 out.close();

Page 70: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

70

Multi-tier Web-based survey using XHTML, servlets and JDBC.

Lines 140-154

135 }136 137 } // end of doPost method138 139 // close SQL statements and database when servlet terminates140 public void destroy()141 {142 // attempt to close statements and database connection143 try {144 updateVotes.close();145 totalVotes.close();146 results.close();147 connection.close();148 }149 150 // handle database exceptions by returning error to client151 catch( SQLException sqlException ) {152 sqlException.printStackTrace();153 }154 } // end of destroy method155 }

Method destroy closes each PreparedStatement and database connection.

Page 71: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

71

Survey.html document that allows users to submit survey responses to SurveyServlet.

1 <?xml version = "1.0"?>2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">4 5 <!-- Survey.html -->6 7 <html xmlns = "http://www.w3.org/1999/xhtml">8 <head>9 <title>Survey</title>10 </head>11 12 <body>13 <form method = "post" action = "/test/animalsurvey">14 15 <p>What is your favorite pet?</p>16 17 <p>18 <input type = "radio" name = "animal" 19 value = "1" />Dog<br />20 <input type = "radio" name = "animal" 21 value = "2" />Cat<br />22 <input type = "radio" name = "animal" 23 value = "3" />Bird<br />24 <input type = "radio" name = "animal" 25 value = "4" />Snake<br />26 <input type = "radio" name = "animal" 27 value = "5" checked = "checked" />None28 </p>29 30 <p><input type = "submit" value = "Submit" /></p>31 32 </form>33 </body>34 </html>

Page 72: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

72

Survey.html document that allows users to submit survey responses to SurveyServlet.

Page 73: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

73

Multi-Tier Applications: Using JDBC from a Servlet (Cont.)

Descriptor element Value servlet element servlet-name animalsurvey description Connecting to a database from a servlet. servlet-class com.alliant.test.servlets.SurveyServlet servlet-mapping element

servlet-name animalsurvey url-pattern /animalsurvey Deployment descriptor information for servlet SurveyServlet.

Page 74: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

74

Servlet Context• Defined by an object of ServletContext type.• Defines a servlet’s view of the web application

within which the servlet is running. • Allows a servlet to access resources available to it.• Using such an object, a servlet can log events,

obtain URL references to resources, and set and store attributes that other servlets in the context can use.

Page 75: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

75

Servlet Context - Sample• We can change the init() method of the SurveyServlet as below:

• Then we need to amend the web.xml file to specify the initial context parameters:

Page 76: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

76

Sending Multimedia Content

• People want to return different MIME types • The most common use of a different MIME type

is for returning an image graphic generated by a servlet

• The example next slide is an example of a servlet that generates and returns a GIF image. The graphic says “Hello World!”

Page 77: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

77

HelloWorldGraphics that responds to with a gif graphic

1 // HelloWorldGraphics .java2 // A simple servlet to generate an on the fly image.3 package com.alliant.test.servlets;4 5 import javax.servlet.*;6 import javax.servlet.http.*;7 import java.io.*;8 import Acme.JPM.Encoders.GifEncoder;9 public class HelloWorldGraphics extends HttpServlet { 10 11 public void doGet(HttpServletRequest req, HttpServletResponse res)12 throws ServletException, IOException {13 ServletOutputStream out = res.getOutputStream(); // binary output!14 15 Frame frame = null;12 Graphics g = null;13 try {14 // Create an unshown frame15 frame = new Frame();16 frame.addNotify();17 // Get a graphics region, using the Frame18 Image image = frame.createImage(400, 60);19 g = image.getGraphics();20 // Draw "Hello World!" to the off-screen graphics context21 g.setFont(new Font("Serif", Font.ITALIC, 48));22 g.drawString("Hello World!", 10, 50);23 // Encode the off-screen image into a GIF and send it to the client24 res.setContentType("image/gif");25 GifEncoder encoder = new GifEncoder(image, out);26 encoder.encode();27 }28 finally {29 // Clean up resources30 if (g != null) g.dispose();31 if (frame != null) frame.removeNotify();• }• }• }

Page 78: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

78

Servlet Filter• New component framework• Dynamically intercepting and modifying requests

and responses• Apply filters to web components or pages• Allows range of activities:

– Marking access, blocking access – Content transformations

• Works on Tomcat4.0 and above• Examples of servlet filters can be found on:

• http://java.sun.com/developer/EJTechTips/2002/tt0813.html• http://java.sun.com/developer/EJTechTips/2002/tt0919.html#1

Page 79: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

79

What is a Filter?• A reusable piece of code• Transform the content of HTTP requests,

response, and header information• Do not generally create response or responding to

requests• Attached to one or more servlets• Modify or adapt the request/response for a

resource• Act on dynamic or static content – web resources

Page 80: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

80

Importance and Benefits• Provide the ability to encapsulate recurring tasks

in reusable units– Developers have ways to modularize the code– Code is more manageable, documentable, reusable and easy

to debug

• Separate high-level access decisions from presentation code– Separate business logic from presentation

• Apply wholesale changes to many different resources

Page 81: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

81

Examples of Filters• Authentication

– Blocking requests based on user identity

• Logging and auditing– Tracking user of a web application

• Image conversion– Scaling maps, and so on

• Localization– Targeting the request and response to a particular locale

• XSLT transformations of XML content– Targeting web application response s to more than one type

of client

Page 82: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

82

Examples of Filters (Cont)• Data compression

– Making downloads smaller

• Encryption• Filters that trigger resource access events• Mime-type chain filters• Caching• …

Page 83: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

83

Type of Filters• pre-processing servlet filter

• The client sends a request to the server. The servlet filter intercepts the request.

• The servlet filter pre-processes the request. • The servlet filter calls chain.doFilter to invoke either the next

filter in the chain, or the target Web component. • The Web component returns a response to the client.

Page 84: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

84

Type of Filters• post-processing servlet filter

• The client sends a request to the server. The servlet filter intercepts the request.

• The servlet filter passes the request to the filter chain by calling chain.doFilter.

• After all filters have been invoked, the Web component returns its content.

• The servlet filter post-processes the Web component's response. • The filter returns the response to the client.

Page 85: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

85

Multiple Filters

Page 86: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

86

How Servlet Filter Work?

Page 87: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

87

Basic Steps to Create Filters• Create a class that implements the Filter interface

– Implement three methods doFilter(), init(), and destroy()• Put filtering behavior in doFilter() method• Call doFilter() method of FilterChain object

– When doFilter() is invoked from FilterChain object, the next associated filter is invoked

– If no other filter is associated, servlets themselves invoked• Register the filter with appropriate servlets and

JSP pages– Use filter and filter-mapping elements in the deployment

descriptor(web.xml)– Apply filters to resources by specifying the URL to which

filters apply

Page 88: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

88

Filter - Code Samples• Blocking filter:

– Filter that refuses access to anyone connecting directly from or following a link from a banned site

Page 89: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

89

BannedAccessFilter.java

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;import java.net.*;public class BannedAccessFilter implements Filter{ private HashSet bannedSiteTable; /** Deny access if the request comes from a banned site * or is referred here by a banned site. */ public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws ServletException, IOException { HttpServletRequest req = (HttpServletRequest)request; String requestingHost = req.getRemoteHost(); String referringHost = getReferringHost(req.getHeader("Referer")); String bannedSite = null; boolean isBanned = false; if (bannedSiteTable.contains(requestingHost)) { bannedSite = requestingHost; isBanned = true; } else if (bannedSiteTable.contains(referringHost)) { bannedSite = referringHost; isBanned = true; }

Page 90: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

90

BannedAccessFilter.java

if (isBanned) { showWarning(response, bannedSite); } else { chain.doFilter(request,response); } }

/** Create a table of banned sites based on initialization * parameters . Remember that version 2.3 of the servlet * API mandates the use of the Java 2 Platform. Thus, * it is safe to use HashSet (which determines whether * a given key exists) rather than the clumsier * Hashtable (which has a value for each key). */ public void init(FilterConfig config) throws ServletException { bannedSiteTable = new HashSet(); String bannedSites = config.getInitParameter("bannedSites"); // Default token set: white space. StringTokenizer tok = new StringTokenizer(bannedSites); while(tok.hasMoreTokens()) { String bannedSite = tok.nextToken(); bannedSiteTable.add(bannedSite); System.out.println("Banned " + bannedSite); } }

Page 91: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

91

BannedAccessFilter.java

public void destroy() {}

private String getReferringHost(String refererringURLString) { try { URL referringURL = new URL(refererringURLString); return(referringURL.getHost()); } catch(MalformedURLException mue) { // Malformed or null return(null); } }

// Replacement response that is returned to users // who are from or referred here by a banned site.

private void showWarning(ServletResponse response, String bannedSite) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n";

Page 92: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Outline

Java Stream

92

BannedAccessFilter.java

out.println (docType + "<HTML>\n" + "<HEAD><TITLE>Access Prohibited</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"WHITE\">\n" + "<H1>Access Prohibited</H1>\n" + "Sorry, access from or via " + bannedSite + "\n" + "is not allowed.\n" + "</BODY></HTML>"); }}

Page 93: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

93

Blocking Access Filter Configuration: Web.xml

Page 94: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

94

Servlet Lifecycle Events• From Java Servlet 2.3• New events framework• More global control than any one servlet or JSP

can provide• Support event notifications for state changes in

ServletContext and HttpSession objects• Scope

– ServletContext: manage state held at a VM level for the application

– HttpSession: manage state or resources associated with a series of requests from the same user/session

– In distributed containers, one listener instance /deployment descriptor declaration / java VM

Page 95: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

95

ServletContext and HttpSession• Interesting things on the servlet contexts:

– Manage– Startup/shutdown– Attribute changes

• Interesting events on HTTP sessions:– Creation and invalidation– Changes in attributes– Migration across distributed containers

• Attribute changes to both objects may occur concurrently– No synchronization support in container– Listener classes need to support data integrity

Page 96: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

96

Java Servlet 2.3 API—Listening Interfaces

– ServletContextListener• contextInitialized/Destroyed(ServletContextEvent)

– ServletContextAttributeListener• attributeAdded/Removed/Replaced(ServletContextAttributeEvent)

– HttpSessionListener• sessionCreated/Destroyed(HttpSessionEvent)

– HttpSessionAttributeListener• attributedAdded/Removed/Replaced(HttpSessionBindingEvent)

Page 97: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

97

Basic Steps for Implementing Event Listeners

– Create a new class that implements the appropriate interface– Override the methods needed to respond to the events of

interest– Obtain access to the important Web application objects

• Servlet context• Servlet context attribute, its name and value• Session, session attribute name and value

– Use these objects• e.g. Servlet context: getInitParameter(), setAttribute() and

getAttribute()– Declare the listener

• Configure listener and listener-class in web.xml – Provide any needed initialization parameters

Page 98: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

98

Example – A Session Counter Listener• Implement the session counter:

Page 99: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

99

Example – A Session Counter Listener (cont.)

• Show session counter status:

Page 100: Java Stream 1 11.1 Introduction 11.2 Servlet Overview and Architecture 11.2.1 Interface Servlet and the Servlet Life Cycle 11.2.2 HttpServlet Class 11.2.3

Java Stream

100

Example – A Session Counter Listener (cont.)

• Configure the web.xml