OFFERTA DEL GIORNO

Machine Learning con Python in ebook a 6,99€ invece di 24,99€

Risparmia il 72%
Home
La sintassi JSP

12 Settembre 2002

La sintassi JSP

di

Gli elementi che compongono una Java Server Page

Negli articoli precedenti abbiamo visto cos’è una pagina JSP, come funziona, come viene trasformata automaticamente in una Servlet dal JSP Engine dell’application server.

A questo punto è giunto il momento di capire quali sono gli elementi sintattici che permettono alle Java Server Pages di essere strumenti così potenti, e come si usano.

Come sappiamo una JSP è una semplice pagina HTML all’interno della quale è possibile inserire elementi di scripting che permettono di portare comportamenti particolari e frammento di codice Java all’interno della Servlet che sarà generata a partire dal codice della Java Server Page.

Questi elementi di scripting possono essere di tre tipi:

Espressioni: sono nella forma <%= espressione %>, vengono valutate ed inserite all’interno dell’output della Servlet.

Scriptlets: sono nella forma <% codice java %>, vengono inserite direttamente all’interno del codice Java (nel metodo _jspService) della Servlet.

Dichiarazioni: sono nella forma <%! codice java %>, vengono inserite nel corpo della Servlet, all’esterno di qualsiasi metodo esistente

Vediamo meglio nel dettaglio questi elementi di scripting.

Espressioni

Un’espressione, all’interno di una pagina JSP, viene utilizzata per inserire valori direttamente nell’output della Servlet ed ha questa forma: <%= espressione %>.

L’espressione viene valutata a runtime, viene convertita in stringa ed il risultato della valutazione viene inserita direttamente all’interno della pagina.

Per rendere più agevole l’utilizzo delle espressioni all’interno di una JSP lo standard J2EE mette a disposizione una serie di oggetti direttamente utilizzabili, eccone alcuni:

  • request: si tratta della HttpServletRequest
  • response: la rispettiva httpServletResponse
  • session: la HttpSession associata alla rispettiva request
  • out: una versione evoluta (e bufferizzata) dell’oggetto PrintWriter

Vediamo, come esempio, un frammento di codice che dovremo andare a salvare nel file espressioni.jsp nel percorso: [tomcat_dir]webappsapogeo.



Uso delle espressioni nelle JSP


Uso delle espressioni nelle JSP


Data e ora: <%= new java.util.Date() %>


Hostname: <%= request.getRemoteHost() %>


Session ID: <%= session.getId() %>



/

Il risultato dell’esecuzione di questo codice è in questa finestra:

Scriptlets

Le espressioni, come abbiamo visto, permettono di inserire semplici frammenti di codice all’interno delle pagine JSP, ma con il vincolo che ognuno di questi frammenti sia automaticamente trasformabile in stringa. Per scrivere codice più complesso è necessario utilizzare gli scriptlets nella forma: <% codice java %>.

Anche gli scriptlets hanno accesso agli stessi oggetti disponibili dalle espressioni, ma il vantaggio è che il codice Java inserito tra i marcatori non deve necessariamente avere come comportamento la modifica dell’output della pagina.

Vediamo, a titolo di esempio, il seguente codice da salvare con il nome scriptlets.jsp nella stessa directory precedente.



Esempio di utilizzo degli scriptlets

<%
String bgColor = request.getParameter(“colore”);
boolean hasExplicitColor = true;
if (bgColor == null) {
hasExplicitColor = false;
bgColor = “WHITE”;
}
%>
Colori…
<%
if (hasExplicitColor) {
out.println(“Hai selezionato il colore: ” + bgColor + “.”);
} else {
out.println(“Non è stato indicato alcun colore”);
}
%>

/

Analizzando il codice balza subito all’occhio la riga seguente:

request.getParameter(“colore”);

/

che si occupa di ricevere il parametro “colore” dalla request e di utilizzarlo successivamente per alcune elaborazioni la cui logica è contenute all’interno degli scriptlets nella pagina.

Il risultato dell’esecuzione di questo codice è in questa finestra:

Certo dal punto di vista del look & fell non è nulla di speciale, ma solo perché non ci siamo preoccupati di passare alla pagina JSP il parametri “colore” che le avrebbe fatto cambiare il comportamento.

Proviamo ad utilizzare il link seguente:

http://localhost:8080/apogeo/scriptlets.jsp?colore=red

/

ed otterremo un più colorato risultato:

Dichiarazioni

Una dichiarazione, in una pagina JSP, non produce alcun output, ma viene utilizzata insieme alle espressioni o agli scriptlets per riprodurre comportamenti tipici delle variabili globali negli ambienti procedurali.

Per capirne il funzionamento guardiamo questo frammento di codice da salvare con il nome dichiarazioni.jsp nel percorso degli altri esempi.



Esempio di utilizzo delle dichiarazioni


Dichiarazioni JSP


<%! private int accessCount = 0; %>

Questa pagina è stata visualizzata
<%= ++accessCount %>
volte



/

Che produce il risultato seguente:

Il numero delle volte che la pagina è stata visualizzata viene memorizzato sul server grazie al codice seguente:

<%! private int accessCount = 0; %>

/

Si tratta di una dichiarazione che crea un oggetto intero, dotato di modificatore private, deputato a contenere il numero di accessi alla pagina JSP.

Da notare che questo valore è indipendente dalla sessione corrente e memorizza il numero di request HTTP ricevute dalla pagina JSP indipendentemente dal client che le effettua.

Il valore viene poi incrementato attraverso lo scriptlet seguente: <%= ++accessCount %>.

Conclusioni

A questo punto conosciamo le basi per scrivere pagine JSP utilizzandone i mattoni fondamentali, nei prossimi articoli impareremo come integrare queste pagine con gli altri componenti di base dello standard J2EE.

L'autore

  • Massimo Canducci
    Massimo Canducci lavora per Engineering Ingegneria Informatica come Technical Manager della Direzione Ricerca e Innovazione. Si occupa di nuove tecnologie e architetture web.

Vuoi rimanere aggiornato?
Iscriviti alla nostra newletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.