Negli articoli precedenti abbiamo visto svariati esempi di applicazioni Web, spesso basate sull'Application Server Tomcat. Come abbiamo avuto modo di osservare, ognuna di queste applicazioni necessitava di una fase finale di deployment in cui era necessario specificare (manualmente o avvalendosi di un IDE, come Eclipse) alcune informazioni necessarie all'Application Server per poter mandare in esecuzione e gestire correttamente la nostra applicazione.
Il deployment descriptor rappresenta il fulcro della fase di deployment. Esso è costituito da un file di tipo XML, denominato web.xml, che sia conforme allo standard XML 1.0 e sia posizionato nella directory WEB-INF, localizzata appena sotto la root associata ad ogni singola applicazione web.
Le specifiche 2.3 delle Servlet definiscono una serie ben precisa di elementi che possono essere utilizzati all'interno dell'elemento web-app. Un deployment descriptor completo di tutti i possibili elementi:
Listato 1. deployment descriptor completo di tutti i possibili elementi (Vedi codice completo)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc. //DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<icon>
<small-icon></small-icon>
<large-icon></large-icon>
</icon>
..//
<filter-mapping>
<filter-name></filter-name>
<url-pattern></url-pattern> <!-- Mutuamente esclusivi -->
<servlet-name></servlet-name>
</filter-mapping>
..//
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
<session-config>
<session-timeout></session-timeout>
</session-config>
..//
</web-app>
Naturalmente, non tutti gli elementi contenuti nel deployment descriptor precedente sono obbligatori ed alcuni di essi (come url-pattern e servlet-name, figli di filter-mapping) sono mutuamente esclusivi, ovvero, è possibile utilizzare l'uno o l'altro ma non tutti e due contemporaneamente.
Per altri elementi è anche possibile prevederne la presenza contemporanea di un numero maggiore o uguale ad 1 (ad esempio, welcome-file, figlio di welcome-file-list) e per altri ancora di un numero maggiore o uguale a zero (ad esempio, context-param, figlio di web-app).
Vediamo ora il significato di ognuno degli elementi presenti nel precedente file.
elemento | descrizione | Fac. |
---|---|---|
icon | Contiene il path relativo ad un file di tipo GIF o JPEG che può essere utilizzato da un tool grafico per rappresentare l'applicazione web | X |
small-icon | Stessa semantica dell'elemento padre icon, rappresenta un'immagine di piccolo formato | X |
large-icon | Stessa semantica dell'elemento padre icon, rappresenta un'immagine di formato più grande. | X |
display-name | Rappresenta un nome che può essere utilizzato da uno strumento di gestione dell'applicazione per rappresentare l'applicazione web. | X |
description | Contiene una descrizione dell'applicazione web. | X |
distributable | Descrive se è possibile effettuare il deployment dell'applicazione web su un servlet container distribuito (attraverso l'utilizzo di più server). Il valore di default è false. | X |
context-param | Contiene la dichiarazione di un parametro di inizializzazione utilizzato all'interno dell'applicazione web. Può essere presente n volte (per dichiarare più parametri), con n che varia da zero ad un numero qualsiasi. | |
param-name | Il nome del parametro di inizializzazione. | |
param-value | Il valore del parametro di inizializzazione. Si noti che è possibile passare parametri all'applicazione soltanto come stringhe. | |
description | Una descrizione relativa al parametro di inizializzazione. | X |
filter | Definisce un filtro, utilizzato dall'applicazione web. Per maggiori dettagli sui filtri, vedasi l'articolo. Può essere presente n volte (per dichiarare più filtri), con n che varia da zero ad un numero qualsiasi. | |
icon | Contiene il path relativo ad un file di tipo GIF o JPEG che può essere utilizzato da un tool graficoper rappresentare il filtro. | X |
filter-name | Contiene il nome del filtro. | |
display-name | Il nome del filtro visualizzato dai tool grafici. | X |
description | Contiene una descrizione del filtro. | X |
filter-class | Il nome completo della classe che implementa il filtro. | |
init-param | Consente di definire un parametro di inizializzazione per il filtro. Può essere presente n volte(per dichiarare più parametri), con n che varia da zero ad un numero qualsiasi | |
filter-mapping | Contiene il nome logico del filtro specificato nell'elemento filter. Può essere presente n volte, tante quante sono gli elementi di tipo filter. | |
filter-name | Lo stesso nome utilizzato all'interno dell'elemento filter-name, figlio di filter. | |
url-pattern | La URL del componente a cui applicare il filtro. È mutuamente esclusivo con il tag servlet-name(definito di seguito). | |
servlet-name | La servlet a cui verrà applicato il filtro. È mutuamente esclusivo con il tag url-pattern. | |
listener | Definisce una classe di tipo listener (ascoltatore) che viene utilizzata dal container quando si verificaun determinato evento. Può essere presente n volte (per dichiarare più listener), con n che varia da zero ad un numero qualsiasi | |
listener-class | Il nome della classe che implementa il listener. |
elemento | descrizione | Fac. |
---|---|---|
servlet | Contiene la definizione di una servlet utilizzata all'interno dell'applicazione web. Può essere presente n volte (per dichiarare più servlet), con n che varia da zero ad un numero qualsiasi | |
icon | Contiene il path relativo ad un file di tipo GIF o JPEG che può essere utilizzato da un tool graficoper rappresentare la Servlet. L'elemento presenta anche small-icon e large-icon | X |
servlet-name | Contiene il nome user-frienly della Servlet che è possibile utilizzare per la risorsa. | |
display-name | Rappresenta un nome che può essere utilizzato da un tool grafico per rappresentare la Servlet.Facoltativo. | |
description | Una descrizione della Servlet. | X |
servlet-class | Contiene il nome della classe che implementa la servlet. È mutuamente esclusivo con l'elemento jsp-file. | |
jsp-file | Il nome completo di una pagina JSP presente all'interno dell'applicazione web. È mutuamente esclusivo con l'elemento servlet-class. | |
init-param | Simile all'elemento context-param, consente di definire un parametro di inizializzazione di accessoesclusivo per la servlet. Può essere presente n volte (per dichiarare più parametri), con n che varia da zero ad un numero qualsiasi. L'elemento presenta anche param-name, param-value e description | |
load-on-startup | Contiene un valore intero positivo che specifica l'ordine, rispetto alle altre servlet (se presenti), che la servlet in questione dovrà rispettare per essere avviata automaticamente alla partenza del server. Le servlet con valori più bassi saranno caricate prima rispetto alle servlet con valori più alti. Se esistono servlet con i medesimi valori di load-on-startup, il loro avvio sarà deciso in maniera arbitraria dal server. Se non è definito questo tag, la servlet verrà caricata quando il server riceverà la prima richiesta ad essa relativa. | X |
run-as | Specifica una security identity da utilizzare durante l'esecuzione dell'applicazione web, ad esempio durante l'invocazione un EJB dalla servlet. L'elemento presenta anche description e role-name | X |
security-role-ref | Contiene la dichiarazione di un riferimento ad un security role, presente nel codice dell'applicazione web. Può essere presente n volte (per dichiarare più riferimenti), con n che varia da zero ad un numero qualsiasi. L'elemento presenta anche description, role-name e role-link | |
servlet-mapping | Consente di definire degli alias per una servlet. In altre parole, questo elemento viene utilizzato per mappare una particolare URI su una servlet avente un preciso nome. Può essere presente n volte (in relazione alle servlet definite), con n che varia da zero ad un numero qualsiasi | |
session-config | :Consente di configurare i parametri di sessione da utilizzare per l'applicazione web. | X |
session-timeout | Definisce il valore di timeout delle sessioni. | X |
mime-mapping | Definisce un mapping tra un'estensione ed un mime-type. Può essere presente n volte (è possibile definire più mapping), con n che varia da zero ad un numero qualsiasi. | |
extension | Contiene una stringa che definisce una estensione da associare ad un mime type. Ad esempio: "txt". | |
mime-type | Contiene un mime type definito da associare all'estensione. Ad esempio: text/plain. | |
welcome-file-list | Consente di definire i file da restituire al client quando non viene specificata alcuna risorsa nella richiesta pervenuta al server. | X |
welcome-file | Il nome del file da caricare. Può essere presente n volte (in relazione alle possibili pagine da caricare per default), con n che varia da uno ad un numero qualsiasi. | |
error-page | Consente di definire una pagina di errore da restituire al client quando si verifica un determinato errore (o una particolare eccezione). Può essere presente n volte (è possibile definire più pagine di errore, in relazione agli errori che si desidera gestire), con n che varia da uno ad un numero qualsiasi. | |
error-code | Il codice dell'errore che fa scattare la visualizzazione della pagina di errore. È mutuamente esclusivo con il tag exception-type. | X |
exception-type | L'eccezione che fa scattare la visualizzazione della pagina di errore.. Se non viene specificato nessun codice o nessuna eccezione, la pagina di errore definita nel tag location verrà visualizzata in ogni circostanza in cui si sia verificato un errore applicativo o si sia scatenata un'eccezione. | X |
location | La locazione della pagina di errore. |
elemento | descrizione | Fac. |
---|---|---|
tag-lib | Consente di definire la locazione delle tag libraries. Può essere presente n volte (è possibile definire più tag libraries da utilizzare), con n che varia da zero ad un numero qualsiasi. | |
taglib-uri | La URI (relativa alla posizione del file web.xml) che identifica la tag library utilizzata nell'applicazione web. | |
taglib-location | La locazione dove si trova il description file della tag library. | |
resource-env-ref | Consente di configurare una risorsa esterna che può essere utilizzata nell'ambiente dell'applicazione web. Differisce, in genere, dalle risorse definite nel tag resource-ref (definito di seguito) dal fatto che è possibile ottenere diretto accesso alla risorse senza passare attraverso oggetti di tipo factory. Può essere presente n volte (è possibile definire più risorse esterne), con n che varia da zero ad un numero qualsiasi. | |
description | Contiene la descrizione della risorsa esterna. | X |
resource-env-ref-name | Contiene il nome della risorsa esterna. | |
resource-env-ref-type | Contiene il tipo della risorsa esterna, ovvero il nome di una classe o interfaccia Java.Obbligatorio | |
resource-ref | Similmente al tag resource-env-ref, consente di configurare una risorsa esterna da utilizzare nell'applicazione web. In particolare, in questo caso, si fa riferimento a risorse che restituiscono delle connessioni, come URL connections, JDBC connections o JMS connections, attraverso l'utilizzo di oggetti di tipo factory,. Può essere presente n volte (è possibile definire più risorse esterne), con n che varia da zero ad un numero qualsiasi | |
description | Contiene la descrizione della risorsa esterna. | X |
res-ref-name | Contiene il nome del riferimento alla connection factory del resource manager. | |
res-type | Contiene il tipo della risorsa esterna, ovvero il nome di una classe o interfaccia Java. | |
res-auth | Descrive il tipo di autenticazione da utilizzare verso il resource manager. Può assumere uno deidue valori seguenti: Application, Container. | |
res-sharing-scope | Specifica se le connessioni ottenute attraverso il riferimento alla connection factory del resource manager possono essere condivise o meno. Può assumere uno dei due valori seguenti: Shareable, Unshareable. | X |
security-constraint | Descrive i ruoli o gli utenti che possono accedere alle risorse dell'applicazione web. Può essere presente n volte (è possibile definire più vincoli di sicurezza), con n che varia da zero ad un numero qualsiasi. | |
display-name | Rappresenta un nome che può essere utilizzato da un tool grafico per rappresentare la securityconstraint | |
web-resource-collection | Viene utilizzato per identificare un sottoinsieme delle risorse e dei metodi HTTP dell'applicazione web su cui viene applicato un vincolo di sicurezza. Se non viene specificato alcun metodo HTTP, allora il vincolo definito si applica a tutti i metodi HTTP. Può essere presente n volte con n che varia da uno ad un numero qualsiasi. L'elemento presenta anche web-resource-name description, url-pattern, http-method | |
auth-constraint | Definisce i ruoli degli utenti o dei gruppi che hanno accesso alle collezioni di risorse definite nei tag web-resource-collection. | X |
user-data-constraint | Contiene la definizione relativa ai vincoli di sicurezza necessari per la comunicazione trailclient ed il container. L'elemento presenta anche description, transport-guarantee | |
login-config | Configura il metodo di autenticazione degli utenti. Facoltativo | |
auth-method | Può contenere uno dei seguenti valori: "BASIC", "DIGEST", "FORM", "CLIENT-CERT". | X |
realm-name | Il nome del dominio cui si fa riferimento per autenticare le credenziali dell'utente. | X |
form-login-config | Utilizzato per la configurazione del login in relazione alla immissione del valore "FORM" nel tag auth-method.. | X |
elemento | descrizione | Fac. |
---|---|---|
security-role | Consente la definizione di un security role. Può essere presente n volte (per definire più security role), con n che varia da zero ad un numero qualsiasi | |
description | Contiene la descrizione del security role. | X |
role-name | Contiene il nome del security role. | |
env-entry | Consente di definire una risorsa che può essere acceduta attraverso l'interfaccia JNDI. Può essere presente n volte, con n che varia da zero ad un numero qualsiasi | |
description | Contiene una descrizione della risorsa. | X |
env-entry-name | Contiene il nome della risorsa. | |
env-entry-value | Contiene il valore della risorsa. Se non viene specificato alcun valore, è necessario fornirne uno in fase di deployment. | X |
env-entry-type | Contiene il tipo della risorsa. Può essere uno dei seguenti tipi: Boolean, String, Integer, Double, Float. | |
ejb-ref | Viene utilizzato per la dichiarazione di un riferimento ad un Enterprise Java Bean (EJB) che viene acceduto attraverso le interfacce Remote Home e Component. Può essere presente n volte (per definire più EJB), con n che varia da zero ad un numero qualsiasi | |
description | Contiene la descrizione dell'EJB. | X |
ejb-ref-name | Contiene il nome del riferimento all'EJB utilizzato nel codice dell'applicazione web. | |
ejb-ref-type | Contiene il tipo dell'EJB referenziato. Ad esempio: session. | |
home | Contiene la dichiarazione dell'interfaccia home relativa all'EJB referenziato. | |
remote | Contiene la dichiarazione dell' interfaccia remote relativa all'EJB referenziato. | |
ejb-link | Specifica quale sia l'EJB effettivamente referenziato. | X |
ejb-local-ref | Viene utilizzato per la dichiarazione di un riferimento ad un Enterprise Java Bean (EJB) che viene acceduto attraverso le interfacce Local Home e Component. Può essere presente n volte (per definire più EJB), con n che varia da zero ad un numero qualsiasi | |
description | Contiene la descrizione dell'EJB. | X |
ejb-ref-name | Contiene il nome del riferimento all'EJB utilizzato nel codice dell'applicazione web. | |
ejb-ref-type | Contiene il tipo dell'EJB referenziato, ad esempio, session. | |
local-home | Contiene la dichiarazione dell' interfaccia local home relativa all'EJB referenziato. | |
local | Contiene la dichiarazione dell' interfaccia local relativa all'EJB referenziato. | |
ejb-link | Specifica quale sia l'EJB effettivamente referenziato. | X |