I Java bean
I Java bean sono componenti software esterni che permettonodi semplificare l'inserimento di istruzioni in una paginaJSP: in paritocolare, i Beans API provvedono ad unastandardizzazione del formato delle classi Java.Le JSPinfatti sono estensioni dei servlet Java, di conseguenzaconsentono di ottenere tutti i risultati di questi ultimi. Losvantaggio dei Servlet è però rappresentato,come per tutti gli script CGI, dalla difficoltà dimanutenzione del codice HTML delle applicazionieccessivamente complesse, in quanto il più delle voltecontengono una quantità di codice scriptlet eccessivaper un programmatore non esperto in Java. Grazie ai JavaBeans quindi i programmi possono reperire automaticamenteinformazioni riguardo le classi che seguono il formato API edi conseguenza creare e manipolare classi senza che lo userdebba scrivere un codice esplicito. Si ottiene perciòpermettendo quindi un ottimo incapsulamento del codice,peraltro riutilizzabile. Al programmatore quindi saràpressochè invisibile la sezione di codice puro,sostituito da richiami ai metodi delle classi incluse. I 3punti fondamentali dei Beans sono i seguenti:
1. Una classe bean deve avere un costruttore ad argomentonullo (vuoto): ciò è ottenibile definendoesplicitamente un costruttore o omettendoli tutti, per cuiviene automaticamente creato un costruttore vuoto;
2. Una classe bean non deve avere variabili pubbliche;
3. Gli accessi ai valori persistenti devono avvenire tramitemetodi denominati getXxx e setXxx.
Esistono tre azioni standard per facilitarel'integrazione dei JavaBean nelle pagine JSP.
<jsp:useBean>
Permette di associare un'istanza di un JavaBean(associata ad un determinato ID) ad una variabile scriptdichiarata con lo stesso ID. In pratica offre lapossibilità di associare la classe contenuta nelJavaBean ad un oggetto visibile all'interno della pagina,in modo da poter richiamare i suoi metodi senza dover ognivolta far riferimento al file di origine.
Attributi:
Id: identità dell'istanza dell'oggettonell'ambito specificato.
Scope: ambito dell'oggetto, le opzioni sono:
- page: gli oggetti con questo ambito sono accessibili solo all'interno della pagina in cui sono stati creati, in pratica possono venire paragonati alle variabili locali di un qualsiasi linguaggio di programmazione, vengono distrutte alla chiusura della pagina e i dati saranno persi;
- request: gli oggetti con questo ambito sono accessibili esclusivamente nelle pagine che elaborano la stessa richiesta di quella in cui è stato creato l'oggetto, quest'ultimo inoltre rimane nell'ambito anche se la richiesta viene inoltrata ad un'altra risorsa;
- session: gli oggetti definiti in quest'ambito sono accessibili solo alle pagine che elaborano richieste all'interno della stessa sessione di quella in cui l'oggetto è stato creato per poi venire rilasciati alla chiusura della sessione a cui si riferiscono, in pratica restano visibili in tutte le pagine aperte nella stessa istanza (finestra) del Browser, fino alla sua chiusura. Solitamente i bean istanziati in questo modo vengono utilizzati per mantere le informazioni di un utente di un sito;
- application: gli oggetti definiti in quest'ambito sono accessibili alle pagine che elaborano richieste relative alla stessa applicazione, in pratica sono validi dalla prima richieta di una pagina al server fino al suo shotdown.
class: nome della classe che definisce l'implementazionedell'oggetto beanName: contiene il nome del bean che,come già accennato deve coincidere con il nome delfile .class (senza estensione)
Esempio:
<jsp:useBean id="nomeBean" scope="session" class="classe" />
Crea un'istanza della classe classe con ambito sessionrichiamabile attraverso l'id NomeBean: da questo momentosarà possibile accedere a metodi e variabili(pubbliche) attraverso la sintassi nomeBean.nomeMetodo enomeBean.nomeVariabile, rispettivamente per metodi evariabili.
<jsp:setProperty>
Permette di impostare il valore di una delle proprietàdi un bean. Ne esistono varie forme, vediamo la piùcomune.
Attributi:
name: nome dell'istanza di bean definita in un'azione
property: rappresenta la proprietà di cui impostare ilvalore
param: nome del parametro di richiesta il cui valore si vuoleimpostare
value: valore assegnato alla proprietà specificata
Esempio:
<jsp:setProperty name="nome_bean" property="prop"param="nome_parametro" />
Permette di assegnare il valore del parametro nome_parametroalla proprietà prop del bean di nome nome_bean.
<jsp:getProperty>
Prende il valore di una proprietà di una data istanzadi bean e lo inserisce nell'oggetto out implicito (inpratica lo stampa a video). Alternativamente si potrebbeusare una espressione JSP e chiamare esplicitamente un metodosull'oggetto che il nome della variabile specificata conl'attributo id.
Attributi:
name: nome dell'istanza di bean da cui proviene laproprietà definita da un'azione
property: rappresenta la proprietà del bean di cui sivuole ottenere il valore
Vediamo subito un semplice esempio di bean, realizzato percontenere le informazioni di un utente durante la suapermanenza nel sito.
InfoUtente.javapublic class InfoUtente {private String nome = null;private String email = null;private int pagineViste;public InfoUtente() {pagineViste=0;}public aggiornaPV(){pagineViste++;}public int getPagineViste(){return pagineViste;}public void setNome(String value) {> nome = value;}public String getNome() {return nome;}public void setEmail(String value) {email = value;}public String getEmail() {return email;}public String riassunto(){String riassunto = null;riassunto = "Il nome dell'utente è" +nome+ " ,";riassunto+= "il suo indirizzo e-mail è: " +email;riassunto+=" e ha visitato " +pagineViste+ " del sito";return riassunto;}}//InfoUtente
Questo bean contiene il nome dell'utente ed i metodi permodificarlo e restituirlo, il suo indirizzo e-mail con irelativi metodi, il numero di pagine viste dall'utente eun metodo che restituisce un riassunto schematico dei datidell'utente. Ecco come utilizzarli:
<html><head><title>Utilizzo del Bean</title></head><body><jsp:useBean id="utente" scope="session" class="InfoUtente"/>
Viene creata un'istanza del bean InfoUtente con ambitosession, necessario per questo tipo di funzione:
<jsp:setProperty name="utente" property="nome" value="Zina&Tram"/>
La proprietà del bean possono essere impostate conl'azione setProperty o agendo direttamente con i metodicreati appositamente.
<%utente.setNome("Zina&Tram");utente.setEmail("ciao@dom.it");%>Lo stesso vale per la lettura dei bean che puo essere fatta con l'azione:<jsp:getProperty name="utente" property="nome"/>o agendo sui metodi creati:<% out.println(utente.getNome());out.println(utente.riassunto()); %>Per incrementare il numero di pagine viste è sufficiente richiamare il metodo aggiornaPV() e per ottenere il valore getPagineViste().<% utente.aggiornaPV();out.println(utente.getPagineViste()); %>