Introduzione
Apache Tomcat è un Servlet/JSP engine che non fa altro che contenere ed eseguire le applicazioni Java Servlet e Java Server Page (JSP).
Non è l'unico Application Server per Servlet/JSP in circolazione, ma di sicuro è libero ed è il contenitore di servlet utilizzato nell'implementazione ufficiale di riferimento per il Java Servlet e le tecnologie Java Server Page sviluppate dalla Sun Microsystems.
Questa guida servirà ad installare Apache Tomcat utilizzando i binari ufficiali prelevabili dal sito di Tomcat e non utilizzando i pacchetti precompilati di Ubuntu prelevabili dal repository Universe.
Il tutto per un duplice motivo:
i pacchetti di Ubuntu non sono sincronizzati con l'ultima release disponibile;
richiedono dipendenze, spesso eccessive e non necessariamente utili, come ad esempio l'installazione delle librerie ligcj e sue dipendenze, che risulterebbero ridondanti visto già la presenza, o che comunque andremo ad installare, di Java JRE e JDK della Sun.
Tomcat 6
Installazione di Tomcat.
Installazione
Attivare i repository Universe e Multiverse di Ubuntu. Per maggiori informazioni si consulti la pagina Repository.
Installare per prima cosa, se già non lo si è fatto, i pacchetti Java jre e jdk:
sudo apt-get install sun-java5-jre sun-java5-jdk
se invece si vuole installare l'ultimissima versione di Java, la 1.6:
sudo apt-get install sun-java6-jre sun-java6-jdk
Scaricare dal sito http://tomcat.apache.org/ l'ultima versione di Tomcat, la 6 al momento in cui sta scrivendo:
wget http://mirrors.publicshout.org/apache/tomcat/tomcat-6/v6.0.7/bin/apache-tomcat-6.0.7.tar.gz
Estrarre l'archivio:
tar xzfv apache-tomcat-6.0.7.tar.gz
Copiare in /usr/local la directory estratta e poi creare un link simbolico /usr/local/tomcat. Questo per un triplice motivo: praticità, manutenibilità e comodità. Se si desidera installare più versioni basterà cambiare il riferimento al link simbolico.
sudo cp -r apache-tomcat-6.0.7 /usr/local/ sudo ln -s /usr/local/apache-tomcat-6.0.7/ /usr/local/tomcat
Creare uno script per init.d per far si che il demone di Tomcat venga attivato all'avvio o comunque dia la possibilità di avviarlo, arrestarlo, riavviarlo:
crare il file /etc/init.d/tomcat con l'editor di testo preferito e copiare quanto segue:
# # Startup script for the Tomcat server # # chkconfig: - 83 53 # description: Starts and stops the Tomcat daemon. # processname: tomcat # pidfile: /var/run/tomcat.pid # See how we were called. case $1 in start) export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/ export CLASSPATH=/usr/local/tomcat/lib/servlet-api.jar export CLASSPATH=/usr/local/tomcat/lib/jsp-api.jar export JRE_HOME=/usr/lib/jvm/java-1.5.0-sun/ echo "Tomcat is started" sh /usr/local/tomcat/bin/startup.sh ;; stop) export JRE_HOME=/usr/lib/jvm/java-1.5.0-sun/ sh /usr/local/tomcat/bin/shutdown.sh echo "Tomcat is stopped" ;; restart) export JRE_HOME=/usr/lib/jvm/java-1.5.0-sun/ sh /usr/local/tomcat/bin/shutdown.sh echo "Tomcat is stopped" sh /usr/local/tomcat/bin/startup.sh echo "Tomcat is started" ;; *) echo "Usage: /etc/init.d/tomcat start|stop|restart" ;; esac exit 0
Diamogli i giusti permessi, rendiamolo eseguibile e registriamolo:
sudo chmod 755 /etc/init.d/tomcat sudo update-rc.d tomcat defaults
Avviamo Tomcat:
sudo /etc/init.d/tomcat start
A questo punto, se tutto è andato per il verso giusto, puntando all'indirizzo http://localhost:8080 si dovrebbe avere la pagina di benvenuto di Tomcat.
Apache e Tomcat
Tomcat è abbastanza performante per essere eseguito come Web Server di pagine statiche o dinamiche, o come Web Application Server. Tuttavia se si vogliono sfruttare anche le innumerevoli potenzialità di un vero e proprio Web Server come Apache, soprattutto se lo si usa in macchine in produzione, esiste un connector che permette di mettere in comunicazione Apache con Tomcat facendolo richiamare da Apache solo quando serve.
Installazione del jk connector
Si presume che abbia Apache2 già installato.
Installare il connector:
sudo apt-get install libapache2-mod-jk
Creare il file /etc/apache2/workers.properties con l'editor di testo preferito e copiare quanto segue:
workers.tomcat_home=/usr/local/tomcat workers.java_home=/usr/lib/jvm/java-1.5.0-sun ps=/ worker.list=ajp13 worker.ajp13.host=localhost worker.ajp13.port=8009 worker.ajp13.type=ajp13
Con port=8009 si intende la porta con la quale Tomcat ascolta il connector, non http che è 8080.
Modificare il file /etc/apache2/mods-available/jk.load e inserire, dopo la riga !LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so, quanto segue:
JkWorkersFile /etc/apache2/workers.properties JkLogFile /etc/apache2/mod_jk.log JkLogLevel debug #JkMount /servlets-examples/* ajp13 #da decommentare se si usa tomcat 5.x; JkMount /examples/* ajp13
Riavviare Apache:
sudo /etc/init.d/apache2 restart
Se tutto è andato per il verso giusto, puntando all'indirizzo http://localhost/examples, si dovrebbe vedere la pagina con i JSP e i Java Servlet d'esempio.
Osservazioni e approfondimenti
Connector: aggiungere altre directory web
In /etc/apache2/workers.properties la direttiva !JkMount non fa altro che redirigere a Tomcat tutte le richieste http precedute da /examples/ (per esempio http:/localhost/exampler/unesempio.jsb), in questo caso unesempio.jsp verrà processato da Tomcat invece che da Apache.
Dunque, se si vogliono aggiungere altre direcotory per richiamare le nostre applicazioni basta inserire altri !JkMount in /etc/apache2/mods-available/jk.load:
..... JkMount /examples/* ajp13 JkMount /<nomedirectory>/* ajp13
È importante osservare che <nomedirectory> deve essere contenuta all'interno della directory /usr/local/tomcat/webapps, questo perchè come avete potuto notare in /etc/apache2/workers.properties abbiamo settato il path della home di Tomcat in /usr/local/tomcat, dunque la direttiva !JkMount effettuerà la sua ricerca a partire da li.
Se invece vogliamo che le nostre applicazioni siano salvate e sviluppate in una directory nella nostra home, oppure nella root del nostro Web Server, basta creare un collegamento simbolico che dalla directory dichiarata in !JkMount punti a una directory o nella nostra home o nella root del Web Server o in qualsiasi posto noi volessimo salvare i nostri progetti Servlet/JSP.
Per esempio, se vogliamo che !JkMount /<nomedirectory>/ punti a /home/nomeutente/nostreapplicazioni/<nomedirectory>, procederemo come segue:
mkdir /home/nomeutente/nostreapplicazioni/<nomedirectory> sudo ln -s /home/nomeutente/nostreapplicazioni/<nomedirectory>/ /usr/local/tomcat/webapps/<nomedirectorydichiaratainJkMount> sudo /etc/init.d/apache2 restart sudo /etc/init.d/tomcat restart
Ora basterà inserire o creare le nostre applicazioni in /home/nomeutente/nostreapplicazioni/<nomedirectory> e puntando col nostro browser a http://localhost/<nomedirectorydichiaratainJkMount>/applicazione.jsp i nostri lavori verranno processati da Tomcat.
Amministrare Tomcat
Per amministrare Tomcat è necessario attivare Tomcat Manager. Per farlo basta seguire questi semplici passi:
Aprire il file /usr/share/tomcat/conf/tomcat-users.xml con l'edito di testo che preferiamo e aggiungiamo l'utente (o gli utenti) con i ruoli di admin e manager. Per creare i ruoli inseriamo tra i tag «<tomcat-users> ... </tomcat-users>»:
<role rolename="manager"/> <role rolename="admin"/>
mentre per creare l'utente con i ruoli di admin e manager, inseriamo:
<user username="YOUR USERNAME " password="YOUR PASSWORD" roles="admin,manager"/>
Se volessimo dare all'utente un unico ruolo, come admin, basta inserirne solo uno:
<user username="YOUR USERNAME " password="YOUR PASSWORD" roles="admin"/>
Connettiamoci all'indirizzo http://localhost:8080/manager/html e accediamo al pannello di controllo di Tomcat Manager con le credenziali appena create.
Per approfondimenti sulla creazioni di altri ruoli si rimanda alla documentazione ufficiale.
Tomcat 5.x
La procedura di installazione di Tomcat appena descritta vale per la versione 6, ma, per le versioni precendenti, il metodo e l'approccio non cambiano, basta avere l'accortezza di adeguare alcuni path nei file di configurazione, visto che le direcotory delle versioni precedenti sono organizzate e nominate diversamente dalla versione 6.
Ecco nel dettaglio come procedere:
Ridefinire il collegamento simbolico /usr/local/tomcat facendolo puntare a /usr/local/apache-tomcat-5.5.20 (o comunque alla versione scelta):
sudo ln -s /usr/local/apache-tomcat-5.5.20 /usr/local/tomcat
se non è una nuova installazione e avevate già definito il collegamento simbolico, prima di crearlo è necessario rimuoverlo:
sudo rm /usr/local/tomcat
Nel file /etc/init.d/tomcat modificare i CLASSPATH da:
export CLASSPATH=/usr/local/tomcat/lib/servlet-api.jar export CLASSPATH=/usr/local/tomcat/lib/jsp-api.jar
in:
export CLASSPATH=/usr/local/tomcat/conf/lib/servlet-api.jar export CLASSPATH=/usr/local/tomcat/conf/lib/jsp-api.jar
La differenza sta che lib/ nelle versioni precedenti è una sotto directory di conf/.
Nel file /etc/apache2/mods-available/jk.load sostituiamo:
JkMount /examples/* ajp13
con:
JkMount /servlets-examples/* ajp13
Questo perchè gli esempi non si trovano in examples/ come nella versione 6, ma in servlets-examples/.
Java JRE e JDK 1.6
Nel caso in cui avvessimo scelto di installare l'ultima versione della Java Virtual Machine e relativo JDK, basta sostiture in tutti i file di configurazione ogni occorrenza di:
/usr/lib/jvm/java-1.5.0-sun
con:
/usr/lib/jvm/java-6-sun
Installazione del pacchetto Ubuntu
Ad ogni modo se vogliamo installare le versioni precompilate per Ubuntu presenti nei repository Universe, indipendentemente dalle dipendenze che si tirerà dietro, basta semplicemente fare come segue:
Installiamo:
sudo apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps
Avviamo Tomcat:
sudo /etc/init.d/tomcat5 start
Connettiamoci al server usando la porta 8180 e non 8080 :
http://localhost:8180
Per configurare connector e Apache basta seguire quanto descritto in precedenza.