La
tecnologia JSP e gli scriptlet Java
Le Java Server Pages costituiscono la tecnologia utilizzata
nell'ambito della J2EE per costruire pagine web dinamiche,
ovvero è la tecnologia più largamente utilizzata
per realizzare il livello di View in applicazioni web J2EE.
Le JSP sono editabili come semplici file di testo e contengono
al loro interno tag HTML più altri tag detti 'standard
actions'. Una pagina JSP, pur avendone l'aspetto, non è
assimilabile ad una pagina HTML in quanto il suo funzionamento
è completamente diverso. Il web container quando riceve
la prima richiesta per una pagina JSP provvede a tradurla
in una Servlet Java , a compilare la Servlet, ad istanziarla
e a creare un thread della Servlet per servire la richiesta
in arrivo.
Senza entrare nei dettagli tecnici del processo di traduzione,
compilazione ed esecuzione di una pagina JSP la cosa importante
ai nostri fini è essere consapevoli che alla fine una
pagina JSP non è altro che una Servlet e quindi una
classe Java.
Tutto ciò che scriviamo all'interno della pagina JSP
diventa codice Java inserito all'interno del metodo _jspService()
della Servlet generata dal container a seguito dalla traduzione
della pagina JSP (tranne le dichiarazioni contenute tra i
simboli <%! %> che diventano metodi della servlet o
attributi di istanza).
Questo significa che all'interno della pagina JSP è
possibile inserire vero e proprio codice Java, i cosiddetti
'scriptlet', contenuti all'interno dei simboli <%. %>.
Tutto ciò che si scrive tra questi due simboli è
puro codice Java.
Questa possibilità ha portato nel corso del tempo ad
un uso smodato del codice Java all'interno delle pagine JSP,
uso che tradisce la funzione per la quale le JSP sono nate
che non è quella di eseguire logica o controllare il
flusso elaborativo ma semplicemente fornire all'utente la
visualizzazione dei dati e consentire l'input degli stessi.
La scrittura di codice Java all'interno delle JSP ha numerose
controindicazioni:
- Non
vengono utilizzate le caratteristiche object-oriented di
Java (le pagine JSP diventano sì delle classi Java,
ma non si possono utilizzare meccanismi quali eredità
o polimorfismo tra pagine JSP)
- E'
una tecnica che non favorisce il riuso del codice (ovviamente
il copia incolla di codice identico tra pagine JSP non è
considerato 'riuso'
..)
- Scrivere
pagine JSP piene di scriptlet le rende incomprensibili e
difficilmente manutenibili
- Le
pagine JSP sono rivolte ai web developer non agli sviluppatori
Java. Scrivere scriptlet costringe il web developer a conoscere
Java.
Evoluzione
della specifica JSP
L'uso degli scriptlet è proliferato non solo per una
scorretta impostazione architetturale delle applicazioni ma
anche perché inizialmente le prime versioni JSP non
fornivano strumenti adeguati allo svolgimento di alcune operazioni
comuni quali cicli, test condizionali, settaggio di variabili
e così via.
Nelle prime versioni delle JSP non c'erano molte possibilità
di scrivere codice adatto a questi scopi senza usare gli scriptlet
Java. Quindi questa pratica, che oggi è considerata
errata, inizialmente era in parte giustificata dalle necessità.
Pur non inserendo logica applicativa all'interno delle JSP
si era comunque costretti a inserire codice Java per eseguire
cicli, per settare variabili etc. etc..
Sin dalle prime specifiche JSP erano stati definiti dei tag
standard detti 'standard actions' che consentivano di fare
un numero limitato di operazioni quali far riferimento ad
un JavaBean memorizzato in un determinato scope e settarne
o visualizzarne le proprietà, oppure fare la include
di una pagina JSP all'interno di un'altra pagina e poco altro.
Nelle successive specifiche si è cercato quindi di
fornire allo sviluppatore strumenti di facile utilizzo per
ovviare a questi inconvenienti e coprire una casistica più
ampia di esigenze.
Nella J2EE 1.4 è oggi presente la versione 2.0 della
JSP. Questa versione è forse la più 'rivoluzionaria'
rispetto alle precedenti e fornisce praticamente tutto ciò
che serve per scrivere pagine JSP 'scriptless'. In particolare
l'utilizzo congiunto della JSTL e dell'Expression Language
copre la gran parte delle casistiche presenti nello sviluppo
JSP che precedentemente erano risolte mediante l'utilizzo
di scriptlet.
L'Expression
Language è un linguaggio introdotto nella JSP 2.0 molto
potente e di semplice utilizzo anche da parte di uno sviluppatore
con poche competenze Java. EL consente di valutare espressioni
e di far riferimento in modo semplice ad oggetti memorizzati
nei diversi scope applicativi grazie alla definizione di numerosi
oggetti impliciti. Le parti della pagina racchiuse tra ${
} sono espressioni valutate in base alle regole dell'expression
language.
L'EL può essere usato in parti statiche di testo o
in un qualsiasi attributo di un tag standard o custom che
possa accettare un'espressione.
L'EL non è oggetto dei nostri articoli ma dal momento
che è utilizzato nell'ambito della JSTL è bene
conoscerne l'esistenza e comprenderne al meglio il funzionamento.
Un tutorial di base sull'argomento è presente all'indirizzo
[3]
Con
questa versione delle JSP la Sun ha cercato di fornire agli
sviluppatori tutti gli strumenti necessari per far si che
gli scriptlet all'interno delle pagine JSP siano solo un ricordo
del passato. A conferma di questa impostazione nella JSP 2.0
è addirittura possibile rendere non valide le pagine
contenenti scriptlet impostando opportunamente il valore del
tag <scripting-ivalid> contenuto nel deployment descriptor
dell'applicazione comne sub-element del tag <jsp-config>.
Questo fa capire che la tendenza sarà quella di abbandonare
gli scriptlet Java ed è quindi bene imparare da subito
a scrivere pagine JSP sciptless utilizzando EL e JSTL.
La Java Server Pages Standard Tag Library
La JSTL fornisce quindi allo sviluppatore numerosi tag standard
che lo svincolano dal dover ricorrere a codice Java per la
scrittura delle proprie pagine web.
Le librerie che costituiscono la JSTL sono le seguenti:
- Core
Gestione di variabili
Controllo di flusso
Funzioni varie
- XML
Funzioni di base
Trasformazioni
Controllo di flusso
- Internazionalizzazione
Gestione del locale
Formattazione di testo, numeri e date
- SQL
Operazioni su database
Negli
articoli della serie esamineremo queste librerie cercando
di fornire anche degli esempi pratici di come utilizzare almeno
i tag più comuni.
Per un approfondimento di questo argomento si può consultare
la pagina del sito Sun
http://java.sun.com/products/jsp/jstl/
nella quale sono presenti numerosi link di informazioni relative
alla JSTL.
Conclusioni
In questo primo articolo abbiamo introdotto la JSTL cercando
di spiegarne lo scopo e l'ambito nel quale si colloca all'interno
della J2EE. L'articolo non voleva essere una spiegazione esauriente
della tecnologia JSP e tantomeno della versione JSP 2.0, ma
voleva essere una breve introduzione necessaria alla comprensione
delle esigenze che portano all'utilizzo della Java Server
Pages Standard Tag Library.
Bibliografia
[1] Bryan Basham, Kathy Sierra, Bert Bates - "Head First
- Servlet & Jsp", O'Reilly, 2004
[2] Autori Vari - "The J2EE 1.4 Tutorial ", Sun
Microsystems, 2003
[3] http://java.sun.com/developer/technicalArticles/javaserverpages/JSP20
Alfredo Larotonda, laureato in
Ingegneria Elettronica, lavora da diversi anni nel settore
IT. Dal 1999 si occupa di Java ed in particolare dello sviluppo
di applicazioni web J2EE. Dopo diverse esperienze di disegno
e sviluppo ora si occupa in particolare di aspetti architetturali
per progetti rivolti al mercato finanziario ed industriale.
E' in possesso delle certificazioni SCJP, SCWCD per J2EE 1.3
e 1.4 e SCBCD.
|