MokaByte 91- Dicembre 2004 
La Java Server Pages Standard Tag Library
I parte - Scrivere JSP scriptless
di
Alfredo Larotonda

Con questo articolo inizia una serie dedicata alla JSTL, Java Server Pages Standard Tag Library. La JSTL è un insieme di librerie di custom tag standard utili a svolgere molte delle comuni operazioni tipiche delle pagine JSP. Negli articoli della serie cercheremo di fornire una panoramica sulle varie librerie evidenziando i tag più utili di ciascuna e fornendo alcuni esempi di utilizzo. In questo primo articolo viene fatta una breve ma necessaria introduzione sulla tecnologia JSP e sulla sua evoluzione per chiarire il perché dell'esigenza della JSTL e i vantaggi conseguenti dall'uso della stessa.


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.


MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it