Download presentation
Presentation is loading. Please wait.
Published byGrant Blake Modified over 9 years ago
1
2001 Prentice Hall, Inc. All rights reserved. 1 Chapter 31 - JavaServer Pages (JSP): Bonus for Java™ Developers Outline 31.1 Introduction 31.2 JavaServer Pages Overview 31.3 A First JavaServer Page Example 31.4 Implicit Objects 31.5 Scripting 31.5.1 Scripting Components 31.5.2 Scripting Example 31.6 Standard Actions 31.6.1 Action 31.6.2 Action 31.6.3 Action 31.6.4 Action 31.7 Directives 31.7.1 page Directive 31.7.2 include Directive
2
2001 Prentice Hall, Inc. All rights reserved. 2 Chapter 31 - JavaServer Pages (JSP): Bonus for Java™ Developers Outline 31.8 Custom Tag Libraries 31.8.1 Simple Custom Tag 31.8.2 Custom Tag with Attributes 31.8.3 Evaluating the Body of a Custom Tag 31.9 World Wide Web Resources
3
2001 Prentice Hall, Inc. All rights reserved. 3 31.1 Introduction JavaServer Pages (JSP) –Extension of servlet technology Designed to simplify dynamic content delivery –Additional packages Package javax.servlet.jsp –Contains main JSP classes and methods Package javax.servlet.jsp.tagtest –Contains custom tag classes and methods
4
2001 Prentice Hall, Inc. All rights reserved. 4 31.2 JavaServer Pages Overview Key Componenets –Directives Define settings of JSP container –Actions Encapsulate predefined tag actions Often performed based upon client request Also Create Java Objects for scriplets –Scriptlets Enable Java code within a JSP –Tag libraries Tag extension mechanism –User defined custom tags
5
2001 Prentice Hall, Inc. All rights reserved. 5 31.2 JavaServer Pages Overview JSPs Vs. Servlets –JSPs Look like XHTML documents Used when most content is fixed –Servlets Used when most content is dynamic –JSPs and servlets are interchangeable JSPs are compiled to servlets at first request Life-cycle is identical
6
2001 Prentice Hall, Inc. All rights reserved. 6 31.3 A First JavaServer Page Example Upcoming JavaServer Page Example
7
2001 Prentice Hall, Inc. All rights reserved. Outline 7 Clock.jsp Simple JSP expression 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 A Simple JSP Example 13 14 15.big { font-family: helvetica, arial, sans-serif; 16 font-weight: bold; 17 font-size: 2em; } 18 19 20 21 22 Simple JSP Example 23 24 25 26 27 28 29 30 31 32 33 34 JSP expressions deliniated by. This will insert a string representation of the date.
8
2001 Prentice Hall, Inc. All rights reserved. Outline 8 Clock.jsp Program Output 35 36 37 38
9
2001 Prentice Hall, Inc. All rights reserved. 9 30.4 Implicit Objects Implicit Objects –Provide access to servlet capabilities within JSPs –Scopes Application –Owned by JSP container –Manipulatable by any Servlet or Application Page –Exist in page that defined them –Individual instance for each page Request –Exist for duration of request Session –Exist for entire client session
10
2001 Prentice Hall, Inc. All rights reserved. 10 31.4 Implicit Objects
11
2001 Prentice Hall, Inc. All rights reserved. 11 31.4 Implicit Objects
12
2001 Prentice Hall, Inc. All rights reserved. 12 31.5 Scripting Scripting –Allows JSPs to place Java code within page
13
2001 Prentice Hall, Inc. All rights reserved. 13 31.5.1 Scripting Components Scripting components –Scriptlets Delimited by Blocks of Java code –Comments Scriptlet Comments delimiated by / and / JSP comments delimited by XHTML comments delimited by –Expressions Delimited by Result converted to a String object
14
2001 Prentice Hall, Inc. All rights reserved. 14 30.5.1 Scripting Components Scripting Components –Declarations Delimited by Define variables and methods Require terminating semicolon –Escape sequences Upcoming table
15
2001 Prentice Hall, Inc. All rights reserved. 15 31.5.1 Scripting Components
16
2001 Prentice Hall, Inc. All rights reserved. 16 31.5.2 Scripting Example Upcoming example –Demonstrates basic scripting
17
2001 Prentice Hall, Inc. All rights reserved. Outline 17 Welcome.jsp Demonstrate scriptlet and expressions 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 Processing "get" requests with data 13 14 15 16 17 <% // begin scriptlet 18 19 String name = request.getParameter( "firstName" ); 20 21 if ( name != null ) { 22 23 %> 24 25 26 Hello, 27 Welcome to JavaServer Pages! 28 29 30 <% // continue scriptlet 31 32 } // end if 33 else { 34 Obtain request parameter via scriptlet. Expression will display the string value of name
18
2001 Prentice Hall, Inc. All rights reserved. Outline 18 Welcome.jsp 35 %> 36 37 38 Type your first name and press Submit 39 40 41 42 43 44 45 <% // continue scriptlet 46 47 } // end else 48 49 %> 50 51 52
19
2001 Prentice Hall, Inc. All rights reserved. Outline 19 Welcome.jsp Program Output
20
2001 Prentice Hall, Inc. All rights reserved. 20 30.6 Standard Actions Standard actions –Provide access to common JSP tasks Including resource content Forwarding Requests Interacting with JavaBeans Processed by container at request time Delimited by and –Actions defined in upcoming table
21
2001 Prentice Hall, Inc. All rights reserved. 21 31.6 Standard Actions
22
2001 Prentice Hall, Inc. All rights reserved. 22 31.6.1 action Enables dynamic content inclusion –Creates copy of resource Often are XHTML or other JSP pages
23
2001 Prentice Hall, Inc. All rights reserved. 23 31.6.1 Action
24
2001 Prentice Hall, Inc. All rights reserved. 24 31.6.1 Action Upcoming example –Uses the action to add HTML and JSP pages
25
2001 Prentice Hall, Inc. All rights reserved. Outline 25 Banner.html 1 2 3 4 5 Java(TM), C, C++, Visual Basic(R), 6 Object Technology, and Internet and 7 World Wide Web Programming Training 8 On-Site Seminars Delivered Worldwide 9 10 11 12 13 deitel@deitel.com 14 15 978.579.9911 16 490B Boston Post Road, Suite 200, 17 Sudbury, MA 01776 18 19
26
2001 Prentice Hall, Inc. All rights reserved. Outline 26 Toc.html 1 2 3 4 5 Publications/BookStore 6 7 8 9 What's New 10 11 12 13 Downloads/Resources 14 15 16 17 FAQ (Frequently Asked Questions) 18 19 20 21 Who we are 22 23 24 25 Home Page 26 27 28 Send questions or comments about this site to 29 30 deitel@deitel.com 31 32 Copyright 1995-2002 by Deitel & Associates, Inc. 33 All Rights Reserved. 34
27
2001 Prentice Hall, Inc. All rights reserved. Outline 27 Clock2.jsp 1 2 3 4 5 6 7 <p class = "big" style = "color: cyan; font-size: 3em; 8 font-weight: bold;"> 9 10 11 12 13 14
28
2001 Prentice Hall, Inc. All rights reserved. Outline 28 Include.jsp 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 Using jsp:include 11 12 13 body { 14 font-family: tahoma, helvetica, arial, sans-serif; 15 } 16 17 table, tr, td { 18 font-size:.9em; 19 border: 3px groove; 20 padding: 5px; 21 background-color: #dddddd; 22 } 23 24 25 26 27 28 29 30 <img src = "images/logotiny.png" 31 width = "140" height = "93" 32 alt = "Deitel & Associates, Inc. Logo" /> 33 34 35
29
2001 Prentice Hall, Inc. All rights reserved. Outline 29 Include.jsp 36 37 38 <jsp:include page = "banner.html" 39 flush = "true" /> 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 <jsp:include page = "clock2.jsp" 56 flush = "true" /> 57 58 59 60 61 62 action tag, accesses external resources.
30
2001 Prentice Hall, Inc. All rights reserved. Outline 30 Include.jsp Program Output
31
2001 Prentice Hall, Inc. All rights reserved. 31 31.6.2 Action action –Enables the JSP to redirect client –Current JSP halts processing, immediately transfers client –Page attribute determines forwarding location –Upcoming example demonstrates forward action
32
2001 Prentice Hall, Inc. All rights reserved. Outline 32 Forward1.jsp 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 Forward request to another JSP 11 12 13 14 <% // begin scriptlet 15 16 String name = request.getParameter( "firstName" ); 17 18 if ( name != null ) { 19 20 %> 21 22 23 <jsp:param name = "date" 24 value = " " /> 25 26 27 <% // continue scriptlet 28 29 } // end if 30 else { 31 32 %> 33 34 35 Type your first name and press Submit If the firstname parameter is specified, forward the user to the second page with the current date.
33
2001 Prentice Hall, Inc. All rights reserved. Outline 33 Forward1.jsp Program Output 36 37 38 39 40 41 42 <% // continue scriptlet 43 44 } // end else 45 46 %> 47 48 49
34
2001 Prentice Hall, Inc. All rights reserved. Outline 34 Forward2.jsp 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"v 8 9 10 Processing a forwarded request 11 12 13.big { 14 font-family: tahoma, helvetica, arial, sans-serif; 15 font-weight: bold; 16 font-size: 2em; 17 } 18 19 20 21 22 23 Hello, 24 Your request was received and forwarded at 25 26 27 28 29 30 31 32 33 34 35
35
2001 Prentice Hall, Inc. All rights reserved. Outline 35 Forward2.jsp Program Output 36 37 38
36
2001 Prentice Hall, Inc. All rights reserved. 36 31.6.3 Action Action –Adds applet, JavaBean or XHTML element –Enables the client to download Java plug-in –Upcoming table shows plug-in attributes
37
2001 Prentice Hall, Inc. All rights reserved. 37 31.6.3 Action
38
2001 Prentice Hall, Inc. All rights reserved. 38 31.6.3 Action Upcoming Example –Applet draws a picture via Java2d –JSP displays applet and embeds java plug-in Ensures all clients can view applet
39
2001 Prentice Hall, Inc. All rights reserved. Outline 39 ShapesApplet.jav a Define Applet ShapesApplet Initialize applet 1 // Fig. 31.14: ShapesApplet.java 2 // Applet that demonstrates a Java2D GeneralPath. 3 package com.deitel.advjhtp1.jsp.applet; 4 5 // Java core packages 6 import java.applet.*; 7 import java.awt.event.*; 8 import java.awt.*; 9 import java.awt.geom.*; 10 11 // Java extension packages 12 import javax.swing.*; 13 14 public class ShapesApplet extends JApplet { 15 16 // initialize the applet 17 public void init() 18 { 19 // obtain color parameters from XHTML file 20 try { 21 int red = Integer.parseInt( getParameter( "red" ) ); 22 int green = Integer.parseInt( getParameter( "green" ) ); 23 int blue = Integer.parseInt( getParameter( "blue" ) ); 24 25 Color backgroundColor = new Color( red, green, blue ); 26 27 setBackground( backgroundColor ); 28 } 29 30 // if there is an exception while processing the color 31 // parameters, catch it and ignore it 32 catch ( Exception exception ) { 33 // do nothing 34 } 35 }
40
2001 Prentice Hall, Inc. All rights reserved. Outline 40 ShapesApplet.jav a Draw shapes 36 37 public void paint( Graphics g ) 38 { 39 // create arrays of x and y coordinates 40 int xPoints[] = 41 { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 }; 42 int yPoints[] = 43 { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 }; 44 45 // obtain reference to a Graphics2D object 46 Graphics2D g2d = ( Graphics2D ) g; 47 48 // create a star from a series of points 49 GeneralPath star = new GeneralPath(); 50 51 // set the initial coordinate of the GeneralPath 52 star.moveTo( xPoints[ 0 ], yPoints[ 0 ] ); 53 54 // create the star--this does not draw the star 55 for ( int k = 1; k < xPoints.length; k++ ) 56 star.lineTo( xPoints[ k ], yPoints[ k ] ); 57 58 // close the shape 59 star.closePath(); 60 61 // translate the origin to (200, 200) 62 g2d.translate( 200, 200 ); 63 64 // rotate around origin and draw stars in random colors 65 for ( int j = 1; j <= 20; j++ ) { 66 g2d.rotate( Math.PI / 10.0 ); 67 68 g2d.setColor( 69 new Color( ( int ) ( Math.random() * 256 ), 70 ( int ) ( Math.random() * 256 ),
41
2001 Prentice Hall, Inc. All rights reserved. Outline 41 ShapesApplet.jav a 71 ( int ) ( Math.random() * 256 ) ) ); 72 73 g2d.fill( star ); // draw a filled star 74 } 75 } 76 }
42
2001 Prentice Hall, Inc. All rights reserved. Outline 42 Plugin.jsp use plugin action 1 2 3 4 5 6 Using jsp:plugin to load an applet 7 8 9 10 <jsp:plugin type = "applet" 11 code = "com.deitel.advjhtp1.jsp.applet.ShapesApplet" 12 codebase = "/advjhtp1/jsp" 13 width = "400" 14 height = "400"> 15 16 17 18 19 20 21 22 23 24 The JSP plugin parameter includes the applet in the page, and ensures the client has the Java plug-in.
43
2001 Prentice Hall, Inc. All rights reserved. Outline 43 Plugin.jsp Program Output
44
2001 Prentice Hall, Inc. All rights reserved. 44 31.6.4 Action Action –Enables JSP to manipulate a Java Object –Same scope as implicit objects –Must specify attribute class or type Attribute type will locate an existing object Attribute class will create a new object Upcoming table includes other useBean attributes
45
2001 Prentice Hall, Inc. All rights reserved. 45 31.6.4 Action
46
2001 Prentice Hall, Inc. All rights reserved. 46 31.6.4 Action Upcoming example –Demonstrates useBean action –Loads advertisement rotator
47
2001 Prentice Hall, Inc. All rights reserved. Outline 47 Rotator.java Define JavaBean Rotator 1 // Fig. 31.17: Rotator.java 2 // A JavaBean that rotates advertisements. 3 package com.deitel.advjhtp1.jsp.beans; 4 5 public class Rotator { 6 private String images[] = { "images/jhtp3.jpg", 7 "images/xmlhtp1.jpg", "images/ebechtp1.jpg", 8 "images/iw3htp1.jpg", "images/cpphtp3.jpg" }; 9 10 private String links[] = { 11 "http://www.amazon.com/exec/obidos/ASIN/0130125075/" + 12 "deitelassociatin", 13 "http://www.amazon.com/exec/obidos/ASIN/0130284173/" + 14 "deitelassociatin", 15 "http://www.amazon.com/exec/obidos/ASIN/013028419X/" + 16 "deitelassociatin", 17 "http://www.amazon.com/exec/obidos/ASIN/0130161438/" + 18 "deitelassociatin", 19 "http://www.amazon.com/exec/obidos/ASIN/0130895717/" + 20 "deitelassociatin" }; 21 22 private int selectedIndex = 0; 23 24 // returns image file name for current ad 25 public String getImage() 26 { 27 return images[ selectedIndex ]; 28 } 29 30 // returns the URL for ad's corresponding Web site 31 public String getLink() 32 { 33 return links[ selectedIndex ]; 34 } 35
48
2001 Prentice Hall, Inc. All rights reserved. Outline 48 Rotator.java 36 // update selectedIndex so next calls to getImage and 37 // getLink return a different advertisement 38 public void nextAd() 39 { 40 selectedIndex = ( selectedIndex + 1 ) % images.length; 41 } 42 }
49
2001 Prentice Hall, Inc. All rights reserved. Outline 49 Adrotator.jsp 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 <jsp:useBean id = "rotator" scope = "application" 8 class = "com.deitel.advjhtp1.jsp.beans.Rotator" /> 9 10 11 12 13 AdRotator Example 14 15 16.big { font-family: helvetica, arial, sans-serif; 17 font-weight: bold; 18 font-size: 2em } 19 20 21 22 23 24 25 26 AdRotator Example 27 28 29 <a href = "<jsp:getProperty name = "rotator" 30 property = "link" />"> 31 32 <img src = "<jsp:getProperty name = "rotator" 33 property = "image" />" alt = "advertisement" /> 34 Create a new instance of the rotator bean named rotator. getProperty action functions the same as calling rotator.getLink()
50
2001 Prentice Hall, Inc. All rights reserved. Outline 50 Adrotator.jsp Program Output 35 36 37
51
2001 Prentice Hall, Inc. All rights reserved. 51 31.6.4 Action
52
2001 Prentice Hall, Inc. All rights reserved. 52 31.6.4 Action Upcoming example –GuestBook application Stores information in a database –Database connectivity via JavaBean
53
2001 Prentice Hall, Inc. All rights reserved. Outline 53 GuestBean.java Define Bean GuestBean Storage Bean 1 // Fig. 31.20: GuestBean.java 2 // JavaBean to store data for a guest in the guest book. 3 package com.deitel.advjhtp1.jsp.beans; 4 5 public class GuestBean { 6 private String firstName, lastName, email; 7 8 // set the guest's first name 9 public void setFirstName( String name ) 10 { 11 firstName = name; 12 } 13 14 // get the guest's first name 15 public String getFirstName() 16 { 17 return firstName; 18 } 19 20 // set the guest's last name 21 public void setLastName( String name ) 22 { 23 lastName = name; 24 } 25 26 // get the guest's last name 27 public String getLastName() 28 { 29 return lastName; 30 } 31 32 // set the guest's email address 33 public void setEmail( String address ) 34 { 35 email = address;
54
2001 Prentice Hall, Inc. All rights reserved. Outline 54 GuestBean.java 36 } 37 38 // get the guest's email address 39 public String getEmail() 40 { 41 return email; 42 } 43 }
55
2001 Prentice Hall, Inc. All rights reserved. Outline 55 GuestDataBean.ja va Define Class GuestDataBean Set up database 1 // Fig. 31.21: GuestDataBean.java 2 // Class GuestDataBean makes a database connection and supports 3 // inserting and retrieving data from the database. 4 package com.deitel.advjhtp1.jsp.beans; 5 6 // Java core packages 7 import java.io.*; 8 import java.sql.*; 9 import java.util.*; 10 11 public class GuestDataBean { 12 private Connection connection; 13 private PreparedStatement addRecord, getRecords; 14 15 // construct TitlesBean object 16 public GuestDataBean() throws Exception 17 { 18 // load the Cloudscape driver 19 Class.forName( "COM.cloudscape.core.RmiJdbcDriver" ); 20 21 // connect to the database 22 connection = DriverManager.getConnection( 23 "jdbc:rmi:jdbc:cloudscape:guestbook" ); 24 25 getRecords = 26 connection.prepareStatement( 27 "SELECT firstName, lastName, email FROM guests" 28 ); 29 30 addRecord = 31 connection.prepareStatement( 32 "INSERT INTO guests ( " + 33 "firstName, lastName, email ) " + 34 "VALUES ( ?, ?, ? )" 35 ); Defines the database driver, URL, and SQL statements.
56
2001 Prentice Hall, Inc. All rights reserved. Outline 56 GuestDataBean.ja va Database access methods 36 } 37 38 // return an ArrayList of GuestBeans 39 public List getGuestList() throws SQLException 40 { 41 List guestList = new ArrayList(); 42 43 // obtain list of titles 44 ResultSet results = getRecords.executeQuery(); 45 46 // get row data 47 while ( results.next() ) { 48 GuestBean guest = new GuestBean(); 49 50 guest.setFirstName( results.getString( 1 ) ); 51 guest.setLastName( results.getString( 2 ) ); 52 guest.setEmail( results.getString( 3 ) ); 53 54 guestList.add( guest ); 55 } 56 57 return guestList; 58 } 59 60 // insert a guest in guestbook database 61 public void addGuest( GuestBean guest ) throws SQLException 62 { 63 addRecord.setString( 1, guest.getFirstName() ); 64 addRecord.setString( 2, guest.getLastName() ); 65 addRecord.setString( 3, guest.getEmail() ); 66 67 addRecord.executeUpdate(); 68 } 69 70 // close statements and terminate database connection Obtain the guest list from the database. Return each guest in a bean.
57
2001 Prentice Hall, Inc. All rights reserved. Outline 57 GuestDataBean.ja va Close database 71 protected void finalize() 72 { 73 // attempt to close database connection 74 try { 75 getRecords.close(); 76 addRecord.close(); 77 connection.close(); 78 } 79 80 // process SQLException on close operation 81 catch ( SQLException sqlException ) { 82 sqlException.printStackTrace(); 83 } 84 } 85 }
58
2001 Prentice Hall, Inc. All rights reserved. Outline 58 GuestBookLogin.j sp useBean action 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 <jsp:useBean id = "guest" scope = "page" 12 class = "com.deitel.advjhtp1.jsp.beans.GuestBean" /> 13 <jsp:useBean id = "guestData" scope = "request" 14 class = "com.deitel.advjhtp1.jsp.beans.GuestDataBean" /> 15 16 17 18 19 Guest Book Login 20 21 22 body { 23 font-family: tahoma, helvetica, arial, sans-serif; 24 } 25 26 table, tr, td { 27 font-size:.9em; 28 border: 3px groove; 29 padding: 5px; 30 background-color: #dddddd; 31 } 32 33 34 35 Obtain an instance of each bean. Assigns the bean name within the JSP.
59
2001 Prentice Hall, Inc. All rights reserved. Outline 59 GuestBookLogin.j sp Obtain information from user 36 37 38 <% // start scriptlet 39 40 if ( guest.getFirstName() == null || 41 guest.getLastName() == null || 42 guest.getEmail() == null ) { 43 44 %> 45 46 47 Enter your first name, last name and email 48 address to register in our guest book. 49 50 51 52 First name 53 54 55 56 57 58 59 60 Last name 61 62 63 64 65 66 67 68 Email 69 70
60
2001 Prentice Hall, Inc. All rights reserved. Outline 60 GuestBookLogin.j sp Add new guest to book 71 72 73 74 75 76 77 <input type = "submit" 78 value = "Submit" /> 79 80 81 82 83 84 <% // continue scriptlet 85 86 } // end if 87 else { 88 guestData.addGuest( guest ); 89 90 %> 91 92 93 94 95 <% // continue scriptlet 96 97 } // end else 98 99 %> 100 101 102 Calls the guestData Bean to write this new guest into the address book. The forward the client to the guestBookView JSP.
61
2001 Prentice Hall, Inc. All rights reserved. Outline 61 GuestBookView.js p 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 13 <jsp:useBean id = "guestData" scope = "request" 14 class = "com.deitel.advjhtp1.jsp.beans.GuestDataBean" /> 15 16 17 18 19 Guest List 20 21 22 body { 23 font-family: tahoma, helvetica, arial, sans-serif; 24 } 25 26 table, tr, td, th { 27 text-align: center; 28 font-size:.9em; 29 border: 3px groove; 30 padding: 5px; 31 background-color: #dddddd; 32 } 33 34 35 Obtain an instance of the GuestDataBean class with useBean action.
62
2001 Prentice Hall, Inc. All rights reserved. Outline 62 GuestBookView.js p 36 37 Guest List 38 39 40 41 42 Last name 43 First name 44 Email 45 46 47 48 49 50 <% // start scriptlet 51 52 List guestList = guestData.getGuestList(); 53 Iterator guestListIterator = guestList.iterator(); 54 GuestBean guest; 55 56 while ( guestListIterator.hasNext() ) { 57 guest = ( GuestBean ) guestListIterator.next(); 58 59 %> 60 61 62 63 64 65 66 67 "> 68 69 70 Obtain, then Iterate through the guestList and display its contents.
63
2001 Prentice Hall, Inc. All rights reserved. Outline 63 GuestBookView.js p 71 72 <% // continue scriptlet 73 74 } // end while 75 76 %> 77 78 79 80 81 82
64
2001 Prentice Hall, Inc. All rights reserved. Outline 64 GuestBookErrorPa ge.jsp Error page 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 13 14 15 Error! 16 17 18.bigRed { 19 font-size: 2em; 20 color: red; 21 font-weight: bold; 22 } 23 24 25 26 27 28 29 <% // scriptlet to determine exception type 30 // and output beginning of error message 31 if ( exception instanceof SQLException ) 32 %> 33 34 An SQLException 35
65
2001 Prentice Hall, Inc. All rights reserved. Outline 65 GuestBookErrorPa ge.jsp 36 <% 37 else if ( exception instanceof ClassNotFoundException ) 38 %> 39 40 A ClassNotFoundException 41 42 <% 43 else 44 %> 45 46 An exception 47 48 49 50 51 occurred while interacting with the guestbook database. 52 53 54 55 The error message was: 56 57 58 59 Please try again later 60 61 62
66
2001 Prentice Hall, Inc. All rights reserved. 66 31.6.4 Action Fig. 31.25JSP guest book sample output windows.
67
2001 Prentice Hall, Inc. All rights reserved. 67 31.6.4 Action Fig. 31.25JSP guest book sample output windows.
68
2001 Prentice Hall, Inc. All rights reserved. 68 31.6.4 Action Fig. 31.25JSP guest book sample output windows.
69
2001 Prentice Hall, Inc. All rights reserved. 69 31.6.4 Action Fig. 31.25JSP guest book sample output windows.
70
2001 Prentice Hall, Inc. All rights reserved. 70 31.7 Directives Directive Overview –Information sent to JSP container to specify properties Error pages Include external content Specify custom tag libraries Delimited by Processed when JSP is translated
71
2001 Prentice Hall, Inc. All rights reserved. 71 31.7 Directives
72
2001 Prentice Hall, Inc. All rights reserved. 72 31.7.1 page Directive Page directive –Specifies global JSP Settings –Specific attributes on upcomming table
73
2001 Prentice Hall, Inc. All rights reserved. 73 31.7.1 page Directive
74
2001 Prentice Hall, Inc. All rights reserved. 74 31.7.1 page Directive
75
2001 Prentice Hall, Inc. All rights reserved. 75 31.7.2 include Directive Directive include –Includes content of another source in page –Attribute file Only attribute Specifies URL of resource to include –Differences from Action Include action updates resource each refresh –Changes in resource are reflected in page Include directive maintains the original resource –Upcoming example Reimplements include.jsp with include directive
76
2001 Prentice Hall, Inc. All rights reserved. Outline 76 IncludeDirective.jsp 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 Using the include directive 11 12 13 body { 14 font-family: tahoma, helvetica, arial, sans-serif; 15 } 16 17 table, tr, td { 18 font-size:.9em; 19 border: 3px groove; 20 padding: 5px; 21 background-color: #dddddd; 22 } 23 24 25 26 27 28 29 30 <img src = "images/logotiny.png" 31 width = "140" height = "93" 32 alt = "Deitel & Associates, Inc. Logo" /> 33 34 35
77
2001 Prentice Hall, Inc. All rights reserved. Outline 77 IncludeDirective.jsp 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Include directive examples
78
2001 Prentice Hall, Inc. All rights reserved. Outline 78 IncludeDirective.jsp Program Output
79
2001 Prentice Hall, Inc. All rights reserved. 79 31.8 Custom Tag Libraries Custom tag libraries –Encapsulate complex JSP functionality –Defined in Tag of package javax.servlet.jsp.tagtext –Normally extend TagSupport or BodyTagSupport –Allow developers to expand JSPs without Java knowledge –Can directly manipulate JSPs –JSPs access via taglib directive Upcoming table show attributes
80
2001 Prentice Hall, Inc. All rights reserved. 80 31.8 Custom Tag Libraries
81
2001 Prentice Hall, Inc. All rights reserved. Outline 81 CustomTagWelcome.jsp Custom tag example Program Output 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 13 14 Simple Custom Tag Example 15 16 17 18 The following text demonstrates a custom tag: 19 20 21 22 23 24 Specify the location of the tag library with the taglib directive. Call custom tag.
82
2001 Prentice Hall, Inc. All rights reserved. Outline 82 WelcomeTagHandle r.java Define tag handler WelcomeTagHandle r Implements custom tag functionality 1 // Fig. 31.31: WelcomeTagHandler.java 2 // Custom tag handler that handles a simple tag. 3 package com.deitel.advjhtp1.jsp.taglibrary; 4 5 // Java core packages 6 import java.io.*; 7 8 // Java extension packages 9 import javax.servlet.jsp.*; 10 import javax.servlet.jsp.tagext.*; 11 12 public class WelcomeTagHandler extends TagSupport { 13 14 // Method called to begin tag processing 15 public int doStartTag() throws JspException 16 { 17 // attempt tag processing 18 try { 19 // obtain JspWriter to output content 20 JspWriter out = pageContext.getOut(); 21 22 // output content 23 out.print( "Welcome to JSP Tag Libraries!" ); 24 } 25 26 // rethrow IOException to JSP container as JspException 27 catch( IOException ioException ) { 28 throw new JspException( ioException.getMessage() ); 29 } 30 31 return SKIP_BODY; // ignore the tag's body 32 } 33 } Load tag and print welcome.
83
2001 Prentice Hall, Inc. All rights reserved. Outline 83 advjhtp1- taglib.tld Define tag information 1 2 <!DOCTYPE taglib PUBLIC 3 "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 4 "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> 5 6 7 8 9 1.0 10 1.1 11 advjhtp1 12 13 14 A simple tab library for the examples 15 16 17 18 19 welcome 20 21 22 com.deitel.advjhtp1.jsp.taglibrary.WelcomeTagHandler 23 24 25 empty 26 27 28 Inserts content welcoming user to tag libraries 29 30 31 Fig. 31.32Custom tag library descriptor file (advjhtp1-taglib.tld). Required taglibrary meta information Designate the tags name and location, and that this tag has no attributes.
84
2001 Prentice Hall, Inc. All rights reserved. 84 31.8.2 Custom Tag With Attributes Attributes –Allow customizable tags –Upcoming example Demonstrates a Custom tag with attributes
85
2001 Prentice Hall, Inc. All rights reserved. Outline 85 CustomTagAttribu te.jsp 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 13 14 Specifying Custom Tag Attributes 15 16 17 18 Demonstrating an attribute with a string value 19 20 21 22 23 Demonstrating an attribute with an expression value 24 25 26 <% 27 String name = request.getParameter( "name" ); 28 %> 29 30 " /> 31 32 33 34 Include the custom tag library. Specifying an attribute for a custom tag.
86
2001 Prentice Hall, Inc. All rights reserved. Outline 86 CustomTagAttribute.j sp Program Output
87
2001 Prentice Hall, Inc. All rights reserved. Outline 87 Welcome2TagHandl er.java Define Class Welcome2TagHandl er.java Displays attribute value 1 // Fig. 31.34: Welcome2TagHandler.java 2 // Custom tag handler that handles a simple tag. 3 package com.deitel.advjhtp1.jsp.taglibrary; 4 5 // Java core packages 6 import java.io.*; 7 8 // Java extension packages 9 import javax.servlet.jsp.*; 10 import javax.servlet.jsp.tagext.*; 11 12 public class Welcome2TagHandler extends TagSupport { 13 private String firstName = ""; 14 15 // Method called to begin tag processing 16 public int doStartTag() throws JspException 17 { 18 // attempt tag processing 19 try { 20 // obtain JspWriter to output content 21 JspWriter out = pageContext.getOut(); 22 23 // output content 24 out.print( "Hello " + firstName + 25 ", Welcome to JSP Tag Libraries!" ); 26 } 27 28 // rethrow IOException to JSP container as JspException 29 catch( IOException ioException ) { 30 throw new JspException( ioException.getMessage() ); 31 } 32 33 return SKIP_BODY; // ignore the tag's body 34 } 35
88
2001 Prentice Hall, Inc. All rights reserved. Outline 88 Welcome2TagHandl er.java 36 // set firstName attribute to the users first name 37 public void setFirstName( String username ) 38 { 39 firstName = username; 40 } 41 }
89
2001 Prentice Hall, Inc. All rights reserved. Outline 89 advjhtp1-taglib.tld 1 2 3 welcome2 4 5 6 com.deitel.advjhtp1.jsp.taglibrary.Welcome2TagHandler 7 8 9 empty 10 11 12 Inserts content welcoming user to tag libraries. Uses 13 attribute "name" to insert the user's name. 14 15 16 17 firstName 18 true 19 true 20 21 Fig. 31.35Element tag for the welcome2 custom tag. Define attribute parameters
90
2001 Prentice Hall, Inc. All rights reserved. 90 31.8.3 Evaluating the Body of a Custom Tag Custom Tag Element body –Defines variables that may be used in JSP –May iterate over Element body –Extends class BodyTagSupport –Upcoming example Demonstrates tag body processing
91
2001 Prentice Hall, Inc. All rights reserved. Outline 91 CustomTagBody.js p Define tag library 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 6 7 8 9 10 11 12 13 Guest List 14 15 16 body { 17 font-family: tahoma, helvetica, arial, sans-serif 18 } 19 20 table, tr, td, th { 21 text-align: center; 22 font-size:.9em; 23 border: 3px groove; 24 padding: 5px; 25 background-color: #dddddd 26 } 27 28 29 30 31 Guest List 32 33 34
92
2001 Prentice Hall, Inc. All rights reserved. Outline 92 CustomTagBody.js p Program Output 35 Last name 36 First name 37 Email 38 39 40 41 42 43 44 45 46 47 48 "> 49 50 51 52 53 54 55 56 Call the custom tag guestlist to iterate over the guest information and display a table.
93
2001 Prentice Hall, Inc. All rights reserved. Outline 93 GuestBookTag.jav a 1 // Fig. 31.37: GuestBookTag.java 2 // Custom tag handler that reads information from the guestbook 3 // database and makes that data available in a JSP. 4 package com.deitel.advjhtp1.jsp.taglibrary; 5 6 // Java core packages 7 import java.io.*; 8 import java.util.*; 9 10 // Java extension packages 11 import javax.servlet.jsp.*; 12 import javax.servlet.jsp.tagext.*; 13 14 // Deitel packages 15 import com.deitel.advjhtp1.jsp.beans.*; 16 17 public class GuestBookTag extends BodyTagSupport { 18 private String firstName; 19 private String lastName; 20 private String email; 21 22 private GuestDataBean guestData; 23 private GuestBean guest; 24 private Iterator iterator; 25 26 // Method called to begin tag processing 27 public int doStartTag() throws JspException 28 { 29 // attempt tag processing 30 try { 31 guestData = new GuestDataBean(); 32 33 List list = guestData.getGuestList(); 34 iterator = list.iterator(); 35 Obtain the guestlist for the guest data bean.
94
2001 Prentice Hall, Inc. All rights reserved. Outline 94 GuestBookTag.jav a 36 if ( iterator.hasNext() ) { 37 processNextGuest(); 38 39 return EVAL_BODY_TAG; // continue body processing 40 } 41 else 42 return SKIP_BODY; // terminate body processing 43 } 44 45 // if any exceptions occur, do not continue processing 46 // tag's body 47 catch( Exception exception ) { 48 exception.printStackTrace(); 49 return SKIP_BODY; // ignore the tag's body 50 } 51 } 52 53 // process body and determine if body processing 54 // should continue 55 public int doAfterBody() 56 { 57 // attempt to output body data 58 try { 59 bodyContent.writeOut( getPreviousOut() ); 60 } 61 62 // if exception occurs, terminate body processing 63 catch ( IOException ioException ) { 64 ioException.printStackTrace(); 65 return SKIP_BODY; // terminate body processing 66 } 67 68 bodyContent.clearBody(); 69 If there are more guests, loop and continue processing.
95
2001 Prentice Hall, Inc. All rights reserved. Outline 95 GuestBookTag.jav a 70 if ( iterator.hasNext() ) { 71 processNextGuest(); 72 73 return EVAL_BODY_TAG; // continue body processing 74 } 75 else 76 return SKIP_BODY; // terminate body processing 77 } 78 79 // obtains the next GuestBean and extracts its data 80 private void processNextGuest() 81 { 82 // get next guest 83 guest = ( GuestBean ) iterator.next(); 84 85 pageContext.setAttribute( 86 "firstName", guest.getFirstName() ); 87 88 pageContext.setAttribute( 89 "lastName", guest.getLastName() ); 90 91 pageContext.setAttribute( 92 "email", guest.getEmail() ); 93 } 94 }
96
2001 Prentice Hall, Inc. All rights reserved. Outline 96 GuestBookTagExtr aInfo.java Contains custom tag variable information 1 // Fig. 31.38: GuestBookTagExtraInfo.java 2 // Class that defines the variable names and types created by 3 // custom tag handler GuestBookTag. 4 package com.deitel.advjhtp1.jsp.taglibrary; 5 6 // Java core packages 7 import javax.servlet.jsp.tagext.*; 8 9 public class GuestBookTagExtraInfo extends TagExtraInfo { 10 11 // method that returns information about the variables 12 // GuestBookTag creates for use in a JSP 13 public VariableInfo [] getVariableInfo( TagData tagData ) 14 { 15 VariableInfo firstName = new VariableInfo( "firstName", 16 "String", true, VariableInfo.NESTED ); 17 18 VariableInfo lastName = new VariableInfo( "lastName", 19 "String", true, VariableInfo.NESTED ); 20 21 VariableInfo email = new VariableInfo( "email", 22 "String", true, VariableInfo.NESTED ); 23 24 VariableInfo varableInfo [] = 25 { firstName, lastName, email }; 26 27 return varableInfo; 28 } 29 } Define each variable and its type
97
2001 Prentice Hall, Inc. All rights reserved. Outline 97 advjhtp1-taglib.tld 1 2 3 4 guestlist 5 6 7 com.deitel.advjhtp1.jsp.taglibrary.GuestBookTag 8 9 10 11 com.deitel.advjhtp1.jsp.taglibrary.GuestBookTagExtraInfo 12 13 14 JSP 15 16 17 Iterates over a list of GuestBean objects 18 19 Fig. 31.39Element tag for the guestlist custom tag. Specifies that this custom tag contains JSP information in its body
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.