JavaBean
Dott. Ing. Rossella Rubino
rossella.rubino@unibo.it
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>