Le JavaServer Pages - Lezione 7 I JavaBean



Documenti analoghi
1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

Le JavaServer Pages - Lezione 6 L accesso ai Database

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans

Laboratorio di Basi di Dati

Laboratorio di sistemi Prima Web Application JSP [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

19. LA PROGRAMMAZIONE LATO SERVER

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Programmazione a Oggetti Modulo B

Laboratorio di reti II: Java Server Pages

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

04/05/2011. Lezione 6: Form

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Esercitazione su JDBC

Sicurezza Informatica: Tecniche di SQL INJECTION

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Mac Application Manager 1.3 (SOLO PER TIGER)

JDBC versione base. Le classi/interfacce principali di JDBC

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

1 Applicazione J2EE sul SAP WAS con SAP NWDS

FtpZone Guida all uso Versione 2.1

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

1 JSPDynPage, componenti portale e Java Server Pages

MANUALE PARCELLA FACILE PLUS INDICE

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Interazione con l utente : i moduli.

Registratori di Cassa

L architettura MVC (Model- View-Controller) Introduzione

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

I FORM. L'attributo action contiene l'url del file php a cui devono essere inviati i file per essere elaborati.

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

ESEMPI DI FORM (da

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Sistema Gestionale FIPRO. Dott. Enea Belloni Ing. Andrea Montagnani

Guida alla registrazione on-line di un DataLogger

Risposte e consigli ruotanti attorno a Docsafe

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Oggetti Lezione 3. aspetti generali e definizione di classi I

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

Guida all installazione di Easy

Modulo 4: Ereditarietà, interfacce e clonazione

TERMINALE. Creazione e gestione di una postazione terminale di Eureka

2. LOGIN E RECUPERO DATI DI ACCESSO

CONDOMINIO MOBI. Per farlo, basta cliccare sul pulsante di pubblicazione dati nella buttonbar

1) GESTIONE DELLE POSTAZIONI REMOTE

Manuale Utente SIRECO

Standard Nazionale di Comunicazione Mercato Gas

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

ACTIVE SERVICE PAGES E DATABASE: tecnologia ADO

Database e reti. Piero Gallo Pasquale Sirsi

FtpZone Guida all uso

Invio SMS. DM Board ICS Invio SMS

FPf per Windows 3.1. Guida all uso

DURANTE LA NAVIGAZIONE NEI SITI WEB I VISITATORI NON SOLO POSSONO CONSULTARE INFORMAZIONI STATICHE

Manuale Utente MyFastPage

Introduzione JDBC interfaccia java.sql driver caricare i driver

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

1. Compilazione dell istanza di adesione

I file di dati. Unità didattica D1 1

Progetto Istanze On Line

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

MANUALE ESSE3 Gestione Registro delle lezioni

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

MUSEO&WEB. un area riservata (OTEBAC) Roma, 15 giugno 2010

Manuale d uso Lexun Area Riservata proprietà di logos engineering - Sistema Qualità certificato ISO 9001 Det Norske Veritas Italia

Accreditamento al SID

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

Guida al primo accesso sul SIAN

COSTER. Import/Export su SWC701. SwcImportExport

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

I Codici Documento consentono di classificare le informazioni e di organizzare in modo logico l archiviazione dei file.

Laboratorio di sistemi Autenticazione utente mediante scriplet Jsp [NetBeans]

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Manuale LiveBox WEB ADMIN.

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

Amministrazione Trasparente

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

JDBC per l accesso Java a DB. Tito Flagella tito@link.it

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

A tal fine il presente documento si compone di tre distinte sezioni:

CONTENT MANAGEMENT SY STEM

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

L amministratore di dominio

CORSO DI FORMAZIONE PER L'ACCESSO AI LABORATORI DELL'ATENEO COMPILAZIONE SCHEDA DI ACCESSO

ING SW. Progetto di Ingegneria del Software. e-travel. Requisiti Utente. Specifiche Funzionali del Sistema

NOVITÀ SITI COMMERCIALISTA

Casalini Crypto. Documento di protocollo tecnico VRS 2.1

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

CamiGas-Digigas: Manuale Referente

6 BILANCI E NOTA INTEGRATIVA

Tomcat & Servlet. Contenuti. Programmazione in Ambienti Distribuiti. Tomcat Applicazioni Web. Servlet JSP Uso delle sessioni

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

Guido d uso sito internet Unione Valdera

Transcript:

Le JavaServer Pages - Lezione 7 I JavaBean A cura di Giuseppe De Pietro (depietro_giuseppe@yahoo.it) Contenuti Nelle lezioni precedenti abbiamo visto gli elementi principali delle Java Server Pages, come scambiare i dati tra client e server e come interagire con i database, operazioni comuni a tutte le altre tecnologie lato server. Come comuni sono anche i problemi che si verificano con questo tipo di programmazione: codice HTML mescolato a codice Java che non facilita la leggibilità di un documento mancanza assoluta della separazione della presentazione dei dati dalla logica gestionale. Una pagina JSP compilata come finora abbiamo visto potrà risultare ostica sia ad un programmatore Java (che avrà difficoltà a curare i tag HTML) sia ad un grafico che si ritroverà tra i tag HTML, del codice per lui incomprensibile. In questa lezione proporremo alcune soluzioni a questi problemi parlando dei JavaBean, ovvero i componenti che distinguono le JSP dalle altre tecnologie. Vedremo come creare dei semplici JavaBean e come farli interagire con un database. Cosa sono i JavaBean JavaBeans components are Java classes that can be easily reused and composed together into applications. È la definizione iniziale fornita da Sun Microsystem (nelle specifiche J2EE) che ci lascia capire di come nella progettazione dei JavaBean, la riusabilità e modularità siano concetti essenziali. I JavaBeans sono delle classi Java che devono rispettare le seguenti regole: avere un costruttore privo di argomenti o esserne addirittura privo, (quando una classe Java non dichiara esplicitamente un costruttore, le viene fornito automaticamente uno privo di argomenti). Possono avere delle proprietà a cui è possibile accedere con i classici metodi: public void setpropertyname (PropertyType value); per impostare la proprietà, mentre per ottenere un valore: public PropertyType getpropertyname(); I metodi di accesso a queste proprietà devono essere pubblici, ma una proprietà non è detto che debba per forza avere il metodo set ed il metodo get. Per esempio potrebbe essere di sola lettura e quindi avere solo il metodo get. Usare i JavaBean in un applicazione Web I JavaBean sono quindi delle classi Java, il cui codice sorgente sarà inserito in un file nomeclasse.java. Con la compilazione di tale file se ne crea uno nuovo di nome nomeclasse.class. Tutti i JavaBean compilati (quindi solo i file.class) per poter essere utilizzati dovranno essere JSP Lezione 7 I JavaBean 1

inseriti nella directory WEB-INF/classes della nostra Web Application. Si riporta di seguito un esempio di struttura di un applicazione: Per esempio il componente login.class è inserito in una sottocartella di nome miopackage, di conseguenza la classe login dovrà appartenere al package miopackage (stesso discorso anche per il componente miobean.class). La pagina jsp che vorrà utilizzare il JavaBean dovrà inserire al suo interno l azione jsp:usebean che unita alle altre due azioni jsp:setproperty e jsp:getproperty, permette la gestione completa del componente. È possibile avere due sintassi: <jsp:usebean id="nome" scope="valore" opzioni /> e <jsp:usebean id="nome" scope=" valore " opzioni > Codice di inizializzazione </jsp:usebean> a seconda della necessità di inserire o meno del codice da eseguire quando il bean viene istanziato. Gli attributi id: viene utilizzato per assegnare un nome identificativo all istanza del bean. Tale nome sarà utilizzato per accedere alle proprietà del componente all interno della pagina JSP. scope: indica l ambito di visibilità del bean. Esso può assumere i seguenti valori: o page: è il valore di default. Il bean esisterà solo all interno della pagina che lo istanzia. Esso verrà distrutto ogni volta che l utente si sposta in una pagina successiva e ricreato ogni volta che la pagina verrà richiesta. o request: il bean sarà visibile all interno della richiesta, questo significa che si potrà accedere ad esso anche in pagine incluse dalle azioni jsp:include e jsp:forward. o session: il bean sarà visibile all interno di una stessa sessione utente. o application: utilizzato per creare componenti comuni a tutta la web application, quindi a tutti gli utenti. opzioni: le opzioni sono attributi particolari che indicano delle modalità differenti di funzionamento dell azione jsp:usebean. Sono possibili le seguenti combinazioni: o class: con questo attributo si specifica il nome della classe del bean da istanziare o, se il bean esiste già, richiamare un istanza precedentemente creata. È l attributo che di solito si utilizza. o type: indica il tipo della classe bean o anche il tipo dell interfaccia implementata dal bean. Viene usato raramente e solo nei casi in cui si vuole accedere ad un bean già istanziato e del tipo specificato. JSP Lezione 7 I JavaBean 2

o beanname: insieme all attributo type è utile in questi tre casi: il bean non esiste, si crea una nuova istanza. il bean esiste, si ottiene un riferimento all oggetto già esistente. Il bean è stato serializzato 1, si caricano i dati salvati e si istanzia il bean. Gestire le proprietà di un JavaBean Per poter accedere alle proprietà di un bean si utilizza l azione: <jsp:getproperty name="idnome" property="nomeproprietà"/> Che equivale all espressione: <%=Idnome.getNomeProprietà()%> Mentre per impostare i valori della proprietà è possibile utilizzare varie sintassi. Per assegnare un determinato valore ad una proprietà si utilizza: <jsp:setproperty name="idnome" property="nomeproprietà" value="valore"/> Per assegnare ad una proprietà del bean il valore del parametro di una richiesta: <jsp:setproperty name="idnome" property="nomeproprietà" /> È necessario che il nome del parametro sia uguale al nome della proprietà. In caso di nomi diversi si utilizza la seguente sintassi: <jsp:setproperty name="idnome" property="nomeproprietà" param="nomeparametro"/> Se si creano dei form con i nomi dei controlli uguali ai nomi delle proprietà del bean, esiste una forma abbreviata che permette di impostare tutte le proprietà del bean in un unica azione: <jsp:setproperty name="idnome" property="*" /> Se si modifica il codice di una classe JavaBean è necessario riavviare Tomcat affinchè le modifiche abbiano effetto. Un esempio reale Per chiarire meglio i concetti sopra esposti e i vantaggi nell utilizzo dei JavaBean, realizzeremo un applicazione che, dopo aver effettuato il login, darà la possibilità ad un utente autorizzato di poter modificare i propri dati. La struttura del database sarà quella illustrata nella lezione 6. Si partirà con il file esempio7_1.jsp che conterrà un form di autenticazione utente in cui si richiederanno il nome utente e la password. 1 processo con cui si salva lo stato di un oggetto, mentre la deserializzazione è il processo con cui si ripristina un oggetto precedentemente salvato. JSP Lezione 7 I JavaBean 3

<%@ page language="java" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it"> <head> <title>usare i JavaBean</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> </head> <body> <h2>i JavaBean</h2> <form method="post" action="mostradati.jsp"> <fieldset> <legend>login utente</legend> <label for="userid">user id: </label> <input type="text" name="userid" id="userid"> <label for="password">password: </label> <input type="password" name="password" id="password"> <input type="submit" value="login" name="invia"> </fieldset> </form> </body> </html> Creiamo il JavaBean che chiameremo Utente.java e il file compilato (da prompt dei comandi digitare javac Utente.java) lo inseriamo nella cartella WEB-INF/classes/mieiBean della nostra Web Application. package mieibean; import java.sql.*; public class Utente { private String userid=""; private String password=""; private String cognome=""; private String nome=""; private String tipovia=""; private String indirizzo=""; private String numcivico=""; private String cap=""; private String citta=""; private String prov=""; private String idtipo=""; private String email=""; private String telefono=""; private String cellulare=""; private boolean utenteesiste=false; private String msgerrore=""; public String getcap() { return cap; public void setcap(string cap) { this.cap = cap; public String getcellulare() { return cellulare; JSP Lezione 7 I JavaBean 4

public void setcellulare(string cellulare) { this.cellulare = cellulare; public String getcitta() { return citta; public void setcitta(string citta) { this.citta = citta; public String getcognome() { return cognome; public void setcognome(string cognome) { this.cognome = cognome; public String getemail() { return email; public void setemail(string email) { this.email = email; public String getidtipo() { return idtipo; public void setidtipo(string idtipo) { this.idtipo = idtipo; public String getindirizzo() { return indirizzo; public void setindirizzo(string indirizzo) { this.indirizzo = indirizzo; public String getnome() { return nome; public void setnome(string nome) { this.nome = nome; public String getnumcivico() { return numcivico; public void setnumcivico(string numcivico) { this.numcivico = numcivico; public String getpassword() { return password; /** JSP Lezione 7 I JavaBean 5

public void setpassword(string password) { this.password = password; public String getprov() { return prov; public void setprov(string prov) { this.prov = prov; public String gettelefono() { return telefono; public void settelefono(string telefono) { this.telefono = telefono; public String gettipovia() { return tipovia; public void settipovia(string tipovia) { this.tipovia = tipovia; public String getuserid() { return userid; public void setuserid(string userid) { this.userid = userid; public boolean isutenteesiste() { return utenteesiste; public void setutenteesiste(boolean utenteesiste) { this.utenteesiste = utenteesiste; public String getmsgerrore() { return msgerrore; public boolean loadutente() { utenteesiste=false; if (password!=null && userid!=null){ PreparedStatement stmt = null; ResultSet rs = null; Connection cn=null; try{ Class.forName("com.mysql.jdbc.Driver"); cn = DriverManager.getConnection("jdbc:mysql://localhost/registro_online?user=root&p assword=segreta"); String sql="select * FROM utente WHERE UserID=? AND password=?"; stmt = cn.preparestatement(sql); stmt.setstring(1,userid); JSP Lezione 7 I JavaBean 6

stmt.setstring(1,userid); stmt.setstring(2,password); rs = stmt.executequery(); if (rs.next()){ //utente esistente utenteesiste=true; cognome=rs.getstring("cognome"); nome=rs.getstring("nome"); tipovia=rs.getstring("tipovia"); indirizzo=rs.getstring("indirizzo"); numcivico=rs.getstring("numcivico"); cap=rs.getstring("cap"); citta=rs.getstring("citta"); prov=rs.getstring("prov"); idtipo=rs.getstring("idtipo"); email=rs.getstring("email"); telefono=rs.getstring("telefono"); cellulare=rs.getstring("cellulare"); rs.close(); stmt.close(); cn.close(); catch (Exception e) { msgerrore=e.getmessage(); return utenteesiste; public boolean saveutente(){ utenteesiste=false; PreparedStatement stmt = null; ResultSet rs = null; Connection cn=null; try{ Class.forName("com.mysql.jdbc.Driver"); cn = DriverManager.getConnection("jdbc:mysql://localhost/registro_online?user=root&p assword=segreta"); //inserisce i dati String sql="update utente SET password=?,cognome=?,nome=?,tipovia=?,indirizzo=?,numcivico=?,cap=?,citta=?,pro v=?,idtipo=?,email=?,telefono=?,cellulare=? Where userid=?"; PreparedStatement stmtins = cn.preparestatement(sql); stmtins.setstring(14,userid); stmtins.setstring(1,password); stmtins.setstring(2,cognome); stmtins.setstring(3,nome); stmtins.setstring(4,tipovia); stmtins.setstring(5,indirizzo); stmtins.setstring(6,numcivico); stmtins.setstring(7,cap); stmtins.setstring(8,citta); stmtins.setstring(9,prov); stmtins.setstring(10,idtipo); stmtins.setstring(11,email); stmtins.setstring(12,telefono); stmtins.setstring(13,cellulare); stmtins.executeupdate(); utenteesiste=true; rs.close(); cn.close(); JSP Lezione 7 I JavaBean 7

cn.close(); catch (Exception e){ msgerrore=e.getmessage(); return utenteesiste; Useremo il nostro Bean nella pagina mostradati.jsp che a seconda del nome e della password inseriti, caricherà i dati relativi all utente. Il JavaBean avrà uno scope session, questo significa che l istanza del Bean esisterà finchè la sessione utente sarà attiva. <%@ page language="java" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it"> <head> <title>usare i JavaBean</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> </head> <body> <h2>i JavaBean</h2> <% boolean utenteesiste=false; %> <%-- Creazione o recupero del JavaBean --%> <jsp:usebean id="utente" scope="session" class="mieibean.utente" /> <jsp:setproperty name="utente" property="userid"/> <jsp:setproperty name="utente" property="password"/> <% utenteesiste=utente.loadutente(); if(utenteesiste){ %> <form method="post" action="salvadati.jsp"> <fieldset> <legend>inserimento dati nuovo utente</legend> <label for="userid">user ID: </label> <input type="text" name="userid" id="userid" value="<jsp:getproperty name='utente' property='userid'/>"> <label for="password">password: </label> <input type="password" name="password" id="password" value="<jsp:getproperty name='utente' property='password'/>"> <label for="cognome">cognome: </label> <input type="text" name="cognome" id="cognome" value="<jsp:getproperty name='utente' property='cognome'/>"> <label for="nome">nome: </label> <input type="text" name="nome" id="nome" value="<jsp:getproperty name='utente' property='nome'/>"> <label for="tipovia">tipo Via: </label> <input type="text" name="tipovia" id="tipovia" value="<jsp:getproperty name='utente' property='tipovia'/>"> <label for="indirizzo">indirizzo: </label> <input type="text" name="indirizzo" id="indirizzo" value="<jsp:getproperty name='utente' property='indirizzo'/>"> JSP Lezione 7 I JavaBean 8

<label for="numcivico">n Civico: </label> <input type="text" name="numcivico" id="numcivico" value="<jsp:getproperty name='utente' property='numcivico'/>"> <label for="cap">cap: </label> <input type="text" name="cap" id="cap" value="<jsp:getproperty name='utente' property='cap'/>"> <label for="citta">città: </label> <input type="text" name="citta" id="citta" value="<jsp:getproperty name='utente' property='citta'/>"> <label for="prov">provincia: </label> <input type="text" name="prov" id="prov" value="<jsp:getproperty name='utente' property='prov'/>"> <label for="idtipoutente">tipo utente: </label> <% String tipoutente=utente.getidtipo(); %> <select name="idtipo" id="idtipo"> <option value="stu" <%if(tipoutente.equals("stu")) out.write("selected"); %>>Studente</option> <option value="ins" <%if(tipoutente.equals("ins")) out.write("selected"); %>>Insegnante</option> <option value="gen" <%if(tipoutente.equals("gen")) out.write("selected"); %>>Genitore</option> <option value="adm" <%if(tipoutente.equals("adm")) out.write("selected"); %>>Amministratore</option> </select> <label for="email">e-mail: </label> <input type="text" name="email" id="email" value="<jsp:getproperty name='utente' property='email'/>"> <label for="telefono">telefono: </label> <input type="text" name="telefono" id="telefono" value="<jsp:getproperty name='utente' property='telefono'/>"> <label for="cellulare">cellulare: </label> <input type="text" name="cellulare" id="cellulare" value="<jsp:getproperty name='utente' property='cellulare'/>"> <input type="submit" value="invia" name="invia"> </fieldset> </form> <% else { out.write("utente non trovato. " + utente.getmsgerrore()); %> </body> </html> I dati visualizzati potranno essere modificati e il salvataggio degli aggiornamenti saranno effettuati dalla pagina salvadati.jsp: JSP Lezione 7 I JavaBean 9

<%@ page language="java" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it"> <head> <title>usare i JavaBean</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> </head> <body> <h2>i JavaBean</h2> <% boolean utenteesiste=false; %> <jsp:usebean id="utente" class="mieibean.utente" scope="session"/> <jsp:setproperty name="utente" property="*"/> <% utenteesiste=utente.saveutente(); if(utenteesiste){ out.write("dati salvati correttamente"); else{ out.write("si è verificato il seguente problema:" + utente.getmsgerrore()); %> <a href="mostradati.jsp" title="torna ai dati personali">torna ai dati personali</a> </body> </html> Dall esempio proposto risulta evidente come siano molto più comprensibili le pagine jsp che utilizzano i bean, anziché inserire tutto il codice di gestione come scriptless. JSP Lezione 7 I JavaBean 10