Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria – Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Web Server TOMCAT Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie e Applicazioni Web 1 Tomcat 3.3: Guida all’uso Cos’è Tomcat: Tomcat è un prodotto free e open source sviluppato in Java all’interno della fondazione Apache. Tomcat realizza le funzioni di: 1. Web server 2. Container per web application conforme alle specifiche Java 2 Enteprise Edition (J2EE). Il che significa che Tomcat funzione da motore per Servlet e Java Server Pages (JSP). Il fatto che Tomcat funga da web server fa sì che una volta connessi in Internet, il nostro computer pubblica le informazioni (risponde alle richieste http) esattamente come un qualsiasi altro nodo della rete e quindi il nostro sito potrebbe essere visitato da una browser su un computer remoto. Installazione: Preliminare 1: (installazione Java) Prima di installare Tomcat è fondamentale controllare che ci sia un ambiente di sviluppo Java (jdk1.3 o jdk1.4) installato nel computer. Nel caso Java non sia installato prima di tutto bisogna installare Java. 1. Andate alla pagina web: http://java.sun.com/j2se/1.3/download.html. Da qui andate su DOWNLOAD Windows(all languages) SDK. Premete il pulsante ACCEPT, quindi scaricate il file: j2sdk-1_3_1_05-windows-i586.exe 2. Eseguite il file appena scaricato per installare il jdk1.3 in una directory a vostra scelta. Ad esempio C:\Programmi\jdk1.3 oppure (scelta di default): c:\jdk1.3.1_05 Per poi sviluppare applicazioni in Java si consiglia di usare l’ambiente JCreator, di pubblico dominio. Nella installazione di JCreator vi verrà chiesto di specificare in quale direttorio si trova l’ambiente di sviluppo Java jdk che avrete installato. Preliminare 2: (Installazione Package Servlet) I packages necessari per compilare le Servlet non sono automaticamente inclusi nel jdk che si trova in rete. Ciò che e' necessario fare, quindi, e' installare esplicitamente la libreria di package delle servlet. Per fare ciò, scaricate da: http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.3.1/bin/ il file jakarta-servletapi.zip Quindi: 1. Estraete tutti i file da jakarta-servletapi.zip in una cartella a vostro piacere (mio consiglio: estraeteli dentro la cartella di jdk java...). Come al solito, fate in modo di preservare la M. Mamei - Tecnologie e Applicazioni Web 2 struttura delle cartelle durante l'estrazione. Quello che vi dovreste trovare e' una cartella: c:\jdk1.3.1_05\jakarta-servletapi\ con dentro altre sottocartelle e in particolare la sottocartella lib. 2. A questo punto, dovete fare in modo che il CLASSPATH di java sia in grado di trovare anche i nuovi package che avete installato, e in particolare il package compresso servlet.jar che si troverà nella cartella: c:\jdk1.3.1_01\jakarta-servletapi\lib\ Per fare ciò con JCreator, per esempio, dovete: andare nel menu Configure-->Options;- selezionare la voce JDKProfiles; fare l'edit del vostro profile jdk; fare "add --> package"; selezionare il file "servlet.jar" che si troverà, per esempio, dentro alla cartella: c:\jdk1.3.1_01\jakartaservletapi\lib Fatto ciò sarà possibile compilare le Servlet importando gli opportuni package nei nostri file java.... Installare Tomcat: 1. Scaricate il file jakarta-tomcat-3.3.1.zip (4.7MB) dal sito: http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.3.1/bin/ Poiché questo indirizzo potrebbe cambiare nel corso dei mesi, andare eventualmente sulla home page di Apache e da lì cercare TomCat Jakarta e poi i link per il download dei file binari. 2. Eseguite l’unzip del file scaricato in una directory qualsiasi ad esempio in C:\Programmi\ In questo modo nella directory scelta compare la seguente sotto-directory: C:\Programmi\jakarta-tomcat-3.3.1 (attenzione però: perché questo succeda dovete controllare che WinZIP, o il programma di compressione che state usando, faccia in modo di preservare i nomi delle cartelle durante l’estrazione, e estragga così i file creando le apposite cartelle e sottocartelle di Tomcat) 3. A questo punto bisogna impostare una variabile d’ambiente JAVA_HOME alla directory dove è stata installato il jdk. Questo serve per fare capire al server TOMCAT in quale directory è installato Java. (Supponiamo per esempio che il vostro jdk Java sia installato in C:\Programmi\jdk1.3). 3.1. Se avete Windows 95, 98, o Me Aprire il file autoexec.bat in C: aggiungere la riga set JAVA_HOME=C:\Programmi\jdk1.3 3.2. Se avete Windows NT – 2000 – XP Aprire il pannello di controllo, quindi selezionare l’icona sistema, quindi la sezione avanzate e il pulsante variabili d’ambiente. Nella sezione variabili di sistema aggiungere una variabile con nome JAVA_HOME e valore C:\Programmi\jdk1.3 4. Riavviare il computer per rendere effettiva la nuova variabile d’ambiente. Lanciare Tomcat: 1. Aprire una finestra DOS (prompt dei comandi) e andare nella directory dove è stato installato Tomcat, ad esempio: C:\Programmi\jakarta-tomcat-3.3.1 M. Mamei - Tecnologie e Applicazioni Web 3 2. 3. 4. Entrare dentro la sotto-directory bin Eseguire il file startup.bat Si apre un’altra finestra con circa il seguente display: NOTA BENE: lanciare il file startup.bat facendo doppio click da una finestra Windows potrebbe non funzionare, il server potrebbe non partire!!! NOTA BENE: per disattivare il server non limitarsi a chiudere la finestra, ma eseguire il comando shutdown.bat Controllare che tutto vada bene: 1. 2. 3. Lanciare il browser e andare su http://localhost:8080 (oppure, se così non dovesse funzionare, provate http://127.0.01:8080 Dovrebbe comparire la seguente pagina web. Questa pagina è fornita dal vostro computer che tramite Tomcat svolge la funzione di web server!! Seguite un po’ di Link per verificare che tutto vada bene e in particolare verificate il funzionamento sia di una Servlet (seguendo il link Servlet Examples) sia di una JSP (seguendo il link JSP Examples). M. Mamei - Tecnologie e Applicazioni Web 4 4. A questo punto potete spegnere Tomcat sia chiudendo la finestra DOS mostrata precedentemente, sia eseguendo il file shutdown.bat da C:\Programmi\jakarta-tomcat3.3.1\bin Lavorare con Tomcat; le Web Applications: Per iniziare a lavorare con Tomcat è opportuno spiegare il concetto di web application. Quando si crea un sito web con molte pagine è importante mantenere una buona organizzazione della struttura dei file che realizzano il sito, altrimenti il sito diventa di difficile aggiornamento e manutenzione. Per agevolare questa manutenzione, seguendo le specifiche Java 2 Enterprise Edition (J2EE) implementate da Tomcat, un sito viene suddiviso in diverse web application che rappresentano una serie di risorse (pagine html, immagini, servlet, jsp, fogli di stile, programmi di script, etc.) concettualmente correlate. Tomcat implementa questa suddivisone attraverso il suo sistema di directory. All’interno della directory di installazione di Tomcat c’e’ la directory webapps che contiene tutte le web application che realizzano il sito. Dentro questa directory ce ne sono altre ognuna delle quali realizza una web application. Tomcat consente di aggiungere dinamicamente web application senza interrompere il web server.Questo permette di offrire un servizio continuo 24by7 nonostante aggiornamenti e modifiche. Per noi si traduce nel fatto che possiamo realizzare tutte gli esempi con Tomcat acceso e non dobbiamo riavviare Tomcat ad ogni modifica. Quindi ogni applicazione web che faremo sarà contenuta in una cartella all’interno di webapps. La struttura standard di una cartella che realizza una web application che indicheremo come application1 è la seguente: application1/ Questa cartella contiene i file che compongono la parte statica del sito (pagine html, xml, fogli di stile, immagini, etc.). Da notare che intendiamo statica lato server. In questa cartella possono essere contenute pagine di script lato client e applet. application1/WEB-INF Questa cartella contiene il file di configurazione della web application che si chiama web.xml. Alcune funzionalità del file di configurazione vengono dettagliate in seguito. application1/WEB-INF/classes Questa cartella contiene i file .class di eventuali servlet che fanno parte della web application. Nota: un file .war (web archive) altro non è che il contenuto di una web application zippata e rinominata da .zip a .war. All’avvio, Tomcat esegue il deploy automatico dei file .war presenti nella cartella webapps. I file vengono scompattati e avviati come applicazioni web. M. Mamei - Tecnologie e Applicazioni Web 5 Esempio 1 - HTML Iniziamo con il creare la home page del sito. Cancelliamo innanzitutto tutto il contenuto di webapps fornito di default con Tomcat, e ricreiamo all’interno di webapps una directory ROOT che rappresenta la web application di base del nostro sito. Creiamo un file html, ad esempio: <html> <body> Hello World! </body> </html> e lo salviamo dentro ROOT come index.html (non è un nome casuale!! Tomcat è configurato per considerare i file index come quelli da mandare di default in risposta a una domanda). Un primo sguardo ai file di configurazione di Tomcat Anche se non strettamente necessario in questa prima fase, conviene guardare i file di configurazione di Tomcat. Questi sono contenuti nella cartella conf di Tomcat. In particolare qui focalizziamo l’attenzione sui file che si chiamano apps-*.xml ce ne possono essere più d’uno. Questi file sono essenziali perché stabiliscono quale web application associare a un determinato url. In generale può convenire cancellare tutti i file apps-*.xml presenti e crearne uno nostro unificato. Chiamiamolo apps-all.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <webapps> <Context path="" docBase="webapps/ROOT" /> </webapps> Questo file dice fondamentalmente che l’url specificato nell’attributo path è gestito dalla web application specificata dall’attributo docBase. In questo caso si stabilisce che l’url http://localhost:8080 è mappato nella web application ROOT. Se creiamo un seconda web application, ad esempio Prova1. Potremmo cambiare il file appsall.xml come segue <?xml version="1.0" encoding="ISO-8859-1"?> <webapps> <Context path="" docBase="webapps/ROOT" /> <Context path="/WebApp1" docBase="webapps/Prova1" /> </webapps> Per mappare che l’url http://localhost:8080/WabApp1 nella web application Prova1. M. Mamei - Tecnologie e Applicazioni Web 6 Nota: Per visualizzare correttamente gli esempi può essere necessario cancellare la cache del browser che potrebbe mantenere le pagine corrispondenti all’installazione originale appena visualizzate. Esempio 2 - Servlet Creiamo una nuova web application (directory) ServletEsempio. Innanzitutto utilizzando java creiamo la seguente servlet ottenendo il file HelloWorldExample.class Nota: anche se non è certo obbligatorio, è meglio non inserire le Servlet in package java. Questo semplifica il modo in cui le server vengono inserite nelle directory del web-server. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } Le specifiche J2EE seguite da Tomcat, prevedono che le classi java delle Servlet vadano nella cartella WEB-INF\classes all’interno della web application. Quindi nel nostro esempio avremo: webapps\ServletEsempio\WEB-INF\classes\HelloWorldExample.class A questo punto sono necessarie due passi importanti. Come abbiamo fatto nel primo esempio, dobbiamo aggiungere la nuova web application al file di configurazione apps-all.xml nella cartella conf. <Context path="/ServEsempio" docBase="webapps/ServletEsempio" /> Inoltre dobbiamo creare il file web.xml all’interno della cartella WEB-INF di questa web application nel modo seguente. <?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> <servlet> <servlet-name>servlet1</servlet-name> <servlet-class>HelloWorldExample</servlet-class> </servlet> M. Mamei - Tecnologie e Applicazioni Web 7 <servlet-mapping> <servlet-name>servlet1</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> Questo file associa il nome servlet1 alla servlet realizzata dalla classe HelloWorldExample.class (questa cosa viene trattata tra i tag servlet). Inoltre associa l’url /hello alla servlet di nome servlet1. (questa cosa viene trattata tra i tag servlet-mapping). Tutto questo fa si che il web server colleghi la servlet all’url completo: http://localhost:8080/ServEsempio/hello In alternativa la servlet è raggiungibile anche tramite: http://localhost:8080/ServEsempio/servlet/HelloWorldExample O mettendo un link sulla pagina iniziale del tipo: <A HREF=”ServEsempio/hello”>run the servlet</A> oppure <A HREF=”ServEsempio/servlet/HelloWorldExample”>run the servlet</A> Dal punto di vista dell’uso di Tomcat estendere questo esempio con pagine web più complicate che richiedono servlet con più classi, o integrare in una unica web application pagine HTML (o XML) e servlet non cambia niente. Configurazioni Opzionali Tomcat prevede numerosi file per configurare il web server. Ad esempio, ci sono i file relativi alle politiche di sicurezza per l’accesso al sito, per ridefinire gli URL con cui si accede alle pagine del sito, per stabilire su quali porte Tomcat risponde alla comunicazione, etc. I file di configurazione relativi all’intero web server sono dentro la directory conf sotto all’installazione di Tomcat, i file relativi alla configurazione delle singole web application sono nel file web.xml nella cartella WEB-INF all’interno delle web application. La documentazione relativa a questi file non è trattata in questa guida all’uso, ma può essere reperita al sito http://jakarta.apache.org/tomcat/tomcat-3.3-doc/index.html Nel seguito diamo solo una sola operazioni comune: Modificare la porta http: Tomcat è configurato di default per rispondere alle chiamate http sulla porta 8080. Questa impostazione può essere modificata, modificando la riga: M. Mamei - Tecnologie e Applicazioni Web 8 <Http10Connector port="8080" secure="false" maxThreads="100" maxSpareThreads="50" minSpareThreads="10" /> nel file server.xml della directory conf. Un’operazione tipica è quella di settare la porta ad 80 (quella usata di default dai browser) in modo da poter accedere al sito con: http://localhost Nota: un modo molto comodo di imparare a gestire i file di configurazione di Tomcat è quello di sfruttare gli esempi già disponibili. In particolare per tutto quello che riguarda le impostazioni di sicurezza (ad esempio, l’accesso a determinate web application sottoposto a username e password) è utile dare un’occhiata e cercare di “adattare” i file nella web application admin contenuto in Tomcat. M. Mamei - Tecnologie e Applicazioni Web 9