Articoli Manifesto Tools Links Canali Libri Contatti ?
Java / JSP

Java Server Pages, un'introduzione

Abstract
JSP (Java Server Pages) è una tecnologia semplice ma potente, che permette di creare Pagine HTML dinamiche lato server. In questo articolo ne presentiamo, aiutandoci con esempi, le caratteristiche principali.
Data di stesura: 14/04/2006
Data di pubblicazione: 19/04/2006
Ultima modifica: 19/04/2006
di Andrea De Paoli Discuti sul forum   Stampa

Introduzione

JSP (Java Server Pages) è una tecnologia semplice ma potente, che permette di creare Pagine HTML dinamiche lato server. Questa tecnologia agli occhi del programmatore viene gestita per mezzo di un linguaggio di script che è in grado di mescolare codice HTML, componenti riusabili (JavaBeans), applicazioni remote (Servlet), codice Java e script Java-like. Le Pagine JSP sono un'estensione diretta dei Servlet Java e offrono, rispetto ad altre attuali tecnologie Server-Side, il vantaggio e la possibilità di separare la sezione di gestione delle operazioni e di produzione dei contenuti, da quello di visualizzazione vera e propria. Normalmente una Pagina JSP è composta da:

  • porzioni di codice HTML, JavaScript, CSS e così via, non compilati dal motore Jsp (Jsp Engine) e comunemente definiti blocchi di codice statico;
  • porzioni di codice Java, compilati dal motore Jsp, che prendono il nome di blocchi di codice dinamico.

Come lavorano le Pagine JSP

La prima volta che un Client (di norma un generico browser) effettua la richiesta di una Pagina JSP ad un Web Server (container JSP), questo la compila creando un oggetto Servlet che risiederà in memoria; solo dopo questo passaggio l'output viene inviato al Client che potrà interpretarlo come se fosse una semplice Pagina HTML. Ad ogni richiesta successiva della medesima Pagina JSP, il Web Server controlla se è stata modificata: in caso negativo richiama il Servlet già compilato, altrimenti si occupa di eseguire nuovamente la compilazione e memorizzazione del nuovo Servlet. Conseguenza di questo meccanismo è che la prima volta che si invoca una Pagina JSP il sistema sarà un pò più lento del normale, mentre dalle invocazioni successive si avranno prestazioni di tutto rispetto. Un semplice esempio del codice di una Pagina JSP e dell'output prodotto sono riportati qui di seguito:

  1. <%@page language="java"%> 
  2. <%@page import="java.util.*"%> 
  3. <html> 
  4. <head> 
  5. <title>Java Server Pages: Hello World</title> 
  6. </head> 
  7. <body> 
  8. <% out.println(" Hello World JSP! "); %> 
  9. <%= new Date() %> 
  10. </body> 
  11. </html> 
[Figura 1]

Figura 1: L'output della JSP.

Se ci si sofferma esclusivamente sulla forma del documento JSP è possibile notare che l'aspetto di codice JSP ricalca quello di una Pagina HTML e non quello di una classe Java. Analizzando successivamente il codice del Servlet generato dal Web Server alla prima invocazione della Pagina JSP, che può variare leggermente in base al motore Jsp utilizzato, si nota che il metodo che effettua il servizio vero e proprio è _jspService() (il codice Servlet è nelle risorse [1]). All'interno del metodo _jspService() troviamo, oltre ad una serie di variabili e controlli fondamentali per il funzionamento del Servlet, la traduzione dei tag HTML contenuti nella Pagina JSP in codice Java.

Componenti di un Pagina JSP

Una Pagina JSP può essere composta da:

  • direttive;
  • script JSP;
  • oggetti impliciti;
  • azioni.

Direttive

Le direttive sono elementi JSP che forniscono informazioni globali su un'intera Pagina JSP. Un esempio potrebbe essere una direttiva che indichi il linguaggio da utilizzare nella compilazione della Pagina JSP. La sintassi delle direttive è la seguente <%@ direttiva {attributo="valore"}%> . Volendo indicare al motore Jsp che il linguaggio da utilizzare nelle Pagine JSP deve essere il Java, è possibile utilizzare la riga di codice seguente: <%@ page language="java"%>. Attualmente nella specifica JSP sono definite tre direttive: page, include, taglib.

La Direttiva Page definisce informazioni globali riguardanti l'intera Pagina JSP che la contiene. Le impostazioni che modifica influenzano direttamente la compilazione della pagina.

La Direttiva Include serve per inserire testo e codice all'interno di una Pagina JSP al momento della sua traduzione. La sua sintassi è la sequente: <%@include file="specificoURL"%>.

La Direttiva Taglib permette di creare un insieme personalizzato di tag chiamato tag library. Questa direttiva dichiara che la pagina intende utilizzare tag personalizzati, indica univocamente la libreria che li definisce e associa loro un prefisso che li distingue da quelli presenti in altre librerie. La sintassi della direttiva taglib è la seguente: <%@taglib uri="URIdellaLibreriadiTag" prefix="prefissoTAG"%> dove :

  • uri identifica univocamente un insieme di tag personalizzati;
  • prefix definisce una stringa utilizzata per distinguere una tag personalizzato da uno invece standard.

Script JSP

Gli script JSP consentono di includere porzioni di codice direttamente all'interno di Pagine HTML, esistono tre elementi coinvolti negli script JSP, ciascuno dei quali ha una posizione ben definita all'interno del Servlet generato: Dichiarazioni, Espressioni e Scriptlet.

Le Dichiarazioni JSP servono per dichiarare variabili e metodi del linguaggio di script usato nelle Pagine JSP. La sintassi delle dichiarazioni JSP è la seguente: <%! Dichiarazione %>, un esempio <%! String nome=new String("Andrea"); %> nel caso in cui si voglia dichiarare una variabile di tipo String contenente un valore iniziale diverso da null; <%! public String getName() { return name; } %> nel caso in cui si voglia definire un metodo che ritorni una variabile, definita in questo caso nella dichiarazione precedente, di tipo String.

Le Espressioni JSP sono degli elementi del linguaggio di script che vengono valutati logicamente, letteralmente o matematicamente, il cui risultato viene convertito in una java.lang.String. Le espressioni sono valutate all'atto della richiesta HTTP. La stringa risultante viene inserita al posto dell'espressione nel file .jsp, nel caso l'espressione non può essere convertita, si verifica un errore di traduzione. La sintassi di un'espressione JSP è la seguente: <%= Espressione %>, un esempio Ciao <%= getName() %>.

Gli Scriptlet JSP possono contenere qualsiasi tipo di istruzione a patto che siano valide per il linguaggio specificato nella direttiva language. Vengono eseguiti al momento della richiesta e possono far uso di dichiarazioni, espressioni e JavaBeans. La sintassi degli scriptlet JSP è la seguente: <% Sorgente dello Scriptlet %>. Importante sottolineare che il codice contenuto tra i tag <% %> viene inserito nel metodo _jspService() del Servlet al momento della compilazione (il codice Servlet è nelle risorse [1]).

Oggetti Impliciti

Scrivendo Pagine JSP si ha l'accesso ad alcuni oggetti impliciti appositamente creati per essere utilizzati nei documenti JSP senza dover essere dichiarati anticipatamente. Gli oggetti impliciti più importanti sono: request, response, pageContext, session, application, out, config, page.

L'oggetto request permette il recupero dell'informazioni legate alla richiesta commissionata dal browser dell'utente come i parametri, le intestazioni, i cookie e così via.

L'oggetto response permette l'accesso al canale di output, per la generazione della risposta HTTP; è possibile comunicare un errore, inviare una particolare intestazione, settare un cookie e altro.

L'oggetto pageContext è molto generico e rappresenta qualsiasi cosa abbia a che fare con il contesto di esecuzione della pagina; da esso è possibile ricavare gli altri oggetti impliciti.

L'oggetto session permette di associare all'utente che richiede la pagina un'informazione recuperabile in ogni altro documento dell'applicazione. È possibile memorizzare le scelte effettuate dall'utente in una o più variabili di sessione così da poterne tener traccia.

L'oggetto application fornisce un accesso al contesto di esecuzione dell'applicazione Web, cioè offre la possibilità di ottenere informazioni sul Servlet Engine che esegue l'applicazione, recuperare i parametri di inizializzazione del software, registrare dei messaggi accessibili da ogni pagina appartenente al contesto.

L'oggetto out è di tipo JspWriter; ad esso corrisponde il canale di output instaurato con il browser dell'utente che ha richiesto la pagina.

L'oggetto config non è utilizzato frequentemente dagli sviluppatori poichè il container imposta o rileva automaticamente le informazioni accessibili tramite questo riferimento.

L'oggetto page rappresenta la parola chiave this dell'istanza corrente della Pagina JSP.

Azioni

Le azioni rappresentano un livello di astrazione che può essere utilizzato per incapsulare agevolmente compiti comuni. Generalmente vengono impiegate per la creazione o la manipolazione di oggetti, perlopiù JavaBeans. Alcune azioni standard sono:

  • <jsp:useBean>: associa un'istanza di un JavaBean a un ambito e ad un ID tramite una variabile di script dichiarata con lo stesso nome; se non trova un'istanza "in vita" cerca di crearla. Gli attributi più importanti legati a questa azione sono:
    • id : rappresenta l'identità dell'istanza dell'oggetto all'interno dell'ambito specificato;
    • scope : rappresenta l'ambito dell'oggetto. Possibili scope: page, request, session, application;
    • class : rappresenta il nome di classe che definisce l'implementazione dell'oggetto.
    questa azione principale derivano le seguenti sottoazioni:
    • <jsp:setProperty>: imposta il valore di una proprietà di un bean;
    • <jsp:getProperty>: prende il valore della proprietà del bean referenziato, lo converte in un java.lang.String e lo inserisce nell'oggetto out implicito;

    Un JavaBeans è un componente Java al 100% che opera all'interno di una qualsiasi macchina virtuale; è una classe Java che implementa l'interfaccia java.io.Serializable e utilizza metodi pubblici get/set per esporre le proprietà.

  • <jsp:include>: fornisce un modo per includere risorse aggiuntive, di tipo statico o dinamico, nella Pagina JSP corrente. Gli attributi più importanti legati a questa azione sono:
    • page : rappresenta la URL relativa della risorsa da includere;
    • flush : questo attributo contiene un valore boolean che indica se il buffer debba o meno essere svuotato.
  • <jsp:forward>: consente al motore Jsp l'inoltro, all'atto dell'esecuzione, della risorsa corrente a una risorsa statica, a un Servlet o ad una Pagina JSP. L'unico attributo possibile per questa azione è:
    • page : rappresenta la URL relativa all'oggetto da inoltrare.
  • <jsp:param>: viene impiegata per fornire informazioni a coppie di tag/valore, includendoli come sottoattributi delle azioni <jsp:forward>, <jsp:useBean>, <jsp:include> all'atto dell'esecuzione, della risorsa corrente a una risorsa statica, a un Servlet o ad una Pagina JSP. L'unico attributo è:
    • name : rappresenta il nome del parametro referenziato;
    • value : rappresenta il valore del parametro referenziato.

Conclusioni

Quelle esposte, anche se in estrema sintesi, sono le caratteristiche più salienti della tecnologia JSP che offre, rispetto ad altre attuali tecnologie Server-Side, la possibilità ed il grosso vantaggio di separare le logiche di business dalla loro presentazione.

Informazioni sull'autore

Andrea De Paoli,

È possibile consultare l'elenco degli articoli scritti da Andrea De Paoli.

Altri articoli sul tema Java / JSP.

Risorse

  1. Sorgenti della servlet d'esempio.
    http://www.siforge.org/articles/2006/04/jsp_intro/CodiceServlet.txt (4Kb)
Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.