JavaBean
Dott. Ing. Rossella Rubino
[email protected]
A.A. 2007/2008
Laboratorio III
Operatore Informatico Giuridico
Cosa è un JavaBean?

E’ una classe Java che risponde a due
requisiti




ha un costruttore con zero argomenti
implementa Serializable o Externalizable per
essere persistente
Molte classi sono JavaBean o possono
essere convertite facilmente
Possono essere inserite in applet, javascript,
jsp, servlet o applicazioni Java indipendenti

unico requisito: JVM
Proprietà del JavaBean



Sono attributi del JavaBean per i quali lo
stesso JavaBean offre dei metodi di scrittura
e lettura
Questi metodi sono l’unica interfaccia del
JavaBean con l’esterno
Convenzioni di denominazione per i metodi
relativi alle proprietà


get<nomeproprieta>()
set<nomeproprieta>()
Osservazione


I metodi di accesso alle proprietà del Bean
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.
Esempio: Prestito.java
import java.beans.*;
import java.io.Serializable;
public class Prestito extends Object
implements Serializable {
private double somma;
private double tasso;
private int mesi;
public Prestito() {
}
Prestito.java: proprietà somma
/* Restituisce la somma prestata
*@return la somma*/
public double getSomma(){
return somma;
}
/* Imposta la somma
*@param somma: la somma prestata*/
public void setSomma(double somma){
this.somma=somma;
}
Prestito.java: proprietà tasso
/* Restituisce il tasso di interesse annuo
*@return il tasso di interesse annuo*/
public double getTasso(){
return tasso;
}
/* Imposta il tasso di interesse annuo
*@param tasso: il tasso di interesse
annuo*/
public void setTasso(double tasso){
this.tasso=tasso;
}
Prestito.java: proprietà mesi
/* Restituisce i mesi scelti per il rimborso del
prestito
*@return i mesi scelti per il rimborso del prestito*/
public int getMesi(){
return mesi;
}
/* Imposta i mesi scelti per il rimborso del prestito
*@param mesi: i mesi scelti per il rimborso del
prestito*/
public void setMesi(int mesi){
this.mesi=mesi;
}
Prestito.java: metodo
getPagamento()
/*Restituisce il fattore di ammortamento, l'entità
del pagamento mensile per la restituzione della
somma e l'interesse nel periodo di tempo
specificato */
public double getPagamento(){
if (tasso==0){
throw new IllegalArgumentException("Non è
stato specificato il tasso di interesse");
}
double tassoMensile=tasso/1200.0;
double fv=Math.pow((1+tassoMensile),mesi);
double num=fv*tassoMensile*somma;
double denom=fv-1.0;
return round(num/denom);
}
Prestito.java: metodo round
/*Metodo di servizio che arrotonda un
valore valutario al centesimo più
vicino*/
public static final double round(double
x){
return ((double)
((long)(x*100.0+0.5)))/100.0;
}
}
Esempio: Prestito.java

Il JavaBean Prestito ha 4 proprietà




somma: la somma prestata
tasso: l’interesse annuo espresso in percentuale
mesi: il numero di mesi scelti per il rimborso del
prestito
pagamento: una proprietà di sola lettura
Serializzazione

Un programma che contiene il JavaBean
Prestito può serializzarlo nel seguente modo
OutputStream fileout=new
FileOutputStream(“prestito.ser”);
ObjectOutputStream objOut=new
ObjectOutputStream(fileout);
objOut.writeObject(prestitoBean);
objOut.flush();
fileOut.close();
Deserializzazione

Il JavaBean può essere riconstruito nel seguente modo
InputStream filein=new
FileInputStream(“prestito.ser”);
ObjectInputStream objIn=new ObjectInputStream
(filein);
Prestito prestBean=null;
try{
prestBean=(Prestito) objIn.readObject();
}
catch(ClassNotFoundException e{
//gestione eccezioni
}
filein.close();
Externalizable


Un JavaBean può implementare lo schema
di persistenza Externalizable
Un oggetto Externalizable gestisce le
operazioni di lettura e scrittura dagli stream
degli oggetti utilizzando il formato preferito



metodo readExternal(ObjectInput)
metodo writeExternal(ObjectOutput)
Ma poiché gli oggetti Serializable possono
offrire i propri metodi utilizzando qualsiasi
formato, Externalizable offre pochi vantaggi
e viene utilizzato raramente
JSP e JavaBean


Le specifiche JSP offrono uno speciale
supporto per i JavaBean che li rende gestibili
ad un livello superiore
Questo supporto è costituito da 3 azioni
standard



<jsp:useBean> per dichiarare, istanziare e
utilizzare i JavaBean
<jsp:setProperty> per impostare le proprietà dei
JavaBean
<jsp:getProperty> per estrarre i valori delle
proprietà dei JavaBean
Azione <jsp:useBean>


Crea o deserializza un JavaBean e lo
associa a una variabile script
La sintassi è
<jsp:useBean id=“…” scope=“…”
[specTipo]/>

o, se si vuole inserire del codice da eseguire
quando il bean viene istanziato, la seguente
<jsp:useBean id=“…” scope=“…”
[specTipo]>
…
</>
<jsp:useBean>: attributo ID


Identificatore utilizzato per un progetto
JavaBean nel campo di visibilità specificato e
dichiarato come una variabile script Java
nella pagina JSP
Questo valore viene utilizzato nell’attributo
name delle azioni <jsp:setProperty> e
<jsp:getProperty> per indicare i
JavaBean cui si applica l’azione
<jsp:useBean>: attributo
SCOPE


Indica lo spazio dei nomi in cui esiste il JavaBean.
Possono essere utilizzati i seguenti valori




PAGE: valido per la durata di questa pagina (default)
 pageContext.getAttribute() e pageContext.setAttribute()
REQUEST: valido per il resto della pagina e per tutte le
pagine invocate tramite <jsp:include>
 ServletRequest.getAttribute() e
ServletRequest.setAttribute()
SESSION: valido in questa sessione HTTP
 HttpSession.getAttribute() e HttpSession.setAttribute()
APPLICATION: valido in ogni pagina JSP e servlet di
questa applicazione (contesto della servlet)
 ServletContext.getAttribute() e ServletContext.setAttribute()
Specifiche del tipo

Combinazione degli attributi CLASS, TYPE e
BEANNAME




solo TYPE
solo CLASS
TYPE e CLASS
TYPE e BEANNAME
Specifiche tipo: solo TYPE

L’engine JSP


definisce una variabile del tipo specificato
e poi ricerca nel campo di visibilità specificato un
attributo il cui nome corrisponde al codice fornito


se lo trova, lo converte nel tipo specificato
altrimenti lancia l’eccezione InstantiationException
Specifiche tipo: solo CLASS

L’engine JSP


dichiara una variabile della classe
e poi ricerca nel campo di visibilità specificato un
attributo il cui nome corrisponde al codice fornito


se lo trova, converte l’oggetto e lo assegna alla
variabile
altrimenti




crea un nuovo oggetto della classe specificata
lo assegna alla variabile
lo imposta come un attributo
viene valutato, se esiste, il corpo di <jsp:useBean>
Specifiche tipo: CLASS e TYPE

L’engine JSP


dichiara una variabile del tipo specificato
e poi ricerca nel campo di visibilità specificato un
attributo il cui nome corrisponde al codice fornito


se lo trova, converte l’oggetto nel tipo specificato e lo
assegna alla variabile
altrimenti




crea un nuovo oggetto del tipo specificato
lo assegna alla variabile
lo imposta come un attributo
viene valutato, se esiste, il corpo di <jsp:useBean>
Specifiche tipo: TYPE e
BEANNAME


Quando un JavaBean già serializzato deve essere
importato nell’ambiente JSP, si devono usare gli
attributi TYPE e BEANNAME
Il BEANNAME viene convertito nel nome di un file




i punti vengono convertiti in “/”
alla fine viene aggiunto il suffisso “.ser”
Se esiste un file con questo nome viene
deserializzato altrimenti viene creata una nuova
istanza della classe
Il nuovo bean


viene assegnato ad una variabile con l’ID specificato
memorizzato come attributo nel campo di visibilità
Azione <jsp:setProperty>


Assegna dei valori alle proprietà del
JavaBean sulla base dei valori contenuti
nella pagina JSP
La sintassi è
<jsp:setProperty name=“…” property=“…”
[param=“…” value=“…”]/>
<jsp:setProperty>: attributi (1)

Attributo NAME



identifica il JavaBean sul quale voglio impostare l’attributo
il nome del JavaBean deve essere stato precedentemente
specificato come valore dell’attributo ID di <jsp:useBean>
Attributo PROPERTY

può avere due valori
 nome proprietà: il JavaBean deve avere un metodo con
nome setnomeproprieta()
 *: l’elenco delle proprietà del JavaBean viene confrontato
con un elenco di parametri della richiesta corrente


quando viene trovata una corrispondenza viene richiamato il
metodo set relativo a quella proprietà
altrimenti la proprietà non viene modificata
<jsp:setProperty>: attributi (2)

Attributo PARAM


Attributo VALUE


per specificare l’associazione tra parametro della richiesta
e proprietà del JavaBean
per specificare il valore da associare alla proprietà
Se questi due parametri non vengono specificati
allora il valore della proprietà viene assegnato a
partire dal parametro corrispondente della richiesta
Azione <jsp:getProperty>
Per ottenere i valori delle proprietà del
JavaBean
 La sintassi è
<jsp:getProperty name=“…” property=“…”/>
 Attributi



name: nome con corrispondente attributo ID
proprietà: nome della proprietà desiderata

deve essere una stringa e non un espressione
valutata durante la richiesta
Riepilogo



Cosa è un JavaBean
Esempio: Prestito.java
Persistenza tramite



serializzazione e deserializzazione di JavaBean
esternalizzazione
JSP e JavaBean



azione <jsp:useBean>
azione <jsp:setProperty>
azione <jsp:getProperty>