Nei precedenti articoli della serie abbiamo descritto le tecnologie fondamentali alla base della realizzazione di applicazioni web J2EE: Servlet e JSP. In questo articolo descriviamo le modalità di deployment di una applicazione web.
Introduzione
Nei precedenti articoli abbiamo introdotto alcuni concetti alla base della teoria necessaria per affrontare l‘argomento delle applicazioni web J2EE. Servlet e JSP costituiscono i componenti di base per la gestione delle operazioni tipiche di questo tipo di applicazioni. In questo articolo vediamo come sia possibile installare in un web container una semplice applicazione. Vedremo quindi la struttura standard di una web application e le modalità tipiche di installazione.
Nel corso dell‘articolo faremo riferimento come ambiente di installazione ed esecuzione a Apache Tomcat. Tomcat è uno dei web container più diffusi ed utilizzati; è sviluppato secondo il modello open e rilasciato in base alla Apache Software License.
Tutta la documentazione su Tomcat è possibile reperirla al sito internet del progetto [4].
Nei nostri esempi faremo riferimento alla versione Tomcat 5.5, che richiede la versione 5.0 della J2SE. Per girare con la versione 1.4 è necessaria una configurazione descritta nella documentazione.
Tomcat 5.5 supporta la Servlet API 2.4 e la versione JSP 2.0. Nel seguito faremo riferimento alla versione per Windows ma tutto quanto detto vale anche per la versione Linux salvo la diversa modalità di installazione. Tutte le informazioni sono comunque reperibili in [4].
ÃÂ
Struttura di una applicazione web
La struttura di una applicazione web J2EE prevede un ambiente di deployment standard comune a tutti i web container J2EE compliant. Ciò significa che effettuare l‘installazione di una applicazione su TomcatÃÂ o su un altro web container non comporta modifiche all‘applicazione stessa.
Affinchà© ciò sia possibile la struttura dell‘applicazione deve rispettare alcune regole che sono stabilite dalle specifiche delle Servlet e delle JSP. Le modalità operative sono ovviamente diverse da container a container a seconda del prodotto utilizzato. In genere ogni application server mette a disposizione delle funzionalità amministrative che consentono di eseguire l‘installazione in maniera piuttosto semplice.
Una volta effettuato il download di Tomcat 5.5 è sufficiente eseguire il programma di installazione. L‘installazione è molto semplice; bisogna fare attenzione a selezionare la porta di esecuzione del servizio http, che di default è impostata al valore 8080, e una password per l‘utente amministrativo admin.
Una volta installato, Tomcat costruisce la sua struttura di cartelle tra le quali c‘è ne una molto importante ai fini del nostro discorso, la webapps.Questa è la cartella al disotto della quale vengono installate le applicazioni web in Tomcat. La webapps è una cartella tipica di Tomcat, ed ha la sua corrispondenza in altre strutture di cartelle degli altri web container; tutto quello che c‘è al di sotto di questa cartella segue invece la struttura standard dettata dalla specifica J2EE.
Ogni applicazione web J2EE al di sotto della cartella in cui viene installata (che nel nostro caso è la webapp di Tomcat) rispetta la seguente struttura:
- ÃÂ MyApp: Una cartella che costituisce la root dell‘applicazione. Al di sotto della cartella root viene inserito tutto il contenuto statico dell‘applicazione (pagine HTML, javascript, css, etc) organizzato come si vuole, e tutte le pagine JSP anch‘esse in cartelle strutturate a piacere.
- ÃÂ WEB-INF: Una cartella posta immediatamente al di sotto della cartella radice dell‘applicazione.
- ÃÂ ÃÂ classes: una cartella posta immediatamente sotto la WEB-INF e contenente le classiÃÂ ÃÂ ÃÂ dell‘applicazione organizzate in cartelle corrispondenti alla struttura dei package
- ÃÂ lib: una cartella posta immediatamente sotto la WEB-INF e contenente tutti i JAR file dell‘applicazione
- ÃÂ ÃÂ tags: una cartella posta immediatamente sotto la WEB-INF e contenente tutti i Tag Files dell‘applicazione
Il deployment descriptor
Oltre alla struttura standard appena descritta esiste anche un file che l‘applicazione web deve prevedere obbligatoriamente in base alla specifica, il deployment descriptor. Il deployment descriptor è un file XML denominato web.xml che contiene tutte le definizioni necessarie al container per poter avviare ed eseguire correttamente l‘applicazione. Il web.xml segue le regole dettate dal suo XML Schema e contiene numerose informazioni, alcune obbligatorie alcune opzionali, sui vari elementi che costituiscono l‘applicazione. Abbiamo già esaminato un esempio di deployment descriptor molto semplice in [5]. C‘è da osservare che sebbene sia opportuno conoscere la struttura di un web.xml oggi tutti i più diffusi ambienti di sviluppo consentono di costruirlo in maniera automatica senza la necessità di una digitazione manuale.
Il Web Archive file
Come visto effettuare il deployment di una web application consiste nel creare una struttura di cartelle in base alle regole enunciate e copiare in ogni cartella i file opportuni. Effettuare a mano per ogni singolo file questa operazione sarebbe ovviamente molto dispendioso in termini di tempo e soprattutto molto soggetto ad errori. La soluzione a questo problema è il file WAR, Web Archive. Il WAR è un file, assolutamente analogo ad un JAR, che contiene tutti i file di una applicazione web già organizzati secondo la corretta struttura di deployment. In pratica è l‘insieme dei file della nostra applicazione in una forma compressa, ottenuta creando un JAR di tutti i file e modificando l‘estensione di questo jar a .war. Il nome del file WAR su Tomcat diventa il nome dell‘applicazione web stessa. In altri container non è così, ma comunque il WAR è la modalità standard di deployment di una applicazione web indipendentemente da come poi il container associ un nome di contesto all‘applicazione stessa.
In un WAR file è possibile anche dichiarare la dipendenza dell‘applicazione da librerie esterne inserendo un file META-INF nella cartella WEB-INF. Questo consente un controllo in fase di deployment per verificare se tutti i jar richiesti sono presenti sul server.
Effettuare il deployment di un WAR file su Tomcat è molto semplice. Si può utilizzare la console amministrativa del Tomcat Manager accessibile dalla pagina home di Tomcat oppure si può copiare il file WAR nella cartella webapps e eseguire il restart del container.
Di seguito è raffigurata la pagina web del Tomcat Manager che con le funzioni contenute nella sezione –Deployâ? consente di effettuare l‘installazione di un file WAR [4].
Figura 1 – Il Tomcat Manager
Quando si esegue il deployment, Tomcat scompatta il WAR file , crea la cartella radice del contesto e tutte le cartelle sottostanti così come contenute nel WAR. A questo punto l‘applicazione è pronta per essere eseguita.
Installazione della nostra applicazione di esempio
Per consentire al lettore di provare il deploy di una applicazione , abbiamo realizzato una semplice applicazione web composta da due pagine JSP e da una servlet. La pagina JSP iniziale, hello.jsp, permette l‘immissione del proprio nome che sarà visualizzato sotto forma di saluto nella seconda pagina, saluto.jsp. La hello.jsp fa il submit ad una servlet che acquisisce dalla request il nome e lo inoltra alla pagina di saluto, il tutto utilizzando le conoscenze apprese nei primi due articoli della serie ed in [3].
Il WAR file dell‘applicazione è myapp.war e contiene tutti gli oggetti secondo la seguente struttura:
- ÃÂ Nella cartella radice ci sono le due pagine JSP hello.jsp e saluto.jsp
- ÃÂ Nella cartella WEB-INF/classes c‘è la classe HelloServlet.class contenuta nel package it.mokabyte.web
- ÃÂ Nella cartella WEB-INF/lib ci sono i JAR file jstl.jar e standard.jsr contenenti le classi della JSTL 1.1 [3]
- ÃÂ Nella cartella WEB-INF c‘è il file web.xml, il deployment descriptor dell‘applicazione
A questo punto con il WAR myapp.war a disposizione, utilizzando il Tomcat Manager (Figura 1) si può provare ad eseguire il deploy. Se tutto è andato a buon fine Tomcat darà un messaggio di corretta esecuzione dell‘applicazione. Supponendo di aver installato Tomcat sulla propria macchina sulla porta 8080, digitando nel browser l‘indirizzo:
http://localhost:8080/myapp
deve apparire la seguente pagina web mostrata in figura 2:
Figura 2 – La pagina hello.jsp
Inserendo un nome nella text-box come nell‘esempio della figura 2 verrà visualizzata la pagina di saluto di figura 3.
Figura 3 – La pagina saluto.jsp.
Conclusioni
In questo articolo abbiamo visto come eseguire il deploy di una applicazione web J2EE in un web container standard. Quanto visto vale per l‘applicazione di esempio volutamente molto semplice ma vale allo stesso modo per applicazioni reali molto più complesse. L‘obiettivo era di evidenziare gli aspetti riguardanti gli elementi standard di una web application e le modalità standard di deployment.
Riferimenti
[1] Bryan Basham – Kathy Sierra – Bert Bates. “Head First. Servlet & Jsp”, O‘Reilly, 2004
[2] Autori Vari, “The J2EE 1.4 Tutorial “, Sun Microsystems, 2003
[3] Alfredo Larotonda, “La JSTL. I parte: Scrivere JSP scriptless”, Mokabyte , dicembre 2004
[4] Apache Sofware Foundation, Apache Tomcat, http://tomcat.apache.org/
[5] Alfredo Larotonda, “Le applicazioni web e Java. II parte: le servlet”, Mokabyte 111, ottobre 2006