JSP E Java Beans
Come già accennato le JSP sono estensioni dei servlet Java, di conseguenza consentono di ottenere tutti i risultati di questi ultimi. Lo svantaggio dei Servlet è però rappresentato, come per tutti gli script CGI, dalla difficoltà di manutenzione del codice HTML delle applicazioni eccessivamente complesse, in quanto il più delle volte contengono una quantità di codice scriptler eccessiva per un programmatore non esperto in Java.
Soluzione a questo problema è rappresentata dai Java Beans, componenti software contenenti una classe Java, che possono venire inclusi in una pagina JSP, 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 Bean sono costituiti esclusivamente da codice Java e possono venire realizzati con un semplice editor di testo (per esempio Blocco note), salvati con estensione .java e compilati (per esempio con il compilatore Java JDK) generando un file di estensione .class. Sarà il file .class che dovrà venire incluse nella pagina JSP, come vedremo in seguito.
Da ricordare che in Java i file devono avere lo stesso nome della classe, lettere maiuscole e minuscole comprese.
Aggiunta di JavaBean
Esistono tre azioni standard per facilitare l'integrazione dei JavaBean nelle pagine JSP.
<jsp:useBean>
Permette di associare un'istanza di un JavaBean (associata ad un determinato ID) ad
una variabile script dichiarata con lo stesso ID. In pratica offre la possibilità di associare la classe contenuta nel JavaBean ad un oggetto visibile all'interno della pagina, in modo da poter richiamare i suoi metodi senza dover ogni volta far riferimento al file di origine.
Attributi:
Id: identità dell'istanza dell'oggetto nell'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'implementazione dell'oggetto beanName: contiene il nome del bean che, come già accennato deve coincidere con il nome del file .class (senza estensione)
Esempio:
<jsp:useBean id="nomeBean" scope="session" class="classe" />
Crea un'istanza della classe classe con ambito session richiamabile attraverso l'id NomeBean: da questo momento sarà possibile accedere a metodi e variabili (pubbliche) attraverso la sintassi nomeBean.nomeMetodo e nomeBean.nomeVariabile, rispettivamente per metodi e variabili.
<jsp:setProperty>
Permette di impostare il valore di una delle proprietà di un bean.
- Attributi:
- name: nome dell'istanza di bean definita in un'azione <jsp:useBean>
- property: rappresenta la proprietà di cui impostare il valore
- param: nome del parametro di richiesta il cui valore si vuole impostare
- 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_parametro alla proprietà prop del bean di nome nome_bean.
<jsp:getProperty>
Prende il valore di una proprietà di una data istanza di bean e lo inserisce nell'oggetto out implicito (in pratica lo stampa a video).
- Attributi:
- name: nome dell'istanza di bean da cui proviene la proprietà definita da un'azione <jsp:useBean>
- property: rappresenta la proprietà del bean di cui si vuole ottenere il valore