Nel panorama delle tecnologie per il web, soprattutto in ambito aziendale, ormai da qualche anno la tecnologia Java Servlet ha preso sempre maggiore importanza. In questo articolo vedremo come creare un ambiente di lavoro adatto per lo sviluppo di servlet tramite l’uso di Apache Tomcat..
Cos’è Apache Tomcat
Tomcat è un progetto nato nel 2001, inizialmente denominato Jakarta Tomcat, ma poi diventato indipendente con il nome di Apache Tomcat. Tomcat è essenzialmente un web server, come il più classico Apache. La particolarità è che si tratta di una application server ed è scritto interamente in Java. L’obiettivo del progetto è quello di fonire un ambiente per l’esecuzione di web applications scritte in Java. Tomcat implementa quindi le specifiche Java Servlet e Java Server Pages (JSP). In parole povere si può pensare a Tomcat come ad un contenitore di servlet java, e si pone come tramite tra il web e la nostra applicazione, fornendo tutte le funzionalità specifiche del web, quali la gestione delle sessioni, il passaggio di parametri Get e Post, la gestione degli header HTTP. Nel seguito faremo riferimento alla versione 5.5.x di Tomcat. Essa continua a essere sviluppata benchè sia presente anche la versione 6.x. La differenza è che la versione 6.x implementa le specifiche Java Servlet 2.5, mentre la versione 5.5.x è ferma alle specifiche 2.4.
Scaricare Tomcat
La versione 5.5.x è scaricabile in varie forme. E’ possibile scaricare anche i sorgenti, in quanto Tomcat è un progetto open source. Nel caso di Windows, per un ambiente di sviluppo e test consiglio di scaricare la versione senza installer. Tomcat rimarrà come applicazione stand-alone e una finestra del prompt DOS rimarrà sempre aperta durante l’esecuzione del server, permettendo di svolgere un debug più semplice, in quanto è possibile far stampare eventuali messaggi sullo standard output. In ogni caso dipende dai gusti. Il sito ufficiale da cui scaricare Tomcat è http://tomcat.apache.org.
Configurazione
Se avete scaricato la versione con installer eseguitelo e seguite le istruzioni. Se invece avete scaricato la versione stand alone dovete solamente scompattare il file e piazzare il contenuto in una directory a piacere. Provate ad avviare Tomcat tramite il file startup.bat. Se avete usato l’installer nella tray bar dovreste avere un icona di Tomcat. E’ il Tomcat manager che permette di avviare, stoppare e riavviare il server agevolmente. Se l’installer ha installato Tomcat come servizio esso dvrebbe essere già avviato.
Provate a digitare nel browser l’indirizzo http://localhost:8080. Dovreste vedere la pagina di benvenuto di Tomcat. Se non è così qualcosa è andato storto. Provate a ripetere le operazioni e a seguire il manuale ufficiale. Se la porta 8080 sulla macchina su cui lavorate è già occupata, Tomcat non riesce ad avviarsi. Seguite quindi subito i passi successivi per cambiare numero di porta.
Passiamo a configurare il server. All’interno della directory conf si trovano tutti i file di configurazione del server. Spiego i principali.
- server.xml. Contiene la configurazione principale del server. In questo file andremo a configurare alcuni parametri.
- web.xml. E’ il file di configurazione di default delle applicazioni gestite da Tomcat. Per ogni applicazione è possibile definire un proprio file web.xml, ma se questo non esiste allora Tomcat usa questo file.
Innanzitutto bisogna specificare dove metteremo le applicazioni web. Tomcat può gestire più applicazioni contemporaneamente. Di default esse sono tutte nella directory webapps, in sottodirectory denominate con il nome dell’applicazione. Se volete cambiare directory aprite il file server.xml e cercate il tag Host. Esso contiene l’attributo appBase. Modificate il valore di tale attributo in modo che punti alla directory in cui volete riporre tutte le applicazioni web che creerete. Il mio tag host appare così.
<Host name="localhost" appBase="D:Tomcat"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
Una volta modificata la cartella di lavoro di Tomcat non vi apparirà più la pagina di benveuto di Tomcat. E’ normale, dato che essa è memorizzata nella cartella di lavoro indicata di default.
Di default Tomcat è in ascolto sulla porta 8080, per evitare conflitti con altri web server eventualmente installati sulla macchina, come ad esempio Apache, che rimangono in ascolto sulla porta 80. Se volete cambiare il numero di porta cercate il tag Connector. Ne troverete almeno due. Considerate quello senza attributo protocol e con numero di porta (attributo port) impostato a 8080. Modificate il valore dell’attributo port con il numero di porta su cui volete che Tomcat accetti le connessioni. Se non avete altri web server potete mettere la porta 80:
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
Come potete vedere è possibile impostare altri parametri come il timeout per le connessioni, il numero masismo di connessioni contemporanee e il numero massimo di thread contemporanei. Io ho lascitao i valori di default. In ambiente di test questi valori non influiscono. In un ambiente reale potrebbero però cambiare di molto le prestazioni. La configurazione è terminata.
La struttura delle web applications in Tomcat
Tomcat può gestire le nostre applicazioni solo se esse sono organizzate in una struttura standard. Ogni applicazione ha un nome che deve corrispondere al nome della directory in cui i suoi file sono memorizzati. Quindi se creiamo una applicazione TestApp i suoi file devono risiedere nella directory TestApp all’interno della cartella di lavoro scelta.
La cartella TestApp deve avere alcune sottocartelle:
- WEB-INF. E’ la directory più importante. Conterrà tutte le classi dell’applicazione e il file web.xml di configurazione dell’applicazione.
- classes. Contiene tutte le classi servlet java compilate.
- lib. Contiene le librerie utilizzate dall’applicazione, sotto forma di file .jar.
- META-INF. E’ opzionale e contiene il file context.xml di configurazione del contesto dell’applicazione, ovvero dell’ambiente in cui l’applicazione opererà.
Tutte le pagine statiche e le altre cartelle di utilità, come ad esempio le directory delle immagini, possono essere inserite direttamente nella directory base, ovvero TestApp.
Il file context.xml
In ambiente di test è importante poter verificare subito il funzionamento della servlet che si ta programmando. Ogni volta che una servlet viene modificata e ricompilata è necessario riavviare Tomcat, in modo da permettere che ricarichi il contesto, ovvero tutte le classi dell’applicazione. Altrimenti le modifiche non saranno visibili. Ciò ovviamente abbastanza scomodo. Possiamo però creare il file context.xml nella directory META-INF con il contenuto seguente.
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true"></Context>
Esso specifica che Tomcat deve monitorare periodicamente le servlet compilate e ricaricare automaticamente il contesto se esiste una versione più recente. Così una volta ricompilata la servlet è sufficiente aspettare qualche secondo per vederne i risultati.
Il file web.xml
E’ il file fondamentale per la web application. Viene caricato all’avvio di Tomcat e contiene le indicazioni su quali sono le servlet dell’applicazione, e su come devono essere mappate rispetto all’url.
Ovvero, supponiamo di avere una classe TestServlet, che implementa un servlet. Nel file web.xml dovremo assegnargli un nome, impostare il suo percorso (quindi l’eventuale package in cui si trova), e definire l’url con cui dovrà essere raggiunta. Questa è una possibile configurazione:
<servlet>
<servlet-name>ServletDiTest</servlet-name>
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDiTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
In pratica si specifica che il nome scelto è ServletDiTest, che la classe si chiama TestServlet e si trova nel package servlet. L’url con la quale verrà raggiunto è /test.
Per ogni servlet bisognerà specificare queste informazioni nel file web.xml, quindi deve esistere una coppia di tag <servlet> e <servlet-mapping> per ogni servlet. Se ad esempio abbiamo anche il servlet TestServlet2, il file apparirà così:
<servlet>
<servlet-name>ServletDiTest</servlet-name>
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDiTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletDiTest2</servlet-name>
<servlet-class>servlet.TestServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDiTest2</servlet-name>
<url-pattern>/test2</url-pattern>
</servlet-mapping>
Verificare le configurazioni
Una volta modificati i parametri di configurazione è necessario riavviare Tomcat perchè questi vengano utilizzati. Infatti i file context.xml e web.xml vengono caricati solo all’avvio di Tomcat. Una volta riavviato Tomcat i due servlet di esempio TestServelt e TestServelt2 saranno raggiungibili tramite gli url http://localhost:8080/TestApp/TestServlet e http://localhost:8080/TestApp/TestServlet2.
Ovvero l’url di base dell’applicazione è http://localhost:8080/TestApp, sempre che abbiate scelto la porta 8080, altrimenti sarà del tipo http://localhost:numPorta/TestApp. Tramite configurazioni più avanzate è possibile impostare un’applicazione di default raggiungibile tramite http://localhost:numPorta, e anche ripristinare le applicazioni di gestione di Tomcat non piùraggiungibili dopo la modifica della directory di lavoro di Tomcat. Ma queste configurazione saranno approfondite prossimamente in un articolo a parte.