A tutorial – Servlet & JSP – prima parte

Servlet and JSP

A tutorial: Servlet & 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.

Introduzione alle Servlet

L’interfaccia della classe Servlet

I metodi principali sono 5, di cui 3 in particolare servono per gestire il life cycle della servlet. Si tratta dei metodi
init, richiamata alla prima richiesta del servlet, si occupa di gestire l’inizializzazione dello stesso
service invocato ad ogni richiesta, è il metodo che si occupa di gestire la logica di business
detroy che si occupa della cosiddetta application unload, ovvero quando un servlet va disattivato, che può accadere perchè questo viene disinstallato oppure perchè il container viene spento. All’interno di questo metodo vanno inserite eventuali operazioni di clean-up, ovvero pulizia di database o altri stati del sistema legati all’esecuzione del servlet.

Deploy del Servlet

Una volta scritta una classe Servlet base che estende HttpServlet per effettuarne il deploy su un Servlet Container, bisogna rispettare una certa struttura per la directory della Servlet compilata. In particolare potrebbe non essere necessario sapere tutto ciò perchè strumenti come Eclipse predispongono tutto in ambiente di development e volendo preparano un file .WAR che sarà automaticamente scompattato nel Container di produzione.

La struttura della cartella comunque è la seguente

ROOT_DELLA_SERVLET
+META-INF
+WEB-INF
++LIB
++CLASSES

Nella root della servlet vanno i file/risorse che devono essere visibili dall’esterno, quindi pagine JSP, HTML, immagini, fogli di stile, script javascript, eccetera.

In META-INF vengono contenuti file con informazioni sul deployment
in WEB-INF è contenuto il file web.xml (il deployment descriptor, grazie alle annotazioni è ora opzionale prima era obbligatorio), sono contenuti file JSP non accessibili direttamente con un url dall’esterno e soprattutto sono presenti le due sottocartelle più importanti: CLASSES nella quale è contenuto il bytecode del servlet compilato e LIB nella quale sono contenute le librerie esterne utilizzate dalla Servlet.

Nota che tra le librerie esterne non sono previste quelle di default di Java o quelle ad esempio relative alla Servlet (es. servlet-api.jar) perchè queste sono presenti in una cartella del Servlet Container ed accessibili a tutte le servlet presenti nello stesso.

Classe HttpServlet

In pratica l’interfaccia Servlet viene utilizzata molto poco però, si utilizza molto di più la sottoclasse HttpServlet, che permette di utilizzare Cookie e HTTPSession. Invece del metodo service vengono utilizzati i metodi doGet e doPost per eseguire la logica di business richiesta ad ogni chiamata del servizio. Inoltre sono previsti dei metodi init e destroy di default, che possno comunque essere estesi.

I metodi doGet e doPost andranno sovrascritti (si può utilizzare l’annotazione @Override per essere sicuri di aver sovrascritto il metodo e aver scritto bene la signature.

Per contenere i parametri della richiesta alla Servlet, esiste la classe HttpServletRequest che estende ServletRequest, ereditando dei metodi come getContentType(), getParameter(), eccetera. E questo vale anche per la response.

ServletContext

Esiste un contesto per ogni servlet application, o al limite uno per JVM nel caso di applicazioni distribuite. Tale contesto viene utilizzati per condividere informazioni (o meglio attributi, utilizzando i metodi setAttribute e getAttribute) tra le varie risorse dell’applicazione, oppure per registrare dinamicamente degli oggetti.

Deployment Descriptor vs Annotazione @WebServlet

Il deployment descriptor (DD) è un file (collocato in WEB-INF/web.xml) che contiene le informazioni necessarie al Servlet Container per eseguire il deploy del Servlet sullo stesso Container.

Era obbligatorio in passato, ora le sue funzionalità principali (non tutte, ad esempio l’impostazione load-on-startup che chiama il metodo init di una Servlet all’avvio della Servlet e non durante la sua prima richiesta, velocizzando quest’ultima) possono essere rimpiazzate dall’utilizzo della annotazione @WebServlet.

Il DD fa override sull’annotazione, quindi se imposto ad esempio l’url alla quale la Servlet deve rispondere sia sul DD che tramite annotazione, sarà il primo quello effettivamente adottato.

L’annotazione è forse più comoda, mentre il vantaggio del DD è dato dal fatto che posso modificarlo senza dover ricompilare nulla.


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).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *