Bean: Classi e Oggetti Java in JSP

Gianluca Moro
[email protected]
Dipartimento di Elettronica, Informatica e Sistemistica
Università di Bologna
Bean: Classi e Oggetti Java in JSP
!!
Un bean è una classe Java che rispetta le
seguenti regole:
!!
!!
!!
Contiene almeno un attributo ed un metodo
set… e un metodo get… per memorizzare e
reperire il valore dell’attributo;
Implementa l’interfaccia java.io.Serializable;
I bean sono utili per:
!!
!!
la gestione delle sessioni utente
l’interfacciamento con sistemi non web-based
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
3
Dichiarazione di un Bean
!!
E’ possibile indicare che si intende utilizzare un
Bean all’interno della pagina:
!!
!!
<jsp:useBean id=“nome dell’istanza”
scope=“scope del bean”
class=“classe del bean”/>
Il nome dell’istanza viene cercata all’interno dello
scopo indicato: se è presente viene riutilizzata,
altrimenti ne viene creata una nuova
!!
equivalente a new …
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
4
Visibilità e tempi di vita
!!
!!
!!
!!
Nell’utilizzo della direttiva <jsp:useBean…/> è
possibile specificare 4 diversi valori per l’attributo
scope:
page: pagina;
request: richiesta;
session: sessione;
application: applicazione.
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
5
Pagina e richiesta
!!
page indica un tempo di vita pari a quello della
pagina JSP
!!
!!
!!
la visibilità è limitata al solo utente corrente
la visibilità non viene mantenuta dopo il forward
request indica un tempo di vita pari a quello
della richiesta (GET o POST)
!!
!!
la visibilità è limitata al solo utente corrente
la gestione di una richiesta viene mantenuta anche
dopo il forward verso una nuova pagina
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
6
Sessione e applicazione
!!
session indica un tempo di vita pari a quello della
sessione dell’utente corrente
!!
!!
la visibilità è limitata al solo utente corrente
application indica un tempo di vita pari a quello
dell’applicazione web (pari cioè a quella del
server Web)
!!
gli oggetti con scope application sono visibili a tutti gli
utenti dell’applicazione
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
7
Esempio: contatore
!!
Supponendo di utilizzare “come” bean la
classe seguente
public class Contatore {
private int c = 0;
public int getContatore() {
return ++c;
}
}
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
8
Esempio: contatore
!!
Nel caso di utilizzo di un bean con scope di pagina:
!!
!!
o di richiesta:
!!
!!
<jsp:usebean id=“c” scope=“page” class=“Contatore”>
<jsp:usebean id=“c” scope=“request” class=“Contatore”>
L’invocazione seguente, all’interno della pagina:
<%=c.getContatore()%>
!!
restituisce sempre 1 tutte le volte che la pagina
viene invocata
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
9
Esempio: contatore
!!
Nel caso di utilizzo di un bean con scope di
sessione:
<jsp:usebean id=“c” scope=“session”
class=“Contatore”>
!!
L’invocazione seguente, all’interno della
pagina, restituisce il numero di volte che
quella pagina è stata invocata dal client:
<%=c.getContatore()%>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
10
Esempio: contatore
!!
Nel caso di utilizzo di un bean con scope di
applicazione:
<jsp:usebean id=“c” scope=“application”
class=“Contatore”>
!!
L’invocazione seguente, all’interno della
pagina, restituisce il numero di volte che
quella pagina è stata invocata da ogni
client:
<%=c.getContatore()%>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
11
Reperimento valori dei Bean
!!
!!
E’ possibile ottenere il valore di una
proprietà di un Bean:
<jsp:getProperty name=“nome del bean”
property=“nome della proprietà”/>
Utilizzando l’esempio precedente, per
ottenere il valore del contatore si sarebbe
potuto utilizzare:
<jsp:getProperty name=“c”
property=“contatore”>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
12
Impostazione valori dei Bean
!!
!!
!!
E’ possibile modificare il valore di una
proprietà di un Bean:
<jsp:setProperty name=“nome del bean”
seguito da (un valore specificato):
property=“proprietà” value=“valore”/>
oppure da (un valore di una richiesta):
property=“proprietà” param=“parametro”/
>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
13
Impostazione valori dei Bean
!!
utilizziamo come bean la classe seguente
public class Contatore {
private int c = 0;
public int getContatore() {
return ++c;
}
public void setContatore(int i) {
c = i;
}
}
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
14
Impostazione valori dei Bean
!!
Il codice seguente imposta il valore del
contatore specificando il metodo da usare
con property:
<jsp:setProperty name=“c”
property=“contatore” value=“10”>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
15
Impostazione valori dei Bean da
parametri di form
!!
!!
il seguente tag html di input permette di
acquisire un valore impostato dall’utente:
<input type=“text” name=“contatore”>
Il seguente codice JSP permette di
impostare il contatore con il valore
specificato dall’utente:
<jsp:setProperty name=“c”
property=“contatore” param=“contatore”>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
16
Sessione utente realizzata tramite
bean: esempio
!!
!!
!!
Supponiamo di voler memorizzare nella
sessione solamente il nome ed il cognome
di un utente (studente) che si collega
la sessione non sarà costituita da attributi
come mostrato per l’oggetto implicito
session ma sarà rappresentata da un
oggetto studente
definiamo pertanto la relativa classe
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
17
Esempio di Bean: classe studente
public class Studente implements java.io.Serializable {
// Attributi
private String nome;
private String cognome;
// Costruttore
public Studente() {
nome = “”;
cognome = “”;
}
// Metodi
public void setNome(String s) { nome = s; }
public String getNome() { return nome; }
public void setCognome(String s) { cognome = s; }
public String getCognome() { return cognome; }
}
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
18
Definizione del Bean (i)
!!
!!
Per ognuna degli attributi è necessario
definire due metodi che permettano
l’accesso (lettura) e la trasformazione
(scrittura)
I due metodi devono essere denominati
con i prefissi set e get seguiti dal nome
della variabile di sessione con la prima
lettera in maiuscolo.
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
20
Definizione del Bean (ii)
!!
!!
!!
È necessario definire i quattro metodi setNome,
getNome, setCognome, getCognome.
Non esiste alcun vincolo sulla denominazione
degli attributi
essi potrebbero essere scelti indipendentemente
dai nomi delle variabili di sessione, per comodità,
questi sono stati denominati allo stesso modo
(nome e cognome).
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
21
Deployment dei Bean
!!
Per rendere un bean utilizzabile in pagine
JSP è necessario:
!!
!!
!!
compilarla la classe che lo descrive
inserirla nella directory apposita del server
web
nel caso di Tomcat 3.3 è sufficiente inserire la
classe del Bean nella cartella WEB-INF
\classes dell’applicazione Web
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
22
Dichiarazione in pagina JSP di
Bean con scope di sessione
!!
Con la seguente direttiva si dichiara l’intento di
utilizzare un bean di sessione all’interno della
pagina JSP:
<jsp:useBean id=“stud" scope="session"
class=“Studente"/>
!!
!!
se l’oggetto con id stud è già presente nella
sessione dell’utente allora viene utilizzato
in caso di mancato ritrovamento l’istanza viene
creata e associata alla sessione dell’utente che
ha chiesto l’esecuzione della pagina JSP
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
23
Scrittura di proprietà di un bean
!!
Tramite le direttive seguenti è possibile
assegnare valori agli attributi dell’istanza
stud:
<jsp:setProperty name=“stud”
property=“nome”
value=“Paolo”/>
<jsp:setProperty name=“stud”
property=“cognome”
value=“Rossi”/>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
24
Lettura di proprietà di un bean
!!
Tramite le direttive seguenti è invece
possibile ricavare i valori degli
attributi dell’istanza stud:
<jsp:getProperty
name=“stud”
property=“nome”>
<jsp:getProperty
name=“stud”
property=“cognome”/>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
25
FORM e Bean
!!
JSP fornisce facilitazioni per memorizzare le
informazioni acquisite con una form direttamente
in attributi istanza di un bean:
<jsp:setProperty
name=“<nome istanza del bean>”
property=“<nome variabile di sessione>”
param=“<nome parametro della richiesta>”/>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
26
FORM e Bean: FORM HTML
<html>
<head><title>Inserimento Studente</title></head>
<body>
<form action=“controller.jsp” method=“get”>
<input type=“text” name=“nome”>
<input type=“text” name=“cognome”>
<input type=“submit” value=“Invio”>
</form>
</body>
</html>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
27
FORM e Bean: controller
…
<jsp:useBean id=“stud” scope=“session”
class=“studente”/>
<jsp:setProperty name=“stud" property="nome"
param="nome"/>
<jsp:setProperty name=“stud" property="cognome"
param="cognome"/>
…
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
28
FORM e Bean: assegnazione
automatica (i)
!!
la direttiva seguente memorizza i parametri di
una form HTML in attributi istanza di un bean:
<jsp:setProperty name=“<nome bean>” property=“*”/>
!!
nel caso dell’esempio precedente il codice
sarebbe stato il seguente:
…
<jsp:useBean id=“stud” scope=“session” class=“studente”/>
<jsp:setProperty name=“stud" property=“*"/>
…
!!
attenzione: i nomi dei parametri html utilizzati
per acquisire i valori devono avere lo stesso
nome dei metodi del Bean.
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
29
FORM e Bean: assegnazione
automatica (ii)
!!
!!
notare che le variabili di sessione
effettivamente modificate sono solo quelle
valorizzate
questo permette di utilizzare un unico
bean (di sessione) per dati provenienti da
diverse form, senza rischiare che
assegnamenti successivi cancellino i dati
relativi agli assegnamenti precedenti
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
30
FORM e Bean: assegnazione
automatica (iii) - esempio
!!
!!
se i due controlli di input seguenti sono su due
form diverse:
<input type=“text” name=“nome”>
<input type=“text” name=“cognome”>
il seguente codice può essere utilizzato senza
rischi di perdere uno dei due assegnamenti:
<jsp:useBean id=“stud” scope=“session”
class=“Studente”/>
<jsp:setProperty name=“stud” property=“*”/>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
31
Bean: gli altri scope
!!
!!
Finora, abbiamo parlato di bean con scope
session
Gli altri scope (page, request, application)
non cambiano il modo in cui un bean può
essere utilizzato, ma solo il suo tempo di
vita e la sua visibilità
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
32
Utilizzo di altri oggetti Java
!!
!!
E’ possibile istanziare oggetti Java senza
utilizzare la direttiva precedente.
E’ possibile dichiarare una nuova istanza
dell’oggetto nell’ambito delle dichiarazioni
o all’interno degli scriptlet (con relativi
ambiti di visibilità):
<%! Contatore c = new Contatore() %>
<% Contatore c = new Contatore() %>
JSP & Java Bean
G. Moro - DEIS, Università di Bologna
42