CERCA SITEMAP FEED RSS 1280
Ultimo aggiornamento: 30 Agosto 2009

Web Application

Una web application è un’applicazione alla quale si accede mediante un browser web.

Generalmente le web application possono essere divise in due grandi categorie:
  • orientate alla presentazione: generano diverse pagine web mediante l’utilizzo di linguaggi di markup i cui contenuti variano in funzione della richiesta dell’utente.
  • orientate al servizio: costituiscono il punto di accesso di un servizio web.
Nella piattaforma Java un web component è un oggetto che estende le funzionalità di un web server aggiungendone di nuove: Servlet e Java Server Pages sono per esempio dei web component.
In particolare le Servlet sono dei programmi Java in grado di processare dinamicamente delle richieste e costruire delle risposte mentre le JSP sono dei documenti di testo che vengono eseguiti come servlet permettendo un approccio più naturale alla costruzione di contenuti statici.
I web component sono in grado di accedere ai servizi offerti da un web container come lo smistamento delle richieste, la sicurezza, la concorrenza, la gestione della memoria.
Ad ogni web application è associato un file di configurazione in formato XML che prende il nome di Web Application Deployment Descriptor (DD) che rispetta un determinato schema.

La più piccola web application funzionante e quindi riusabile costituisce un modulo web e può contenere:
  • classi di utilità lato server come JavaBeans
  • classi lato client come Applet
Struttura di una web application
La directory root dell’applicazione contiene risorse statiche, la sottodirectory /WEB-INF/ invece contiene:
  • il file web.xml che costituisce il Web Application Deployment Descriptor
  • i tag library descriptor files
  • la cartella classes che contiene classi di utilità lato-server
  • la cartella tags che contiene tag files
  • la cartella lib che contiene librerie di classi
Una web application viene generalmente compressa in un file JAR rinominato in WAR (Web ARchive) in maniera tale da poter essere riutilizzata o installata su un altro web container conforme alle Java Servlet Specification (deployment).

Deployment Descriptor

Il Deployment Descriptor contiene tutte le informazioni e le impostazioni di configurazione relative alla web application alla quale fa riferimento: la sua presenza permette di rendere molto più leggero il processo di deployment (installazione) di nuove web application all’interno di un web container (si parla infatti di Pluggables Web Components).

In particolare permette di poter specificare:
  • le icone per la rappresentazione grafica dell’applicazione
  • la descrizione dell’applicazione
  • i parametri di inizializzazione
  • i nomi delle servlet in esecuzione ed i relativi parametri di configurazione
  • i filtri associati alle diverse servlet
  • i listener di cui fa utilizzo la web application
  • il timeout delle sessioni
  • il mapping delle servlet con i relativi indirizzi
  • il welcome file list ovvero la sequenza di file da utilizzare in risposta ad una richiesta client
  • le regole per la gestione degli errori e della sicurezza
Tutte queste impostazioni di configurazione sono memorizzate sottoforma di un documento XML che fa utilizzo di determinati tag tutti contenuti all’interno del tag <web-app> che rappresenta la radice del documento stesso.
E’ opportuno sottolineare che se una web application contiene soltanto risorse statiche e Java Server Pages definire il Web Application Deployment Descriptor non è necessario ai fini del funzionamento della web application stessa.

Configurazione generale

Alcuni tag del Deployment Descriptor permettono di configurare quelle che sono le impostazioni generali della web application e quindi comuni a tutti i web component che la costituiscono: i tag utilizzabili dalle Java Server Pages, la durata delle sessioni, la gestione degli errori ...
  • <icon> permette di definire opzionalmente due icone (una grande ed una piccola) che portebbero essere utilizzate da un tool grafico per visualizzare la web application stessa.
    <icon>
      <small-icon>/img/iconapiccola.gif</small-icon>
      <large-icon>/img/iconagrande.gif</large-icon>
    </icon>
    
  • <display-name> anch’esso opzionale rappresenta un nome che potrebbe essere utilizzato per identificare l’applicazione
    <display-name>MiaApplicazione</display-name>
    
  • <description> contiene una descrizione dell’applicazione
    <description>Web application dimostrativa per ...</description>
    
  • <distributable> permette di specificare se è possibile effettuar eil deployment dell’applicazione su un servlet container distribuito
    <distributable>false</distributable>
    
  • <context-param> permette di definire dei parametri di inizializzazione per la web-application (o meglio del ServletContext) ai quali è possibile accedere mediante i metodi getInitParameter()e getInitParameterNames() della classe ServletContext.
    Per ogni parametro occorre specificare il nome, il valore ed una descrizione opzionale: naturalmente se si vogliono definire diversi parametri l’elemento dovrà essere ripetuto più volte.
    <context-param>
       <param-name>Colore</param-name>
       <param-value>Rosso</param-value>
       <description>parametro relativo al colore di sfondo</description>
    </context-param>
    
  • <session-config> permette di definire i parametri di sessione come la durata in minuti
    <session-config>
       <session-timeout> 5 </session-timeout>
    </session-config>
    
  • <mime-mapping> permette di definire un’associazione fra un’estensione (ad esempio .txt) ed il corrispondente mime type (ad esempio text/plain): può essere presente più volte.
    <mime-mapping>
      <extension>html</extension>
      <mime-type>text/html</mimetype>
    </mime-mapping>
    
  • <welcome-file-list> contiene una lista ordinata di <welcome-file> che definiscono l’ordine di risposta quando una richiesta http corrisponde ad una directory della web application (ad esempio prima index.html poi index.jsp)
    <welcome-file-list>
      <welcome-file>index.html</welcome-file>
      <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
  • <error-page> permette di definire un’associazione fra un codice di errore o un’eccezione ed un web components: <error-code> definisce un codice di errore http valido <exception-type> definisce il tipo di eccezione (sono mutuamente esclusivi se voglio trattare un’eccezione ometterò l’error-code, se voglio trattare un errore http ometterò l’exception-type) e <location> definisce l’indirizzo della risorsa da visualizzare in risposta all’errore o eccezione verificatasi.
    <error-page>
      <error-code>404</error-code>
      <location>/notfound.jsp</location>
    </error-page>
    
    <error-page>
      <exception-type>java.lang.Throwable</exception-type>
      <location>/error.jsp</location>
    </error-page>
    
    Naturalmente possono essere definite più error-page.
  • <tag-lib> definisce una libreria di tag utilizzabili dalle Java Server Pages della web application: <taglib-uri> rappresenta la URI che identifica la tag library a partire dalla directory WEB-INF mentre <taglib-location> identifica la posizione del description file della tag library definita.
    <taglib>
      <taglib-uri>/tags/taglib</taglib-uri>
      <taglib-location>/WEB-INF/lib/taglib.tld</taglib-location>
    </taglib>
    
    Possono essere definite più <tag-lib>.
  • <resource-ref> permette di configurare una risorsa esterna in maniera tale da poterla utilizzare all’interno della web application: <description> contiene una descrizione testuale della risorsa esterna <res-ref-name> identifica il nome della risorsa all’interno di JNDI <res-type> identifica il tipo della risorsa ovvero il nome della classe Java che la rappresenta <res-auth> usato per controllare l’accesso alla risorsa <res-sharing-scope> specifica se le connessioni ottenute possono essere condivise (Shareable) o meno (Unshareable)
    <resource-ref>
      <resource-ref-name> jdbc/dbase </resource-ref-name>
      <resource-ref-type> javax.sql.DataSource </resource-ref-type>
      <resource-ref-auth> container </resource-ref-auth>
    </resource-ref>
    
    Possono essere definite più <tag-lib>.

Configurazione delle Servlet

Per definire una servlet all’interno del Deployment Descriptor si utilizza l’elemento <servlet> che permette di specificare:
  • un elemento <icon> mediante il quale è possibile specificare una <small-icon> ed una <large-icon> mediante le quali la servlet potrebbe essere rappresentata all’interno di un tool grafico
  • un elemento <servlet-name> che identifica univocamente la servlet
  • un elemento <display-name> che rappresenta un nome utilizzabile da un tool grafico per identificare la servlet
  • un elemento <description> che contiene una descrizione della servlet
  • un elemento <servlet-class> che identifica la classe della servlet
  • un elemento <jsp-file> mutuamente esclusivo con l’elemento <servlet-class> che identifica un file .jsp all’interno della web application.
  • uno o più parametri di inizializzazione della servlet definiti dal tag <init-param> e contenenti una descrizione opzionale <description> un nome <param-name> ed un valore <param-value>
  • un elemento <load-on-startup> che definisce un ordine di caricamento delle diverse servlet definite all’interno del deployment description
<servlet>
   <icon>
      <small-icon>/img/iconapiccola.gif</small-icon>
      <large-icon>/img/iconagrande.gif</large-icon>
   </icon>
   <description> Servlet di prova </description>
   <display-name>MiaServlet</display-name>
   <servlet-name>MiaServlet </servlet-name>
   <servlet-class> MiaServletClass</servlet-class>
   <init-param>
      <param-name>numero</param-name>
      <param-value>rosso</param-value>
   </init-param>
   <init-param>
      <param-name>colore</param-name>
      <param-value>rosso</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
Una volta che la servlet è correttamente definita occorre effettuarne il mapping: occorre cioè associare la servlet ad un URL.

Il mapping avviene mediante l’elemento <servlet-mapping> in cui occorre specificare:
  • <servlet-name> ovvero il nome della servlet di cui si sta effettuando il mapping
  • <url-pattern> l’indirizzo al quale viene associata la servlet
<servlet-mapping>
   <servlet-name>MiaServlet</servlet-name>
   <url-pattern>/process/*</url-pattern>
</servlet-mapping>

Filter e Listener

Per definire un filtro all’interno del Deployment Descriptor viene utilizzato l’elemento <filter> che permette di configurare:
  • <icon> ovvero icona piccola <small-icon>e grande <large-icon> utilizzabili per rappresentare il filtro stesso
  • <display-name> nome del filtro utilizzabile per la rappresentazione dello stesso all’interno di un tool grafico
  • <filter-name> ovvero un nome che identifica univocamente il filtro all’interno della web application
  • <filter-class> ovvero la classe java di appartenenza del filtro
  • uno o più parametri di inizializzazione definiti mediante l’elemento <init-param> e contenenti una descrizione opzionale <description> un nome <param-name> ed un valore <param-value>
<filter>
   <filter-name>MioFiltro</filter-name>
   <filter-class>MioFiltroClass </filter-class>
   <init-param>
      <param-name>message</param-name>
      <param-value>Messaggio di prova</param-value>
   </init-param>
</filter>
Dal momento che il filtro agisce sulle richieste (o risposte) di servlet ed in generale flussi http occorre effettuarne il mapping mediante l’elemento <filter-mapping> precisando:
  • <filter-name> ovvero il nome del filtro di cui stiamo effettuando il mapping
  • <servlet> ovvero il nome della servlet sulla quale agisce il filtro
  • <url-pattern> mutuamente esclusivo con l’elemento <servlet> identifica le richieste sulle quali applicare il filtraggio.
<filter-mapping>
   <filter-name>MioFiltro</filter-name>
   <url-pattern>/filter.jsp</url-pattern>
</filter-mapping>
La definizione di listener (di Context, di sessione ...) infine avviene mediante l’elemento <listener> che permette di specificare la classe del listener <listener-class>
<listener>
   <listener-class>MioContextListener</listener-class>
</listener>
Dal momento che i listener agiscono sugli eventi della web application non è necessario effettuarne un mapping (un listener di sessione ad esempio agirà indistintamente su tutte le sessioni).

La sicurezza

Per evitare l’accesso autorizzato alle risorse di una web application è possibile definire dei vincoli mediante l’elemento <security-constraint>.

Tale elemento permette di impostare:
  • una o più collezioni di risorse da proteggere <web-resource-collection> ciascuna delle quali è identificata da un nome <web-resource-name> una descrizione opzionale <description> uno o più <url-pattern> relativi alle risorse che fanno parte della collezione da proteggere ed uno o più <http-method> che indicano quali metodi http sottoporre al vincolo di protezione.
  • un elemento <auth-constraint> che identifica quali ruoli-utente <role-name> hanno accesso alle risorse definite nel <security-constraint> (è possibile altresì specificare una descrizione <description>).
  • un elemento <user-data-constraint> che definisce come il client dovrebbe comunicare con il server: permette di impostare una descrizione <description> e la modalità di dialogo <transport-guarantee> (NONE nessuna garanzia, INTEGRAL i dati trasmessi non devono subire modifiche, CONFIDENTIAL nessuno al di fuori dei dialoganti deve avere accesso ai dati trasmessi).
<security-constraint>
   <web-resource-collection>
   <web-resource-name>Area Protetta</web-resource-name>
      <url-pattern>/user.jsp</url-pattern>
   </web-resource-collection>
   <auth-constraint>
      <role-name>admin</role-name>
      <role-name>utente</role-name>
   </auth-constraint>
</security-constraint>
L’elemento <login-config> permette di specificare il modo in cui gli utenti che richiedono le risorse definite all’interno del <security-constraint> debbano autenticarsi, in particolare:

  • <auth-method> definisce le modalità di autenticazione (BASIC autenticazione utente tramite browser, FORM gli utenti utilizzano un form html, CLIENT-CERT si fa uso di certificati digitali).
  • <form-login-config> è un elemento opzionale utilizzato soltanto se si sceglie una modalità di autenticazione di tipo FORM e permette di specificare
    • la pagina di autenticazione <form-login-page>
    • la pagina di errore relativa ad un eventuale fallimento dell’autenticazione <form-error-page>
<login-config>
   <auth-method>FORM</auth-method>
   <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/fail_login.html</form-error-page>
   </form-login-config>
</login-config>
L’elemento <security-role> infine permette di specificare quelli che sono i ruoli utente coinvolti all’interno dell’applicazione
<security-role>
   <role-name>admin</role-name>
</security-role>

<security-role>
   <role-name>utente</role-name>
</security-role>