Vous êtes sur la page 1sur 18

JSP e JavaBeans

JSP e Java Beans


O desenvolvimento de sistemas com JSP apresenta como problema principal a mistura de cdigo e XHTML. Em caso de alteraes tanto programadores quanto web-designers devem ser envolvidos. A melhor soluo separar a lgica em classes designadas por Java Beans. Estas classes podem ser acedidas directamente da pgina JSP atravs de uso de propriedades. Como no h programao, a tarefa pode ser realizada pelo webdesigner diminuindo o impacto tanto da alterao de cdigo quanto ao do layout

Java Beans
Java Beans so classes Java que obdecem determinadas regras:
Deve existir um construtor pblico e sem parmetros Nenhum atributo pode ser pblico Os atributos so acedidos atravs de mtodos pblicos setXxx, getXxx e isXxx

Estas regras determinam um padro que possibilita o uso de Beans como componentes em ferramentas de desenvolvimento. Estes componentes minimizam a necessidade de programao pois so utilizados atravs de suas propriedades.

Tipos de Java Beans Existem trs tipos de Java Beans:


Visuais, utilizados no desenvolvimento de interfaces. Dados, que fornecem um padro para acesso a valores. Servios, usados para clculos, acesso a tabelas e algoritmos especficos.

Em JSP apenas os dois ltimos tipos so usados

Exemplo de Java Bean


class Hora { private int hora, minuto; public Hora() { hora = minuto = 0; } public int getSegundos() { return hora*3600+60*minuto; } }

Uso de Java Beans Para utilizar Java Beans em uma aplicao comum deve-se criar um objecto e aceder aos seus mtodos Em JSP, existem Marcas especiais para criao e recuperao de propriedades que no exigem conhecimento de programao

Criar Java Beans

Aco <jsp:useBean>
Permite JSP gerir objectos Java Cria objectos Java ou selecciona um objecto que j existe para que seja possvel utiliza-lo numa JSP Exemplo:
<jsp:useBean id = obj class = Hora/>

Esta tag semelhante a: Hora obj = new Hora();

Recuperar Propriedades
Para ler uma propriedade de um Bean usa-se o atributo getProperty Exemplo:
<jsp:getProperty name = obj property = Segundos />

Esta Marca retorna no local em que estiver o valor da propriedade recuperada

Alterar Propriedades Para alterar uma propriedade usa-se setProperty. Exemplo:


<jsp:setProperty name = obj property = Segundos value = 60/>

Inicializar Beans Caso seja necessrio inicializar um Beans usa-se a sintaxe:


<jsp:useBean id = obj class = Hora>

<%-- Inicializao do Bean --%> </jsp:useBean>

O cdigo executado apenas se o Bean for criado

Partilha dos Beans


A criao padro disponibiliza o Bean apenas para a pgina actual Para alterar o nvel de acesso usa-se o atributo scope Exemplo: <jsp:useBean id = obj class = Hora scope=page> Scope pode ter quatro valores: page, mantm o Bean at que a pgina seja mostrada request, mantm o Bean at que a resposta seja toda enviada session, o Bean existe durante a sesso application, o Bean dura enquanto a aplicao Web actual estiver activa

Propriedades Indexadas
No existem Marcas especficas para o acesso a propriedades indexadas Para aceder tais propriedades deve-se usar scriptlets e expresses Exemplo:
<%for(int i=0; i<10; i++) { %> <%=obj.getPropriedade(i)%> <br> <%}%>

Propriedades e Parmetros Os parmetros (getParameter) podem ser inseridos directamente em propriedades de Java Beans. Basta usar o nome do parmetro no atributo param:
<jsp:setProperty name=obj property=nome param = nome/>

Propriedades e Parmetros Para propriedades e parmetros com o mesmo nome possvel fazer a associao total com o uso de * Exemplo:
<jsp:setProperty name=obj property=* />

A comparao dos nomes sensvel a maisculas e minsculas

Exemplos

Exemplo1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

// Fig. 10.17: Rotator.java // A JavaBean that rotates advertisements. package com.deitel.advjhtp1.jsp.beans; public class Rotator { private String images[] = { "images/jhtp3.jpg", "images/xmlhtp1.jpg", "images/ebechtp1.jpg", "images/iw3htp1.jpg", "images/cpphtp3.jpg" }; private String links[] = { "http://www.amazon.com/exec/obidos/ASIN/0130125075/" + "deitelassociatin", "http://www.amazon.com/exec/obidos/ASIN/0130284173/" + "deitelassociatin", "http://www.amazon.com/exec/obidos/ASIN/013028419X/" + "deitelassociatin", "http://www.amazon.com/exec/obidos/ASIN/0130161438/" + "deitelassociatin", "http://www.amazon.com/exec/obidos/ASIN/0130895717/" + "deitelassociatin" }; private int selectedIndex = 0; // returns image file name for current ad public String getImage() { return images[ selectedIndex ]; } // returns the URL for ad's corresponding Web site public String getLink() { return links[ selectedIndex ]; }

Bean Rotator destinado a manter um contador sobre a de publicidade (Parte 1). Linhas 25-28 Linhas 31-34

Retorna o nome do ficheiro que servir para a imagem do livro Retorna o hyperlink para o livro em Amazon.com

36 37 38 39 40 41 42

// update selectedIndex so next calls to getImage and // getLink return a different advertisement public void nextAd() { selectedIndex = ( selectedIndex + 1 ) % images.length; } }

Altera o estado de Rotator para que chamadas seguintes a Fig. 10.17 Rotator getImage and getLink bean that maintains a return information for set of advertisements different advertisements (Part 2). Lines 38-41

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1 -strict.dtd"> <!-- Fig. 10.18: adrotator.jsp --> <jsp:useBean id = "rotator" scope = "application" class = "com.deitel.advjhtp1.jsp.beans.Rotator" /> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>AdRotator Example</title> <style type = "text/css"> .big { font-family: helvetica, arial, sans-serif; font-weight: bold; font-size: 2em } </style> <%-- update advertisement --%> <% rotator.nextAd(); %> </head> <body> <p class = "big">AdRotator Example</p> <p> <a href = "<jsp:getProperty name = "rotator" property = "link" />"> <img src = "<jsp:getProperty name = "rotator" property = "image" />" alt = "advertisement" /> </a> </p>

adrotator.jsp Usa o componente Rotator Use jsp:useBean para obtain reference action to mostrar uma toimagem distinta cada Rotator object vez que feita uma chamada pgina (Parte 1). Linhas 7-8 Linhas 22 Linhas 29-23 Invoke Rotators nextAd method Define hyperlink to Amazon.com site

36 37

</body> </html>

adrotator.jsp Usa o componente Rotator para mostrar uma imagem distinta cada vez que feita uma chamada pgina (Parte 2).

Exemplos

Exemplo2

10

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

// Fig. 10.20: GuestBean.java // JavaBean to store data for a guest in the guest book. package com.deitel.advjhtp1.jsp.beans; public class GuestBean { private String firstName, lastName, email; // set the guest's first name public void setFirstName( String name ) { firstName = name; } // get the guest's first name public String getFirstName() { return firstName; } // set the guest's last name public void setLastName( String name ) { lastName = name; } // get the guest's last name public String getLastName() { return lastName; }

GuestBean armazena a informao sobre um utilizador (Parte 1). Linha 6 GuestBean define trs propriedades: firstName, lastName e email

32 33 34 35 36 37 38 39 40 41 42 43

// set the guest's email address public void setEmail( String address ) { email = address; } // get the guest's email address public String getEmail() { return email; } }

Fig. 10.20 GuestBean stores information for one guest (Part 2).

11

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

// Fig. 10.21: GuestDataBean.java // Class GuestDataBean makes a database connection and supports // inserting and retrieving data from the database. package com.deitel.advjhtp1.jsp.beans; // Java core packages import java.io.*; import java.sql.*; import java.util.*; public class GuestDataBean { private Connection connection; private PreparedStatement addRecord, getRecords; // construct TitlesBean object public GuestDataBean() throws Exception { // load the Cloudscape driver Class.forName( "COM.cloudscape.core.RmiJdbcDriver" ); // connect to the database connection = DriverManager.getConnection( "jdbc:rmi:jdbc:cloudscape:guestbook ); " getRecords = connection.prepareStatement( "SELECT firstName, lastName, email FROM guests" ); addRecord = connection.prepareStatement( "INSERT INTO guests ( " + "firstName, lastName, email ) " + "VALUES ( ?, ?, ? )" );

GuestDataBean realiza o acesso a base de dados sob o comando de guestBookLogin.jsp (Parte 1). Linhas 22-23

GuestDataBean liga-se a base de dados to guestbook

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 61 62 63 64 65 66 67 68 69

} // return an ArrayList of GuestBeans public ArrayList getGuestList() throws SQLException { ArrayList guestList = new ArrayList(); // obtain list of titles ResultSet results = getRecords.executeQuery(); // get row data while ( results.next() ) { GuestBean guest = new GuestBean(); guest.setFirstName( results.getString( 1 ) ); guest.setLastName( results.getString( 2 ) ); guest.setEmail( results.getString( 3 ) ); guestList.add( guest ); } return guestList; } // insert a guest in guestbook database public void addGuest( GuestBean guest ) throws SQLException { addRecord.setString( 1, guest.getFirstName() ); addRecord.setString( 2, guest.getLastName() ); addRecord.setString( 3, guest.getEmail() ); addRecord.executeUpdate(); }

GuestDataBean realiza o acesso a base de dados sob o comando de guestBookLogin.jsp (Parte 2).

Linhas 39-68
GuestDataBean disponibliza mtodos que permitem o acesso a base de dados (getGuestList e addGuest)

12

70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

// close statements and terminate database connection protected void finalize() { // attempt to close database connection try { getRecords.close(); addRecord.close(); connection.close(); } // process SQLException on close operation catch ( SQLException sqlException ) { sqlException.printStackTrace(); } } }

GuestDataBean realiza o acesso a base de dados sob o comando de guestBookLogin.jsp (Parte 3).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1 -strict.dtd"> <!-- Fig. 10.22: guestBookLogin.jsp --> <%-- page settings --%> <%@ page errorPage = "guestBookErrorPage.jsp" %> <%-- beans used in this JSP --%> <jsp:useBean id = "guest" scope = "page" class = "com.deitel.advjhtp1.jsp.beans.GuestBean" /> <jsp:useBean id = "guestData" scope = "request" class = "com.deitel.advjhtp1.jsp.beans.GuestDataBean" /> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>Guest Book Login</title> <style type = "text/css"> body { font-family: tahoma, helvetica, arial, sans-serif; } table, tr, td { font-size: .9em; border: 3px groove; padding: 5px; background-color: #dddddd; } </style> </head>

Directiva page page JavaServer define informao que guestBookdisponbilizada na JSP permite Login.jsp introduzir trs parametros que Aco jsp:useBean sero armazenados permite obter uma numa base de dados referencia aos objectos (Parte1) GuestBean e GuestDataBean Linha 8 Linha 11-14

13

35 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 61 62 63 64 65 66 67 68 69

<body> <jsp:setProperty name = "guest" property = "*" /> <% // start scriptlet if ( guest.getFirstName() == null || guest.getLastName() == null || guest.getEmail() == null ) { %> <%-- end scriptlet to insert fixed template data --%> <form method = "post" action = "guestBookLogin.jsp"> <p>Enter your first name, last name and email address to register in our guest book. </p> <table> <tr> <td>First name</td> <td> <input type = "text" name = "firstName" /> </td> </tr> <tr> <td>Last name</td> <td> <input type = "text" name = "lastName" /> </td> </tr> <tr> <td>Email</td>

As propriedade de JavaServer page GuestBean so guestBookcopiadas dos valores Login.jsp permite contidos nos parmetros introduzir trs anlogos parametros que sero armazenados numa base de dados (Parte2) Linha 36

70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

<td> <input type = "text" name = "email" /> </td> </tr> <tr> <td colspan = "2"> <input type = "submit" value = "Submit" /> </td> </tr> </table> </form> <% // continue scriptlet } // end if else { guestData.addGuest( guest ); %> <%-- end scriptlet to insert jsp:forward action --%> <%-- forward to display guest book contents --%> <jsp:forward page = "guestBookView.jsp" /> <% // continue scriptlet } // end else

JavaServer page guestBookLogin.jsp permite introduzir trs parametros que sero armazenados numa base de dados (Parte3) Linha 93

Redereciona o pedidos para guestBookView.jsp

%> <%-- end scriptlet --%> </body> </html>

14

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1 -strict.dtd"> <!-- Fig. 10.23: guestBookView.jsp --> <%-- page settings --%> <%@ page errorPage = "guestBookErrorPage.jsp" %> <%@ page import = "java.util.*" %> <%@ page import = "com.deitel.advjhtp1.jsp.beans.*" %> <%-- GuestDataBean to obtain guest list --%> <jsp:useBean id = "guestData" scope = "request" class = "com.deitel.advjhtp1.jsp.beans.GuestDataBean" /> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>Guest List</title> <style type = "text/css"> body { font-family: tahoma, helvetica, arial, sans-serif; } table, tr, td, th { text-align: center; font-size: .9em; border: 3px groove; padding: 5px; background-color: #dddddd; } </style> </head>

Directiva page page JavaServer guestBookimport indica quais os packages View.jsp mostra o e classes que conteudo so utilizados no do livro de visitas (Parte 1). contexto da JSP Aco jsp:useBean Linhas 9-10 permite obter uma referencia para Linhas 13-14 GuestDataBean

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 61 62 63 64 65 66 67 68 69 70

<body> <p style = "font-size: 2em;">Guest List</p> <table> <thead> <tr> <th style = "width: 100px;">Last name</th> <th style = "width: 100px;">First name</th> <th style = "width: 200px;">Email</th> </tr> </thead> <tbody> <% // start scriptlet List guestList = guestData.getGuestList(); Iterator guestListIterator = guestList.iterator(); GuestBean guest; while ( guestListIterator.hasNext() ) { guest = ( GuestBean ) guestListIterator.next(); %> <%-- end scriptlet; insert fixed template data --%> <tr> <td><%= guest.getLastName() %></td> <td><%= guest.getFirstName() %></td> <td> <a href = "mailto:<%= guest.getEmail() %>"> <%= guest.getEmail() %></a> </td> </tr>

JavaServer page guestBookView.jsp mostra o conteudo do livro de visitas (Parte 2). Linhas 50-68 Scriptlet mostra lista de last name, first name e email para

15

71 72 73 74 75 76 77 78 79 80 81 82

<% // continue scriptlet } // end while %> <%-- end scriptlet --%> </tbody> </table> </body> </html>

JavaServer page guestBookView.jsp mostra o conteudo do livro de visitas (Parte 3).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1 -strict.dtd"> <!-- Fig. 10.24: guestBookErrorPage.jsp --> <%-- page settings --%> <%@ page isErrorPage = "true" %> <%@ page import = "java.util.*" %> <%@ page import = "java.sql.*" %> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>Error!</title> <style type = "text/css"> .bigRed { font-size: 2em; color: red; font-weight: bold; } </style> </head> <body> <p class = "bigRed"> <% // scriptlet to determine exception type // and output beginning of error message if ( exception instanceof SQLException ) %> An SQLException

Directiva page page JavaServer guestBookErrorisErrorPage indica que View.jsp guestBookError- chamda Page em resposta a uma pgina de excepes tratamento de errosque possam acontecer em guestBookLogin.jsp e guestBookView.jsp (Parte 1). Linha 8 Linha 31

Uso do objecto implicito exception para determinar o erro que deve ser mostrado

16

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 61 62

<% else if ( exception instanceof ClassNotFoundException ) %> A ClassNotFoundException <% else %> An exception <%-- end scriptlet to insert fixed template data --%> <%-- continue error message output --%> occurred while interacting with the guestbook database. </p> <p class = "bigRed"> The error message was:<br /> <%= exception.getMessage() %> </p> <p class = "bigRed">Please try again later</p> </body> </html>

JavaServer page Uso do objecto implicito exception para guestBookErrordeterminar o erro que View.jsp chamda deve ser mostrado em resposta a excepes que possam acontecer em guestBookLogin.jsp e guestBookView.jsp (Parte 2).

Linha 37

Aco <jsp:useBean> (cont.)

17

Aco <jsp:useBean> (cont.)

18

Vous aimerez peut-être aussi