[Italian] A tutorial – Servlet & JSP – terza parte

(Article copied from my old blog)
Servlet and JSP

Servlet & JSP: a tutorial è l’unico libro che ho trovato che parlasse esplicitamente di Servlet 3.0 e JSP 2.2, fin dalla copertina. All’interno del libro vengono spesso evidenziate le novità appunto apportate da questa versione delle due tecnologie in poi (attualmente non sono le ultime disponibili, con Java EE 6 sono state rilasciate le versioni 3.1 delle specifiche Servlet e 2.3 delle specifiche JavaServer Pages, ma non ho trovato libri più aggiornati).

Se desiderate approfondire l’argomento, è possibile comprare il libro in versione cartacea o
versione Kindle su Amazon (in lingua inglese). Personalmente ho acquistato la versione Kindle perchè, a differenza di altri libri dove la differenza è trascurabile, qua la versione kindle costa 1/4 dell’altra.

JavaServer Pages (JSP) 2.2

E’ una tecnologia di programmazione per il web in Java, che permette di risolvere alcuni dei problemi intrinsechi delle Servlet, ovvero:
– scomodità di scrivere codice HTML all’interno di classi Java
– necessità di scrivere testi ed HTML all’interno del codice (hardcoded), che porta a ricompilazioni delle classi ad ogni cambiamento nella logica di presentazione.
– necessità di scrivere un deployment descriptor o l’annotazione @WebServlet per mappare l’url.

Una pagina JSP è una Servlet che non va compilata, ma viene eseguita da un JSP Container (i Servlet container come Tomcat sono anche JSP Container).

Alla prima richiesta che una pagina JSP richiede viene creata (tradotta) una classe che implementa JspPage o HttpJspPage, una sottointerfaccia di javax.servlet.Servlet, che ha il normale ciclo di vita di una Servlet qualsiasi.

Durante le richieste successive , se la pagina Jsp non è stata modificata viene eseguita la classe Servlet tradotta in precedenza e già in memoria (in questo modo il tutto avviene più rapidamente).

Il problema della prima esecuzione “più lenta” può essere risolto in fase di configurazione, impostando l’applicazione in modo che all’avvio venga generata la classe Servlet, come se fosse stata fatta richiesta della Jsp.

Il contenuto di una pagina Jsp

Una pagina Jsp è una normale pagina al cui interno posso utilizzare dei tag particolari, che richiamano funzionalità della logica di Business in Java:

Esempi
<% echo 3+2; %>
<%@ page import=”java.util.date %>
<%– commento di una servlet –%> (a differenza dei commenti normali, questo non viene mostrato nel codice HTML della pagina presentata all’utente.

Solitamente una Servlet è una pagina HTML (document-type:text/html): posso sempre cambiarlo con response.setContentType se mi serve una pagina di qualche altro tipo.

All’interno del codice delle Servlet posso fare riferimento ad alcuni oggetti cosiddetti impliciti, disponibili in ogni pagina, ad esempio irequest, response, out, session, application, config, page.

Inoltre all’interno della Servlet posso salvare degli attributi, cioè oggetti che richiamerò in seguito. E’ possibile salvare a 4 differenti livelli o scope: page, request, session e application. Questo argomento sarà approfondito in seguito.

Le direttive

Sono dei tag Jsp particolari, si usano per dare informazioni al traduttore di pagine Jsp in Servlet su aspetti quali dimensione implicit object, content type, eventuali classi da importare, eccetera.
Hanno la forma del tipo <%@page attrib1=”value1″ .. %>, ad esempio:

Esistono poi le include directive, che permettono di inserire il contenuto di un’altra pagina Jsp nella pagina Jsp nella quale sono utilizzate:

<%@include file=”url_fragment” %>

Per convenzione le pagine importate vengono chiamati fragments ed hanno estensione .jspf o .html nel caso si tratti di pagine statiche.

Scripting elements

Le pagine Jsp ne prevedono 3 tipi:

Scriplets

Sono blocchi di codice Java, con uno scope unico all’interno di una pagina Jsp. Sono il tipo più elementare ma sono sconsigliate, è preferibile utilizzare uno degli altri approcci, ed addirittura disattivare le Scriplets tramite il tag true all’interno del Deployment Descriptor.

Esempio:
<% echo “ciao”; %>

Declarations

Vengono utilizzati per definire classi o funzioni all’interno della pagina Jsp. Come best practice le declarations andrebbero fatte in cima alla pagina Jsp e poi utilizzate dopo.

Esempio:
<%!public string getCiao() { / code / } %>

Un utilizzo peculiare delle declarations è l’override delle funzioni init() e destroy() della Servlet tradotta dalla Jsp.

Expressions

Sono delle espressioni dirette, stampo qualcosa senza ricorrere ad un echo dentro una scriplets, riportano direttamente il risultato nell’output della pagina. Saranno approfondite in seguito quando si parlerà di Expression Language.
Esempio:
<%= calc.getTime() %>

Azioni

Sono il terzo tipo di elementi sintattici previsti dalle Jsp dopo le direttive e gli scripting elements. Le azioni sono operazioni tradotte in codice java quali accesso ad un oggetto o invocazione di un metodo.

Esempi di azioni: useBean, setProperty, getProperty, include, forward.

Attenzione
C’è una differenza tra la include action e la include directive: mentre la prima è processata a run-time, la seconda era processata a translation time, cioè inserisce dentro il codice stesso il codice sotto forma di una serie di out.write(“..:”).

L’action invece richiama il risultato dell’oggetto (pagina HTML, JSP, Servlet) all’interno dell’output presentato all’utente, è come se fosse una chiamata di funzione, richiamo del codice e mi viene restituito il suo risultato.

Forward
E’ particolarmente importante l’azione forward, che permette di rimandare l’utente ad una risorsa differente, viene ad esempio utilizzata per reindirizzare l’utente alla pagina di login se cerca di accedere ad una pagina che necessita il login e lui non lo ha ancora fatto.

Gestione degli errori

Le JSP supportano la gestione degli errori attraverso try .. catch e attraverso la definizione, con l’apposita direttiva, di una pagina di errore che si occupi di gestire le pagine non gestite.
Il discorso è affrontato nel dettaglio nel libro, con tanto di esempi.


Presto ci sarà un altro articolo con altri estratti e riassunti dal libro. Se non volete aspettare potete acquistare il libro versione cartacea o
versione Kindle su Amazon (in lingua inglese).