Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

J2EE Java Server Pages (JSP) Avanceret Internetteknologi 2 (ITNET2)

Lignende præsentationer


Præsentationer af emnet: "J2EE Java Server Pages (JSP) Avanceret Internetteknologi 2 (ITNET2)"— Præsentationens transcript:

1 J2EE Java Server Pages (JSP) Avanceret Internetteknologi 2 (ITNET2)

2 Ingeniørhøjskolen i Århus Slide 2 af 58 Indhold i denne præsentation Java Server Pages (JSP): –Simpelt eksempel hvor vi gør brug af en database sammen med JSP –Brug af custom tags samt JSTL –Brug af Expression Language (EL)

3 Ingeniørhøjskolen i Århus Slide 3 Action Vi tager endnu et DEITEL eksempel –Eksemplet er en gæste bog (GuestBook) Der benytter sig af en database til at gemme data I kapitel 30 i DEITEL fik I et eksempl på hvordan en Servlet kunne tilgå en JDBC database – dette var et klassisk skolebogs eksempel Dog bør man ikke tillade så tæt kobling i større Web Applikationer Hos DEITEL eksemplet afkobles der derfor vha. to JavaBeans, en value-bean og en data-bean Klassen GuestBean og klassen GuestDataBean

4 Ingeniørhøjskolen i Århus Slide 4 af 24 Guest- Bean.java Define Bean GuestBean Storage Bean 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 15 public String getFirstName() 16 { 17 return firstName; 18 } 19 21 public void setLastName( String name ) 22 { 23 lastName = name; 24 } 25 27 public String getLastName() 28 { 29 return lastName; 30 } 31 33 public void setEmail( String address ) 34 { 35 email = address; } 39 public String getEmail() 40 { 41 return email; 42 } 43 }

5 Ingeniørhøjskolen i Århus Slide 5 af 24 Guest- DataBean.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 ); Defines the database driver, URL, and SQL statements.

6 Ingeniørhøjskolen i Århus Slide 6 af 24 Guest- DataBean.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.

7 Ingeniørhøjskolen i Århus Slide 7 af 24 Guest- DataBean.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 }

8 Ingeniørhøjskolen i Århus Slide 8 af 24 GuestBook- Login.jsp 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.

9 Ingeniørhøjskolen i Århus Slide 9 af 24 GuestBook- Login.jsp 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 Use to extract the parameters from the request – and save them in the “guest” bean Check for data

10 Ingeniørhøjskolen i Århus Slide 10 af 24 GuestBook- Login.jsp 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. Then forward the client to the guestBookView JSP.

11 Ingeniørhøjskolen i Århus Slide 11 af 24 GuestBook- View.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 <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.

12 Ingeniørhøjskolen i Århus Slide 12 af 24 GuestBook- View.jsp 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.

13 Ingeniørhøjskolen i Århus Slide 13 af 24 GuestBook- View.jsp 71 72 <% // continue scriptlet 73 74 } // end while 75 76 %> 77 78 79 80 81 82

14 Ingeniørhøjskolen i Århus Slide 14 af 24 GuestBook- ErrorPage.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

15 Ingeniørhøjskolen i Århus Slide 15 af 24 GuestBook- ErrorPage.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

16 Ingeniørhøjskolen i Århus Slide 16 Custom Tag Libraries Indkaplser kompleks JSP funktionalitet i et skræddersyet tag Scriptlets kan være svære at forstå for HTML udviklere Defineret i Tag i pakken javax.servlet.jsp.tagtext Extender normalt TagSupport eller BodyTagSupport Tillader udviklere at udvikle JSP sider uden Java viden Kan manipulere JSP sider direkte Der kan købes tag libraries Jeg har blandede følelser – der er pro et contra her … JSPs tilgang via taglib direktivet –DEITEL tabel viser sammenhængene

17 Ingeniørhøjskolen i Århus Slide 17 Eksempel fra DEITEL Der skal laves en klasse der extender TagSupport klassen Her kan der laves ny funktionalitet Der skal laves et XML dokument (.tld ) der kaldes en tag library descriptor file. Ligesom ved Servlets kobler dette dokument til én eller flere klasser der extender TagSupport Herefter skal der blot bruges direktivet: – Der så kan bruge: –

18 Ingeniørhøjskolen i Århus Slide 18 af 24 CustomTagWel come.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.

19 Ingeniørhøjskolen i Århus Slide 19 af 24 WelcomeTagHa ndler.java Define tag handler WelcomeTagHa ndler 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.

20 Ingeniørhøjskolen i Århus Slide 20 af 24 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 Custom tag library descriptor file (advjhtp1-taglib.tld). Required taglibrary meta information Designate the tags name and location, and that this tag has no attributes.

21 Ingeniørhøjskolen i Århus Slide 21 Custom Tag med attributter Mulighed for at sende data med I følgende eksempel gennemgås dette detaljeret N.B. dette gennemgås kun kursorisk – det er ikke pensum

22 Ingeniørhøjskolen i Århus Slide 22 af 24 CustomTagAtt ribute.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.

23 Ingeniørhøjskolen i Århus Slide 23 af 24 Welcome2TagH andler.java Define Class Welcome2TagH andler.java Displays attribute value 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 } 33 return SKIP_BODY; // ignore the tag's body 34 } 37 public void setFirstName( String username ) 38 { 39 firstName = username; 40 } 41 }

24 Ingeniørhøjskolen i Århus Slide 24 af 24 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 Element tag for the welcome2 custom tag. Define attribute parameters

25 Ingeniørhøjskolen i Århus Slide 25 Expression Language (EL) Fra Servlet 2.4 / JSP 2.0 specifikationerne JSP 2.1 / JSF 1.0: Unified Expression Language Simplificere data behandling med udtryk Alternativ til at bruge scriplets / inline Java kode Immediate Evaluation Deferred Evaluation

26 Ingeniørhøjskolen i Århus Slide 26 EL Eksempel En form med to tekstfelter udfylt af en ”customer” bean – og en submit funktion

27 Ingeniørhøjskolen i Århus Slide 27 JSTL JavaServer Pages Standard Tag Library Samling af tags (elementer) til brug i JSP Alternativ til scriplets Ovenstående erstatter for eksempel behovet for en scriplet med en løkke

28 Ingeniørhøjskolen i Århus Slide 28 JSTL Oversigt

29 Ingeniørhøjskolen i Århus Slide 29 JSP Documents Traditionel JSP er HTML med indlejret kode –Overholder ikke XML wellformed syntaxen –Kan ikke editeres af en standard XML editor JSP Documents –Alternativ til traditionel JSP –Ren XML syntax (wellformed) –Udviklet til brug for bl.a. JSF og IDE støttet udvikling –Vil formodentligt på sigt erstatte traditionel syntax

30 Ingeniørhøjskolen i Århus Slide 30 JSP Document XML Syntax

31 Ingeniørhøjskolen i Århus Slide 31 Traditionel JSP Syntax

32 Ingeniørhøjskolen i Århus Slide 32 JSP Document XML Syntax Samme Dokument! Mere Elegant


Download ppt "J2EE Java Server Pages (JSP) Avanceret Internetteknologi 2 (ITNET2)"

Lignende præsentationer


Annoncer fra Google