Chapter 31 - JavaServer Pages (JSP): Bonus for Java™ Developers

Slides:



Advertisements
Similar presentations
8 Copyright © 2005, Oracle. All rights reserved. Creating the Web Tier: JavaServer Pages.
Advertisements

 2002 Prentice Hall. All rights reserved. Chapter 9: Servlets Outline 9.1 Introduction 9.2 Servlet Overview and Architecture Interface Servlet and.
 Copyright Wipro Technologies JSP Ver 1.0 Page 1 Talent Transformation Java Server Pages.
Michael Brockway Application Integration JavaServer Pages l Introduction & Overview l Implicit Objects l Scripting l Standard Actions l Directives l References.
Chapter 51 Scripting With JSP Elements JavaServer Pages By Xue Bai.
Chapter 25: JavaServer Pages Outline 25.1 Introduction 25.2 JavaServer Pages Overview 25.3 First JavaServer Page Example 25.4 Implicit Objects 25.5 Scripting.
DT211/3 Internet Application Development
Generate Dynamic Content On Cache Server Master’s Project Proposal by Aparna Yeddula.
Pertemuan 10 Pemrograman JSP Matakuliah: T0053/Web Programming Tahun: 2006 Versi: 2.
JSP Architecture  JSP is a simple text file consisting of HTML or XML content along with JSP elements  JSP packages define the interface for the compiled.
Java Enterprise Edition Java Web Development Structure of a web project Introduction to Web Applications The first project Introduction to Java Web Development.
 2004 Prentice Hall, Inc. All rights reserved. Chapter 37 - JavaServer Pages (JSP): Bonus for Java Developers Outline 37.1 Introduction 37.2 JavaServer.
11. Java-Based Web: JSP, JSF. 2 Motto: Rule 1: Our client is always right Rule 2: If you think our client is wrong, see Rule 1. - Anonymous.
 2002 Prentice Hall. All rights reserved. JavaServer Pages.
 2003 Prentice Hall, Inc. All rights reserved. Chapter 25: JavaServer Pages Outline 25.1 Introduction 25.2 JavaServer Pages Overview 25.3 First JavaServer.
Java Server Pages CS-422. What are JSPs A logical evolution of java servlets –most servlets dynamically create HTML and integrate it with some computational.
1 APPENDIX D OVERVIEW OF JSP, JSTL, and EL TAGS. 2 OVERVIEW OF JSP, JSTL, and EL TAGS This appendix describes how to create and modify JSP pages in JD.
Java Programming, 3e Concepts and Techniques Chapter 2 - Part 2 Creating a Java Application and Applet.
CSC 2720 Building Web Applications Using Java Beans, Custom Tags and Tag Libraries in JSP pages.
Slides © Marty Hall, book © Sun Microsystems Press 1 Including Files & Applets in JSP Documents Core Servlets & JSP book:
Using JavaBeans and Custom Tags in JSP Lesson 3B / Slide 1 of 37 J2EE Web Components Pre-assessment Questions 1.The _____________ attribute of a JSP page.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 25: JavaServer Pages Outline 25.1 Introduction 25.2 JavaServer Pages Overview 25.3 First JavaServer.
 2001 Prentice Hall, Inc. All rights reserved. 1 Chapter 31 - JavaServer Pages (JSP): Bonus for Java™ Developers Outline 31.1 Introduction 31.2 JavaServer.
Chapter 7 Java Server Pages. Objectives Explain how the separation of concerns principle applies to JSP Describe the operation and life-cycle of a JSP.
Introduction to JavaServer Pages (JSP) Slides from Dr. Mark Llewellyn.
Java Server Pages Lecture July Java Server Pages Java Server Pages (JSPs) provide a way to separate the generation of dynamic content (java)
 Embeds Java code  In HTML tags  When used well  Simple way to generate dynamic web-pages  When misused (complex embedded Java)  Terribly messy.
Stanisław Osiński, 2002JSP – A technology for serving dynamic web content Java Server Pages™ A technology for serving dynamic web content Stanisław Osiński,
JAVA SERVER PAGES CREATING DYNAMIC WEB PAGES USING JAVA James Faeldon CS 119 Enterprise Systems Programming.
Slides © Marty Hall, book © Sun Microsystems Press 1 JSP Scripting Elements Core Servlets & JSP book:
Java Servlets Outline 24.1 Introduction 24.2 Servlet Overview and Architecture Interface Servlet and the Servlet Life Cycle HttpServlet Class.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 32.1 Reviewing the Bookstore Application 32.2.
Introduction to JavaServer Pages. 2 JSP and Servlet Limitations of servlet  It’s inaccessible to non-programmers JSP is a complement to servlet  focuses.
Java Stream 1 Unit 10 – Java Server Pages Introduction A First JavaServer Page Example Implicit Objects Scripting Standard Actions Directives Custom Tag.
intro JSP Pertemuan 8 Matakuliah: Web Programming Tahun: 2009.
 2005 Pearson Education, Inc. All rights reserved JavaServer Pages (JSP)
JSP Fundamentals Elements of a JSP Using Beans with JSP Integrating Servlets and JSP.
Java server pages. A JSP file basically contains HTML, but with embedded JSP tags with snippets of Java code inside them. A JSP file basically contains.
Copyright © 2002 ProsoftTraining. All rights reserved. JavaServer Pages.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 31.1 Reviewing the Bookstore Application 31.2.
CSC 2720 Building Web Applications JavaServer Pages (JSP) JSP Directives and Action Elements.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 25: JavaServer Pages Outline 25.1 Introduction 25.2 JavaServer Pages Overview 25.3 First JavaServer.
JSP Pages. What and Why of JSP? JSP = Java code imbedded in HTML or XML –Static portion of the page is HTML –Dynamic portion is Java Easy way to develop.
JSP. Types of JSP Scripting Elements Expressions of the form, which are evaluated and inserted into the servlet's output. Scriptlets of the form, which.
Web Technologies Java Beans & JSP By Praveen Kumar G.
 2002 Prentice Hall. All rights reserved. 9.8 Multi-Tier Applications: Using JDBC from a Servlet Three-tier distributed applications –User interface –Business.
JSP BASICS AND ARCHITECTURE. Goals of JSP Simplify Creation of dynamic pages. Separate Dynamic and Static content.
Basic JSP Celsina Bignoli Problems with Servlets Servlets contain –request processing, –business logic –response generation all lumped.
COMP9321 Web Application Engineering Semester 2, 2015 Dr. Amin Beheshti Service Oriented Computing Group, CSE, UNSW Australia Week 3 1COMP9321, 15s2, Week.
 2002 Prentice Hall. All rights reserved. Chapter 10: JavaServer Pages Outline 10.1 Introduction 10.2 JavaServer Pages Overview 10.3 A First JavaServer.
1 Java Server Pages A Java Server Page is a file consisting of HTML or XML markup into which special tags and code blocks are inserted When the page is.
Java Programming: Advanced Topics 1 Building Web Applications Chapter 13.
10 Copyright © 2004, Oracle. All rights reserved. Building ADF View Components.
 2002 Prentice Hall. All rights reserved. Chapter 10: JavaServer Pages Outline 10.1 Introduction 10.2 JavaServer Pages Overview 10.3 A First JavaServer.
JSP Based on
Developing JavaServer Pages
Java Server Pages By: Tejashri Udavant..
COMP9321 Web Application Engineering Semester 2, 2017
Scripted Page Web App Development (Java Server Pages)
Pre-assessment Questions
Introduction to JSP Java Server Pages
Pre-assessment Questions
JavaServer Pages (JSP)
MSIS 655 Advanced Business Applications Programming
Java Server Pages.
COP 4610L: Applications in the Enterprise Spring 2005
COP 4610L: Applications in the Enterprise Spring 2005
COP 4610L: Applications in the Enterprise Spring 2005
COSC 2956 Internet Tools Java Server Pages.
Introduction to JSP Dept. of B.Voc Software Development and System Administration St. Joseph’s College(Autonomous) Trichy-02 By Dr. J. Ronald Martin Introduction.
Presentation transcript:

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 <jsp:include> Action 31.6.2 <jsp:forward> Action 31.6.3 <jsp:plugin> Action 31.6.4 <jsp:useBean> Action 31.7 Directives 31.7.1 page Directive 31.7.2 include Directive

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

JavaServer Pages (JSP) 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

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

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

31.3 A First JavaServer Page Example Upcoming JavaServer Page Example

Clock.jsp Simple JSP expression 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. 31.1: clock.jsp --> 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"> 8 9 <head> 10 <meta http-equiv = "refresh" content = "60" /> 11 12 <title>A Simple JSP Example</title> 13 14 <style type = "text/css"> 15 .big { font-family: helvetica, arial, sans-serif; 16 font-weight: bold; 17 font-size: 2em; } 18 </style> 19 </head> 20 21 <body> 22 <p class = "big">Simple JSP Example</p> 23 24 <table style = "border: 6px outset;"> 25 <tr> 26 <td style = "background-color: black;"> 27 <p class = "big" style = "color: cyan;"> 28 29 <!-- JSP expression to insert date/time --> 30 <%= new java.util.Date() %> 31 32 </p> 33 </td> 34 </tr> Clock.jsp Simple JSP expression JSP expressions deliniated by <%= and %>. This will insert a string representation of the date.

Clock.jsp Program Output 35 </table> 36 </body> 37 38 </html> Clock.jsp Program Output

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

31.4 Implicit Objects

31.4 Implicit Objects

31.5 Scripting Scripting Allows JSPs to place Java code within page

31.5.1 Scripting Components Scripting components Scriptlets Comments Delimited by <% and %> Blocks of Java code Comments Scriptlet Comments delimiated by / and / JSP comments delimited by <%-- and --%> XHTML comments delimited by <!-- and --> Expressions Delimited by <%= and %> Result converted to a String object

30.5.1 Scripting Components Scripting Components Declarations Delimited by <%! and %> Define variables and methods Require terminating semicolon Escape sequences Upcoming table

31.5.1 Scripting Components

31.5.2 Scripting Example Upcoming example Demonstrates basic scripting

Welcome.jsp Demonstrate scriptlet and expressions 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. 31.4: welcome.jsp --> 6 <!-- JSP that processes a "get" request containing data. --> 7 8 <html xmlns = "http://www.w3.org/1999/xhtml"> 9 10 <!-- head section of document --> 11 <head> 12 <title>Processing "get" requests with data</title> 13 </head> 14 15 <!-- body section of document --> 16 <body> 17 <% // begin scriptlet 18 19 String name = request.getParameter( "firstName" ); 20 21 if ( name != null ) { 22 23 %> <%-- end scriptlet to insert fixed template data --%> 24 25 <h1> 26 Hello <%= name %>, <br /> 27 Welcome to JavaServer Pages! 28 </h1> 29 30 <% // continue scriptlet 31 32 } // end if 33 else { 34 Welcome.jsp Demonstrate scriptlet and expressions Obtain request parameter via scriptlet. Expression will display the string value of name

35 %> <%-- end scriptlet to insert fixed template data --%> 36 37 <form action = "welcome.jsp" method = "get"> 38 <p>Type your first name and press Submit</p> 39 40 <p><input type = "text" name = "firstName" /> 41 <input type = "submit" value = "Submit" /> 42 </p> 43 </form> 44 45 <% // continue scriptlet 46 47 } // end else 48 49 %> <%-- end scriptlet --%> 50 </body> 51 52 </html> <!-- end XHTML document --> Welcome.jsp

Welcome.jsp Program Output

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 <jsp:action> and </jsp:action> Actions defined in upcoming table

31.6 Standard Actions

31.6.1 <jsp:include> action Enables dynamic content inclusion Creates copy of resource Often are XHTML or other JSP pages

31.6.1 <jsp:include> Action

31.6.1 <jsp:include> Action Upcoming example Uses the <jsp:include> action to add HTML and JSP pages

Banner.html 1 <!-- Fig. 31.7: banner.html --> 2 <!-- banner to include in another document --> 3 <div style = "width: 580px"> 4 <p> 5 Java(TM), C, C++, Visual Basic(R), 6 Object Technology, and <br /> Internet and 7 World Wide Web Programming Training <br /> 8 On-Site Seminars Delivered Worldwide 9 </p> 10 11 <p> 12 <a href = "mailto:deitel@deitel.com"> 13 deitel@deitel.com</a><br /> 14 15 978.579.9911<br /> 16 490B Boston Post Road, Suite 200, 17 Sudbury, MA 01776 18 </p> 19 </div> Banner.html

Toc.html 1 <!-- Fig. 31.8: toc.html --> 2 <!-- contents to include in another document --> 3 4 <p><a href = "http://www.deitel.com/books/index.html"> 5 Publications/BookStore 6 </a></p> 7 8 <p><a href = "http://www.deitel.com/whatsnew.html"> 9 What's New 10 </a></p> 11 12 <p><a href = "http://www.deitel.com/books/downloads.html"> 13 Downloads/Resources 14 </a></p> 15 16 <p><a href = "http://www.deitel.com/faq/index.html"> 17 FAQ (Frequently Asked Questions) 18 </a></p> 19 20 <p><a href = "http://www.deitel.com/intro.html"> 21 Who we are 22 </a></p> 23 24 <p><a href = "http://www.deitel.com/index.html"> 25 Home Page 26 </a></p> 27 28 <p>Send questions or comments about this site to 29 <a href = "mailto:deitel@deitel.com"> 30 deitel@deitel.com 31 </a><br /> 32 Copyright 1995-2002 by Deitel & Associates, Inc. 33 All Rights Reserved. 34 </p> Toc.html

Clock2.jsp 1 <!-- Fig. 31.9: clock2.jsp --> 2 <!-- date and time to include in another document --> 3 4 <table> 5 <tr> 6 <td style = "background-color: black;"> 7 <p class = "big" style = "color: cyan; font-size: 3em; 8 font-weight: bold;"> 9 10 <%= new java.util.Date() %> 11 </p> 12 </td> 13 </tr> 14 </table> Clock2.jsp

Include.jsp 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. 31.10: include.jsp --> 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"> 8 9 <head> 10 <title>Using jsp:include</title> 11 12 <style type = "text/css"> 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 </style> 24 </head> 25 26 <body> 27 <table> 28 <tr> 29 <td style = "width: 160px; text-align: center"> 30 <img src = "images/logotiny.png" 31 width = "140" height = "93" 32 alt = "Deitel & Associates, Inc. Logo" /> 33 </td> 34 35 <td> Include.jsp

<jsp:include> action tag, accesses external resources. 36 37 <%-- include banner.html in this JSP --%> 38 <jsp:include page = "banner.html" 39 flush = "true" /> 40 41 </td> 42 </tr> 43 44 <tr> 45 <td style = "width: 160px"> 46 47 <%-- include toc.html in this JSP --%> 48 <jsp:include page = "toc.html" flush = "true" /> 49 50 </td> 51 52 <td style = "vertical-align: top"> 53 54 <%-- include clock2.jsp in this JSP --%> 55 <jsp:include page = "clock2.jsp" 56 flush = "true" /> 57 58 </td> 59 </tr> 60 </table> 61 </body> 62 </html> <jsp:include> action tag, accesses external resources. Include.jsp

Include.jsp Program Output

31.6.2 <jsp:forward> Action Enables the JSP to redirect client Current JSP halts processing, immediately transfers client Page attribute determines forwarding location Upcoming example demonstrates forward action

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. 31.11: forward1.jsp --> 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"> 8 9 <head> 10 <title>Forward request to another JSP</title> 11 </head> 12 13 <body> 14 <% // begin scriptlet 15 16 String name = request.getParameter( "firstName" ); 17 18 if ( name != null ) { 19 20 %> <%-- end scriptlet to insert fixed template data --%> 21 22 <jsp:forward page = "forward2.jsp"> 23 <jsp:param name = "date" 24 value = "<%= new java.util.Date() %>" /> 25 </jsp:forward> 26 27 <% // continue scriptlet 28 29 } // end if 30 else { 31 32 %> <%-- end scriptlet to insert fixed template data --%> 33 34 <form action = "forward1.jsp" method = "get"> 35 <p>Type your first name and press Submit</p> Forward1.jsp If the firstname parameter is specified, forward the user to the second page with the current date.

Forward1.jsp Program Output 36 37 <p><input type = "text" name = "firstName" /> 38 <input type = "submit" value = "Submit" /> 39 </p> 40 </form> 41 42 <% // continue scriptlet 43 44 } // end else 45 46 %> <%-- end scriptlet --%> 47 </body> 48 49 </html> <!-- end XHTML document --> Forward1.jsp Program Output

Forward2.jsp 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 <!-- forward2.jsp --> 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"v 8 9 <head> 10 <title>Processing a forwarded request</title> 11 12 <style type = "text/css"> 13 .big { 14 font-family: tahoma, helvetica, arial, sans-serif; 15 font-weight: bold; 16 font-size: 2em; 17 } 18 </style> 19 </head> 20 21 <body> 22 <p class = "big"> 23 Hello <%= request.getParameter( "firstName" ) %>, <br /> 24 Your request was received <br /> and forwarded at 25 </p> 26 27 <table style = "border: 6px outset;"> 28 <tr> 29 <td style = "background-color: black;"> 30 <p class = "big" style = "color: cyan;"> 31 <%= request.getParameter( "date" ) %> 32 </p> 33 </td> 34 </tr> 35 </table> Forward2.jsp

Forward2.jsp Program Output 36 </body> 37 38 </html> Forward2.jsp Program Output

31.6.3 <jsp:plugin> Action Adds applet, JavaBean or XHTML element Enables the client to download Java plug-in Upcoming table shows plug-in attributes

31.6.3 <jsp:plugin> Action

31.6.3 <jsp:plugin> Action Upcoming Example Applet draws a picture via Java2d JSP displays applet and embeds java plug-in Ensures all clients can view applet

ShapesApplet.java 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 } ShapesApplet.java Define Applet ShapesApplet Initialize applet

ShapesApplet.java 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 ), ShapesApplet.java Draw shapes

ShapesApplet.java 71 ( int ) ( Math.random() * 256 ) ) ); 72 73 g2d.fill( star ); // draw a filled star 74 } 75 } 76 } ShapesApplet.java

Plugin.jsp use plugin action 1 <!-- Fig. 31.15: plugin.jsp --> 2 3 <html> 4 5 <head> 6 <title>Using jsp:plugin to load an applet</title> 7 </head> 8 9 <body> 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 <jsp:params> 17 <jsp:param name = "red" value = "255" /> 18 <jsp:param name = "green" value = "255" /> 19 <jsp:param name = "blue" value = "0" /> 20 </jsp:params> 21 22 </jsp:plugin> 23 </body> 24 </html> The JSP plugin parameter includes the applet in the page, and ensures the client has the Java plug-in. Plugin.jsp use plugin action

Plugin.jsp Program Output

31.6.4 <jsp:useBean> 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

31.6.4 <jsp:useBean> Action

31.6.4 <jsp:useBean> Action Upcoming example Demonstrates useBean action Loads advertisement rotator

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 Rotator.java Define JavaBean Rotator

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 } Rotator.java

Create a new instance of the rotator bean named rotator. 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. 31.18: adrotator.jsp --> 6 7 <jsp:useBean id = "rotator" scope = "application" 8 class = "com.deitel.advjhtp1.jsp.beans.Rotator" /> 9 10 <html xmlns = "http://www.w3.org/1999/xhtml"> 11 12 <head> 13 <title>AdRotator Example</title> 14 15 <style type = "text/css"> 16 .big { font-family: helvetica, arial, sans-serif; 17 font-weight: bold; 18 font-size: 2em } 19 </style> 20 21 <%-- update advertisement --%> 22 <% rotator.nextAd(); %> 23 </head> 24 25 <body> 26 <p class = "big">AdRotator Example</p> 27 28 <p> 29 <a href = "<jsp:getProperty name = "rotator" 30 property = "link" />"> 31 32 <img src = "<jsp:getProperty name = "rotator" 33 property = "image" />" alt = "advertisement" /> 34 </a> Adrotator.jsp Create a new instance of the rotator bean named rotator. getProperty action functions the same as calling rotator.getLink()

Adrotator.jsp Program Output 36 </body> 37 </html> Adrotator.jsp Program Output

31.6.4 <jsp:useBean> Action

31.6.4 <jsp:useBean> Action Upcoming example GuestBook application Stores information in a database Database connectivity via JavaBean

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; GuestBean.java Define Bean GuestBean Storage Bean

GuestBean.java 36 } 37 38 // get the guest's email address 36 } 37 38 // get the guest's email address 39 public String getEmail() 40 { 41 return email; 42 } 43 } GuestBean.java

GuestDataBean.java 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 ); GuestDataBean.java Define Class GuestDataBean Set up database Defines the database driver, URL, and SQL statements.

GuestDataBean.java 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. GuestDataBean.java Database access methods

GuestDataBean.java 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 } GuestDataBean.java Close database

GuestBookLogin.jsp useBean action 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. 31.22: guestBookLogin.jsp --> 6 7 <%-- page settings --%> 8 <%@ page errorPage = "guestBookErrorPage.jsp" %> 9 10 <%-- beans used in this JSP --%> 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 <html xmlns = "http://www.w3.org/1999/xhtml"> 17 18 <head> 19 <title>Guest Book Login</title> 20 21 <style type = "text/css"> 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 </style> 33 </head> 34 35 <body> GuestBookLogin.jsp useBean action Obtain an instance of each bean. Assigns the bean name within the JSP.

GuestBookLogin.jsp Obtain information from user 36 <jsp:setProperty name = "guest" property = "*" /> 37 38 <% // start scriptlet 39 40 if ( guest.getFirstName() == null || 41 guest.getLastName() == null || 42 guest.getEmail() == null ) { 43 44 %> <%-- end scriptlet to insert fixed template data --%> 45 46 <form method = "post" action = "guestBookLogin.jsp"> 47 <p>Enter your first name, last name and email 48 address to register in our guest book.</p> 49 50 <table> 51 <tr> 52 <td>First name</td> 53 54 <td> 55 <input type = "text" name = "firstName" /> 56 </td> 57 </tr> 58 59 <tr> 60 <td>Last name</td> 61 62 <td> 63 <input type = "text" name = "lastName" /> 64 </td> 65 </tr> 66 67 <tr> 68 <td>Email</td> 69 70 <td> GuestBookLogin.jsp Obtain information from user

GuestBookLogin.jsp Add new guest to book 71 <input type = "text" name = "email" /> 72 </td> 73 </tr> 74 75 <tr> 76 <td colspan = "2"> 77 <input type = "submit" 78 value = "Submit" /> 79 </td> 80 </tr> 81 </table> 82 </form> 83 84 <% // continue scriptlet 85 86 } // end if 87 else { 88 guestData.addGuest( guest ); 89 90 %> <%-- end scriptlet to insert jsp:forward action --%> 91 92 <%-- forward to display guest book contents --%> 93 <jsp:forward page = "guestBookView.jsp" /> 94 95 <% // continue scriptlet 96 97 } // end else 98 99 %> <%-- end scriptlet --%> 100 </body> 101 102 </html> GuestBookLogin.jsp Add new guest to book Calls the guestData Bean to write this new guest into the address book. The forward the client to the guestBookView JSP.

Obtain an instance of the GuestDataBean class with useBean action. 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. 31.23: guestBookView.jsp --> 6 7 <%-- page settings --%> 8 <%@ page errorPage = "guestBookErrorPage.jsp" %> 9 <%@ page import = "java.util.*" %> 10 <%@ page import = "com.deitel.advjhtp1.jsp.beans.*" %> 11 12 <%-- GuestDataBean to obtain guest list --%> 13 <jsp:useBean id = "guestData" scope = "request" 14 class = "com.deitel.advjhtp1.jsp.beans.GuestDataBean" /> 15 16 <html xmlns = "http://www.w3.org/1999/xhtml"> 17 18 <head> 19 <title>Guest List</title> 20 21 <style type = "text/css"> 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 </style> 34 </head> 35 Obtain an instance of the GuestDataBean class with useBean action. GuestBookView.jsp

Obtain, then Iterate through the guestList and display its contents. 36 <body> 37 <p style = "font-size: 2em;">Guest List</p> 38 39 <table> 40 <thead> 41 <tr> 42 <th style = "width: 100px;">Last name</th> 43 <th style = "width: 100px;">First name</th> 44 <th style = "width: 200px;">Email</th> 45 </tr> 46 </thead> 47 48 <tbody> 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 %> <%-- end scriptlet; insert fixed template data --%> 60 61 <tr> 62 <td><%= guest.getLastName() %></td> 63 64 <td><%= guest.getFirstName() %></td> 65 66 <td> 67 <a href = "mailto:<%= guest.getEmail() %>"> 68 <%= guest.getEmail() %></a> 69 </td> 70 </tr> GuestBookView.jsp Obtain, then Iterate through the guestList and display its contents.

GuestBookView.jsp 71 72 <% // continue scriptlet 73 74 } // end while 75 76 %> <%-- end scriptlet --%> 77 78 </tbody> 79 </table> 80 </body> 81 82 </html> GuestBookView.jsp

GuestBookErrorPage.jsp Error page 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. 31.24: guestBookErrorPage.jsp --> 6 7 <%-- page settings --%> 8 <%@ page isErrorPage = "true" %> 9 <%@ page import = "java.util.*" %> 10 <%@ page import = "java.sql.*" %> 11 12 <html xmlns = "http://www.w3.org/1999/xhtml"> 13 14 <head> 15 <title>Error!</title> 16 17 <style type = "text/css"> 18 .bigRed { 19 font-size: 2em; 20 color: red; 21 font-weight: bold; 22 } 23 </style> 24 </head> 25 26 <body> 27 <p class = "bigRed"> 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 GuestBookErrorPage.jsp Error page

GuestBookErrorPage.jsp 36 <% 36 <% 37 else if ( exception instanceof ClassNotFoundException ) 38 %> 39 40 A ClassNotFoundException 41 42 <% 43 else 44 %> 45 46 An exception 47 48 <%-- end scriptlet to insert fixed template data --%> 49 50 <%-- continue error message output --%> 51 occurred while interacting with the guestbook database. 52 </p> 53 54 <p class = "bigRed"> 55 The error message was:<br /> 56 <%= exception.getMessage() %> 57 </p> 58 59 <p class = "bigRed">Please try again later</p> 60 </body> 61 62 </html> GuestBookErrorPage.jsp

31.6.4 <jsp:useBean> Action Fig. 31.25 JSP guest book sample output windows.

31.6.4 <jsp:useBean> Action Fig. 31.25 JSP guest book sample output windows.

31.6.4 <jsp:useBean> Action Fig. 31.25 JSP guest book sample output windows.

31.6.4 <jsp:useBean> Action Fig. 31.25 JSP guest book sample output windows.

31.7 Directives Directive Overview Information sent to JSP container to specify properties Error pages Include external content Specify custom tag libraries Delimited by <%@ and %> Processed when JSP is translated

31.7 Directives

31.7.1 page Directive Page directive Specifies global JSP Settings Specific attributes on upcomming table

31.7.1 page Directive

31.7.1 page Directive

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 <jsp:include> 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

IncludeDirective.jsp 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. 31.28: includeDirective.jsp --> 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"> 8 9 <head> 10 <title>Using the include directive</title> 11 12 <style type = "text/css"> 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 </style> 24 </head> 25 26 <body> 27 <table> 28 <tr> 29 <td style = "width: 160px; text-align: center"> 30 <img src = "images/logotiny.png" 31 width = "140" height = "93" 32 alt = "Deitel & Associates, Inc. Logo" /> 33 </td> 34 35 <td> IncludeDirective.jsp

Include directive examples IncludeDirective.jsp 36 37 <%-- include banner.html in this JSP --%> 38 <%@ include file = "banner.html" %> 39 40 </td> 41 </tr> 42 43 <tr> 44 <td style = "width: 160px"> 45 46 <%-- include toc.html in this JSP --%> 47 <%@ include file = "toc.html" %> 48 49 </td> 50 51 <td style = "vertical-align: top"> 52 53 <%-- include clock2.jsp in this JSP --%> 54 <%@ include file = "clock2.jsp" %> 55 56 </td> 57 </tr> 58 </table> 59 </body> 60 </html> Include directive examples IncludeDirective.jsp

IncludeDirective.jsp Program Output

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

31.8 Custom Tag Libraries

CustomTagWelcome.jsp Custom tag example Program Output 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. 31.30: customTagWelcome.jsp --> 6 <!-- JSP that uses a custom tag to output content. --> 7 8 <%-- taglib directive --%> 9 <%@ taglib uri = "advjhtp1-taglib.tld" prefix = "advjhtp1" %> 10 11 <html xmlns = "http://www.w3.org/1999/xhtml"> 12 13 <head> 14 <title>Simple Custom Tag Example</title> 15 </head> 16 17 <body> 18 <p>The following text demonstrates a custom tag:</p> 19 <h1> 20 <advjhtp1:welcome /> 21 </h1> 22 </body> 23 24 </html> Specify the location of the tag library with the taglib directive. CustomTagWelcome.jsp Custom tag example Program Output Call custom tag.

Load tag and print welcome. 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. WelcomeTagHandler.java Define tag handler WelcomeTagHandler Implements custom tag functionality

advjhtp1-taglib.tld Define tag information 1 <?xml version = "1.0" encoding = "ISO-8859-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 <!-- a tag library descriptor --> 7 8 <taglib> 9 <tlibversion>1.0</tlibversion> 10 <jspversion>1.1</jspversion> 11 <shortname>advjhtp1</shortname> 12 13 <info> 14 A simple tab library for the examples 15 </info> 16 17 <!-- A simple tag that outputs content --> 18 <tag> 19 <name>welcome</name> 20 21 <tagclass> 22 com.deitel.advjhtp1.jsp.taglibrary.WelcomeTagHandler 23 </tagclass> 24 25 <bodycontent>empty</bodycontent> 26 27 <info> 28 Inserts content welcoming user to tag libraries 29 </info> 30 </tag> 31 </taglib> Required taglibrary meta information advjhtp1-taglib.tld Define tag information Designate the tags name and location, and that this tag has no attributes. Fig. 31.32 Custom tag library descriptor file (advjhtp1-taglib.tld).

31.8.2 Custom Tag With Attributes Allow customizable tags Upcoming example Demonstrates a Custom tag with attributes

Include the custom tag library. CustomTagAttribute.jsp 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. 31.33: customTagAttribute.jsp --> 6 <!-- JSP that uses a custom tag to output content. --> 7 8 <%-- taglib directive --%> 9 <%@ taglib uri = "advjhtp1-taglib.tld" prefix = "advjhtp1" %> 10 11 <html xmlns = "http://www.w3.org/1999/xhtml"> 12 13 <head> 14 <title>Specifying Custom Tag Attributes</title> 15 </head> 16 17 <body> 18 <p>Demonstrating an attribute with a string value</p> 19 <h1> 20 <advjhtp1:welcome2 firstName = "Paul" /> 21 </h1> 22 23 <p>Demonstrating an attribute with an expression value</p> 24 <h1> 25 <%-- scriptlet to obtain "name" request parameter --%> 26 <% 27 String name = request.getParameter( "name" ); 28 %> 29 30 <advjhtp1:welcome2 firstName = "<%= name %>" /> 31 </h1> 32 </body> 33 34 </html> Include the custom tag library. CustomTagAttribute.jsp Specifying an attribute for a custom tag.

CustomTagAttribute.jsp Program Output

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 ", <br />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 Welcome2TagHandler.java Define Class Welcome2TagHandler.java Displays attribute value

36 // set firstName attribute to the users first name 37 public void setFirstName( String username ) 38 { 39 firstName = username; 40 } 41 } Welcome2TagHandler.java

Define attribute parameters advjhtp1-taglib.tld 1 <!-- A tag with an attribute --> 2 <tag> 3 <name>welcome2</name> 4 5 <tagclass> 6 com.deitel.advjhtp1.jsp.taglibrary.Welcome2TagHandler 7 </tagclass> 8 9 <bodycontent>empty</bodycontent> 10 11 <info> 12 Inserts content welcoming user to tag libraries. Uses 13 attribute "name" to insert the user's name. 14 </info> 15 16 <attribute> 17 <name>firstName</name> 18 <required>true</required> 19 <rtexprvalue>true</rtexprvalue> 20 </attribute> 21 </tag> Define attribute parameters advjhtp1-taglib.tld Fig. 31.35 Element tag for the welcome2 custom tag.

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

CustomTagBody.jsp Define tag library 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 <!-- customTagBody.jsp --> 6 7 <%-- taglib directive --%> 8 <%@ taglib uri = "advjhtp1-taglib.tld" prefix = "advjhtp1" %> 9 10 <html xmlns = "http://www.w3.org/1999/xhtml"> 11 12 <head> 13 <title>Guest List</title> 14 15 <style type = "text/css"> 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 </style> 28 </head> 29 30 <body> 31 <p style = "font-size: 2em">Guest List</p> 32 33 <table> 34 <thead> CustomTagBody.jsp Define tag library

CustomTagBody.jsp Program Output 35 <th style = "width: 100px">Last name</th> 36 <th style = "width: 100px">First name</th> 37 <th style = "width: 200px">Email</th> 38 </thead> 39 40 <%-- guestlist custom tag --%> 41 <advjhtp1:guestlist> 42 <tr> 43 <td><%= lastName %></td> 44 45 <td><%= firstName %></td> 46 47 <td> 48 <a href = "mailto:<%= email %>"> 49 <%= email %></a> 50 </td> 51 </tr> 52 </advjhtp1:guestlist> 53 </table> 54 </body> 55 56 </html> Call the custom tag guestlist to iterate over the guest information and display a table. CustomTagBody.jsp Program Output

Obtain the guestlist for the guest data bean. 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 GuestBookTag.java Obtain the guestlist for the guest data bean.

If there are more guests, loop and continue processing. 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. GuestBookTag.java

GuestBookTag.java 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 } GuestBookTag.java

GuestBookTagExtraInfo.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 GuestBookTagExtraInfo.java Contains custom tag variable information

Specifies that this custom tag contains JSP information in its body 1 <!-- A tag that iterates over an ArrayList of GuestBean --> 2 <!-- objects, so they can be output in a JSP --> 3 <tag> 4 <name>guestlist</name> 5 6 <tagclass> 7 com.deitel.advjhtp1.jsp.taglibrary.GuestBookTag 8 </tagclass> 9 10 <teiclass> 11 com.deitel.advjhtp1.jsp.taglibrary.GuestBookTagExtraInfo 12 </teiclass> 13 14 <bodycontent>JSP</bodycontent> 15 16 <info> 17 Iterates over a list of GuestBean objects 18 </info> 19 </tag> Specifies that this custom tag contains JSP information in its body advjhtp1-taglib.tld Fig. 31.39 Element tag for the guestlist custom tag.