Creare una Servlet: ANNOTATIONS (Servlet 3.0) VS. XML (fino a Servlet 2.5)

Nel precedente articolo Creare una semplice web application con JAVA, Eclipse, Tomcat, Hibernate e PostgreSQL – Parte #2 abbiamo visto come creare una nuova Servlet tramite il wizard guidato di Eclipse. Una cosa importante da notare è che, dopo aver creato la nostra Servlet ed aver incluso la libreria delle Servlet API, nel Deployment Descriptor del nostro progetto, visibile nel Project Explorer, sono comparse delle informazioni sotto le voci “Servlets” e “Servlet Mappings”.

creare una semplice web application - servlet imported

Questo perché, annotando la classe della nostra servlet con

@WebServlet(description = "Create new user Servlet", urlPatterns = { "/CreateUser.do" })

abbiamo definito, configurato e mappato la servlet nel Deployment Descriptor dell’applicazione.
A questo punto però occorre fare prima un’importante precisazione e poi un passo indietro per capire cosa significa quanto appena detto.
La precisazione consiste nel dire che le annotations nelle API Servlet sono state aggiunte solo nella versione 3.0 della specifica, con l’introduzione del package javax.servlet.annotation. La versione 3.0 delle specifica delle Servlet API è stata introdotta con la versione 6.0 della piattaforma Java Enterprise Edition, e la versione 7.0 di Tomcat è quella che ne offre un’implementazione (delle sole API Servlet, non dell’intera platform EE). La versione 2.5 della specifica Servlet fa invece parte della Java Platform Enterprise Edition 5.0, e viene implementata dalla versione 6.0 di Tomcat. La tabella rappresentata nella figura seguente riassume le corrispondenze tra le versioni delle Servlet API, della platform Java EE e del web container Tomcat, sempre ricordando che Tomcat, essendo appunto un web container (o servlet container) e non un Application Server, offre un’implementazione delle sole API Servlet e JSP e non dell’intera platform Java EE (di cui Servlet e JSP API rappresentano solo un subset).
Servlet - JavaEE - Tomcat versions

Le annotations introdotte con le Servlet API 3.0 ed incluse nel package javax.servlet.annotation sono:
Java EE Servlet 3.0 annotations

Fatta questa importante precisazione, come detto, facciamo un passo indietro per analizzare il processo di definizione di una servlet con il metodo “tradizionale”, precedente all’introduzione delle annotations, basato sulla configurazione XML effettuata tramite il Deployment Descriptor, rappresentato da un file XML chiamato “web.xml”.
Il modo più rapido per farlo è prendere la nostra classe Servlet e commentare la riga contenente l’annotation WebServlet. Premiamo anche la scorciatoia da tastiera “Ctrl+Shift+O” per rimuovere il relativo import, a questo punto inutilizzato.
Così facendo abbiamo rimosso la definizione ed il mapping della nostra Servlet dal Deployment Descriptor, come possiamo vedere nella figura successiva dove, nella relativa alberatura, non compare più nessuna informazione sotto le voci “Servlets” and “Servlet Mappings”.

Servlet 3.0 annotations

A questo punto abbiamo creato la servlet ma, non avendo utlizzato le annotations, non l’abbiamo ancora dichiarata e configurata.
Per fare questo, come abbiamo visto, abbiamo bisogno del file web.xml, il cosiddetto Deployment Descriptor. Per crearlo clicchiamo con il tasto destro sulla voce “Deployment Descriptor: WebTest ” del nostro progetto nel Project Explorer, selezioniamo dal menù contestuale la voce “Generate Deployment Descriptor stub”. Vedremo a questo punto comparire nel nostro progetto, sotto la voce “WebContent/WEB-INF” il famoso file web.xml, in cui dovremo andare ad inserire le informazioni necessarie al web container per deployare la nostra servlet.
Eclipse - generate deployment descriptor stub

Il sample del Deployment Descriptor che ci viene generato da Eclipse contiene quanto illustrato di seguito:
Autogenerated deployment descriptor

A questo punto dobbiamo editare il Deployment Descriptor generato automaticamente da Eclipse, aggiungendo la definizione della nostra servlet ed il suo mapping con l’URL su cui riceverà la richieste. Per fare questo dobbiamo inserire nel file web.xml le informazioni necessarie all’interno dei tags e . Il tag deve contenere il nome della Servlet ed il nome della classe utilizzata per implementarla. Il tag invece deve contenere, per ciascuna servlet definita nel tag precedente, l’URL su cui questa viene mappata.
Quindi editiamo il file web.xml inserendo:

<servlet>
	<servlet-name>Add User</servlet-name>
	<servlet-class>com.dede.app1st.controller</servlet-class>
</servlet>

e

<servlet-mapping>
	<servlet-name>Add User</servlet-name>
	<url-pattern>/CreateUser.do</url-pattern>
</servlet-mapping>

Il risultato di queste modifiche si può vedere nella figura sottostante.
Autogenerated deployment descriptor

Una volta effettuata questa operazione siamo arrivati allo stesso punto in cui eravamo in precedenza quando avevamo utilizzato l’annotation WebServlet per definire e mappare la Servlet.

This entry was posted in $1$s. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *