Installiamo e configuriamo Apache Tomcat 7

Installiamo e configuriamo Apache Tomcat 7

In questo post vedremo come installare e configurare l'Application Server Tomcat in versione 7 (l'ultima disponibile nel momento in cui scriviamo). Apache Tomcat (o semplicemente Tomcat) è un web container open source sviluppato dalla Apache Software Foundation. Implementa le specifiche JavaServer Pages (JSP) e Servlet di Sun Microsystems (ora Oracle :( ), fornendo quindi una piattaforma per l'esecuzione di applicazioni Web sviluppate nel linguaggio Java. La sua distribuzionestandard include anche le funzionalità di web server tradizionale, che corrispondono al prodotto Apache. In passato, Tomcat era gestito nel contesto del Jakarta Project, ed era pertanto identificato con il nome di Jakarta Tomcat; attualmente è oggetto di un progetto indipendente. Tomcat è rilasciato sotto la Apache license, ed è scritto interamente in Java; può quindi essere eseguito su qualsiasi architettura su cui sia installata una JVM.

Apache Commons: componenti riusabili per Java
Tutorial Apache POI: scriviamo e leggiamo un documento Word
Integrazione di Apache Tomcat su Apache HTTP Server

In questo post vedremo come installare e configurare l’Application Server Tomcat in versione 7 (l’ultima disponibile nel momento in cui scriviamo).

Apache Tomcat (o semplicemente Tomcat) è un web container open source sviluppato dalla Apache Software Foundation. Implementa le specifiche JavaServer Pages (JSP) e Servlet di Sun Microsystems (ora Oracle 🙁 ), fornendo quindi una piattaforma per l’esecuzione di applicazioni Web sviluppate nel linguaggio Java. La sua distribuzionestandard include anche le funzionalità di web server tradizionale, che corrispondono al prodotto Apache Server.

In passato, Tomcat era gestito nel contesto del Jakarta Project, ed era pertanto identificato con il nome di Jakarta Tomcat; attualmente è oggetto di un progetto indipendente.

Tomcat è rilasciato sotto la Apache license, ed è scritto interamente in Java; può quindi essere eseguito su qualsiasi architettura su cui sia installata una JVM.

Le maggiori novità apportate nella release 7 sono:

  • supporto alla specifica 3.0 delle Servlet;
  • supporto alle Annotation;
  • supporto alla specifica 2.2 delle JSP;
  • supporto alla specifica 2.2 di EL (Expression Language);
  • maggiore facilità nell’inglobare Tomcat in altri Application Server quali JBoss;
  • Memory leak detection e prevention;
  • utilizzo di nonce per prevenire gli attacchi di tipo cross-site request forgery (CSRF);
  • Asynchronous logging.

Possiamo scaricare il pacchetto contenente l’Application Server andando all’indirizzo http://tomcat.apache.org/download-70.cgi; qui potremo scegliere tra i vari formati di distribuzione zip o tar.gz, la versione a 32 o 64 bit e, nel caso di installazione su Windows, possiamo scaricare il pacchetto .zip contenente gli eseguibili per avviarlo e  per attivarlo come servizio di Windows oppure il pacchetto auto-installante .exe.

In particolare abbiamo le seguenti opzioni di download:

  • apache-tomcat-[version].zip o .tar.gz: la distribuzione base. Queste distribuzioni non includono il Windows service wrapper nè la libreria compilata APR/native per Windows;
  • apache-tomcat-[version].exe: 32-bit/64-bit Windows installer per Tomcat. Questa distribuzione è ideale per gli utenti che intendono lanciare Tomcat utilizzando uno shortcut Windows o tramite i Servizi di Windows;
  • apache-tomcat-[version]-windows-x86.zip: distribuzione specifica per 32-bit Windows, che include il Windows service wrapper e la libreria compilata APR/native per l’uilizzo su Windows (sia a 32 che 64 bit) con JVM a 32-bit;
  • apache-tomcat-[version]-windows-x64.zip: distribuzione specifica per Windows 64-bit, che include il Windows service wrapper e la libreria compilata APR/native per l’uilizzo su Windowsx64 con JVM a 64-bit;
  • apache-tomcat-[version]-deployer.zip o .tar.gz: l’applicazione standalone Tomcat Web Application Deployer;
  • apache-tomcat-[version]-fulldocs.tar.gz: il bundle di documentazione per tomcat,con tutti i javadocs.

Una volta installato Tomcat (per le versioni .zip e .tar.gz basta scompattare il pacchetto in una directory qualsiasi), possiamo lanciarlo andando nella cartella /bin e lanciando lo script startup (.bat per Windows e .sh per Linux).

A questo punto all’indirizzo http://localhost:8080/ otterremo la pagina di benvenuto di Tomcat:

La pagina di Benvenuto di Tomcat 7

Per poter effettuare il deploy di un’applicazione Java in formato .war, ci sono due alternative:

  • posizionare il file .war nella cartella /webapps dell’installazione di Tomcat, essa verrà automaticamente scompattata in una cartella con lo stesso nome del file .war e anche il context root avrà il nome del file .war;
  • accedere al Tomcat Web Application Manager all’indirizzo http://localhost:8080/manager/html/ (per farlo dobbiamo attivare il ruolo manager, vedi sotto), ed effettuare il deploy dell’applicazione dal pannello Deploy.

Di default la pagina status e il Tomcat Web Application Manager (web console) sono disabilitate, per abilitarle bisogna intervenire sul file tomcat-users.xml nella cartella /conf ed aggiungere un utente con ruolo manager.

In Tomcat 6 bastava aggiungere un utente con ruolo manager, ora in Tomcat 7 tale ruolo è stato suddiviso in altri 4 ruoli. Ciò consente una assegnazione dei ruoli e delle relative funzionalità agli utenti in maniera più fine, ad esempio prima un utente manager poteva accedere sia alla pagina status, che consente  di vedere le informazioni sul Server installato e la JVM, che alla lista delle applicazioni e alla web console con cui fare il deploy delle stesse, adesso tali ruoli sono distinti. I quattro ruoli previsti sono:

La sintassi XML per l’assegnazione di un ruolo ad un utente è la seguente:

<user username="username" password="password" roles="ruolo1, ruolo2"/>

possiamo dunque aggiungere più di un ruolo separandoli con una virgola.

Il file tomcat-users.xml risulterà di questa forma:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<user username="admin" password="admin" roles="manager-gui,manager-jmx"/>
<user username="user" password="user" roles="manager-status"/>
</tomcat-users>

abbiamo dunque aggiunto due utenti con due ruoli diversi sempre all’interno della “famiglia” manager. Per cambiare invece la porta su cui risponde Tomcat, dobbiamo modificare il file server.xml nella cartella /conf e trovare la definizione del Connector con protocollo HTTP:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

a questo punto basta cambiare il numero riferito a port (8080 di default) nel numero di porta che desideriamo. Salviamo il file e riavviamo per apportare le modifiche. Vediamo ora come poter cambiare la cartella dove viene fatto il deploy e vengono eseguite le jsp: per farlo bisogna agire sul file server.xmldi Tomcat, dove si trova  la direttiva:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

basta cambiare webapps con C://nomepath//nomecartella( in Windows bisogna  specificare i doppi forward slash per ogni livello di directory):

<Host name="localhost" appBase="C://nomepath//nomecartella" unpackWARs="true" autoDeploy="true">

l’opzione unpackWARs=true significa che ogni file .war che inseriamo in questa directory verrà scompattato mentre l’autoDeploy=true farà in modo che di un .war ne venga fatto il deploy appena lo inseriamo nella directory.

Per approfondire:

COMMENTS

WORDPRESS: 17
  • comment-avatar
    vittorio 12 anni ago

    Ciao, ho un problema con lo sviluppo di un sito web dinamico.
    Sul mio pc con winXP ho installato mysql-essenzial-5.0.51, php-5.2.17, apache-2.2.18, phpMyAdmin-3.3.10 e Tomcat-7.0.12.
    In fase di installazione è andato tutto bene. Anche in fase di configurazione, in particolare di Php e Apache tutto ok. I problemi mi si presentano con Tomcat.
    Devo creare un sito dinamico in locale che sfrutti anche le pagine jsp.
    Quindi ho bisogno di mettere tutto (sia file .php che file .jsp) in un’inica cartella che possa essere raggiunta sia da Apache che da Tomcat. Per Apache ho creato una cartella all’interno di “C:” e, cambiando il file di configurazione di Apache, riesco a raggiungerla facilmente ed a far eseguire ed interpretare correttamente i miei codici. Ma quando richiedo delle pagine .jsp queste non sono per nulla interpretate, e viene tradotto solo il codice HTML della pagina stessa.
    Ho provato a cambiare il file di configurazione di Tomcat senza alcun risultato. Quindi vengo alla mia domanda:
    come posso far lavorare insieme Apache e Tomcat sulla stessa cartella?
    Spero di essere stato chiaro e, soprattutto spero che mi possiate aiutare a risolvere il problema.
    Grazie in anticipo.
    Vittorio

  • comment-avatar

    Ciao, un metodo molto semplice per far “comunicare” Apache con Tomcat è utilizzare un proxy di tipo reverse sfruttando il modulo mod_proxy (http://httpd.apache.org/docs/2.0/mod/mod_proxy.html) di Apache Http Server.
    All’interno dell’ httpd.conf di Apache Http Server abilita i due moduli mod_proxy.so e mod_proxy_http.so:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    (usiamo un proxy http, ma si può utilizzare anche quello ajp), inserisci poi in fondo al file questa direttiva:

    < Location /esempi/>
    ProxyPass http://localhost:9090/examples/
    ProxyPassReverse http://localhost:9090/examples/
    < / Location>

    Salva il file e riavvia Apache HTTP.
    La direttiva dice che se viene richiesta l’URL /esempi/ ( o meglio localhost/esempi/ se il server gira su porta 80) gira la richiesta a Tomcat che nel mio caso gira su porta 9090 e ha delle jsp nella cartella examples (a sua volta contenuta nella cartella webapps).
    Puoi usare in alternativa la direttiva per il protocollo AJP:
    < Location /esempi/>
    ProxyPass ajp://localhost:8009/examples/
    < /Location>
    dove il numero di porta è 8009 di default.
    Fammi sapere se funziona

    ciao e grazie per aver letto il mio post 🙂

    • comment-avatar
      vittorio 12 anni ago

      Ciao,
      ti ringrazio per la pronta risposta. Non ho ancora testato il tuo suggerimento perchè sono al lavoro e non ho modo di fare le prove.
      Leggendo attentamente quello che scrivi però mi sovviene un dubbio.
      Nel mio caso la cartella “esempi” dovrebbe corrispondere alla mia “www” che si trova in “C:/”; mentre la cartella “examples” dovrebbe essere contenuta nella cartella “webapps”. Ora, il mio sito dovrebbe essere tutto contenuto nella cartella “www” o in “examples”?
      Non vorrei dover salvare le pagine .php in “C:/www” e le pagine .jsp in “webapps”; ho necessità di slavare tutto in “C:/www” e far riconoscere anche il codice jsp dei file contenuti in questa cartella.
      Scusami se ti tedio ancora, ma è la prima volta che mi accingo a fare un progetto come questo e ho un pò di difficoltà nel gestire decentemente tutte le applicazioni necessarie.
      Ancora grazie per la disponibilità.
      Vittorio

  • comment-avatar

    Allora esempi non è una cartella fisica è la porzione di URL che ti mappa la risorsa, in questo caso la cartella examples (in altre parole digiti esempi e vieni reindirizzato su examples), puoi mettere qualsiasi altro nome l’importante è che il reindirizzamento sia corretto (punti ad una cartella fisica).
    Per cambiare la cartella dove vengono eseguite le jsp, bisogna agire sul file server.xml di Tomcat, troverai la direttiva:

    < Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

    basta cambiare webapps con C://www (ricorda che in Windows devi specificare i doppi forward slash per ogni livello di directory):
    < Host name="localhost" appBase="c://www" unpackWARs="true" autoDeploy="true">

  • comment-avatar
    alfredo 12 anni ago

    ciao,
    complimenti per l’ottima guida.
    ho seguito alla lettere ciò che hai scritto, ma quando accedo alla pagina http://localhost:8080/ ottengo una pagina di errore di questo tipo:

    “Impossibile visualizzare la pagina Web
    Le cause del problema possono essere diverse, ad esempio:
    •La connessione a Internet è stata interrotta.
    •Il sito Web non è attualmente disponibile.
    •Il DNS (Domain Name Server) non è raggiungibile.
    •Il DNS (Domain Name Server) non dispone di un elenco per il dominio del sito Web.
    •È possibile che nell’indirizzo sia presente un errore di digitazione.
    •Se si tratta di un indirizzo HTTPS (sicuro), scegliere Opzioni Internet dal menu Strumenti, fare clic su Avanzate e verificare che i protocolli SSL e TLS siano abilitati nella sezione Sicurezza.”

    premetto che utilizzo windows 7 e ho già verificato che il servizio di Tomcat è regolarmente avviato.
    non utilizzo firewall.

    quale potrebbe essere il problema?

    grazie e complimenti ancora

  • comment-avatar

    forse hai qualche altro servizio Windows che è in ascolto su quella porta, prova a dare il comando netstat -o da una consolle di Win e verificare se ci sono delle connessioni attive su quella porta (8080).

  • comment-avatar
    Pierpaolo 11 anni ago

    non riesco a far andare il manager (tomcat 7.0.25, sotto win xp 64 bit)
    mi da errore 404, ma la cartella esiste, e gli user anche.
    dove sbaglio?
    il server funziona perché ho un’applicazione installata e funziona bene.
    ho creato manager.xml dentro catalina\localhost, ma nei log di tomcat mi dice che il docbase viene ignorato!!

  • comment-avatar

    ciao complimenti per la guida,
    io ho un problema, ho installato tomcat, il 7 però su ubuntu, e quando vado alla pagina del localhost trovo la pagina it works e non quella che fai vedere te nella immagine, presumendo che non sia cmq quesot il problema se io clicco una qualunque delle opzioni della pagina mi da errore 404 e non mi trova ne le webapp ne i doc, niente di niente:( pensando che il problema fosse la ocnfigurazione delle password sono andato file user-tomcat per editarlo ma mi dice che non posso perhcè non ho i permessi, hai idea del perchè? ti ringrazio ciao

    • comment-avatar

      Ciao e grazie per i complimenti, quasi sicuramente su ubuntu hai installato (o è preinstallato) apache Server e quella che vedi è la Home Page di Apache e non di Tomcat, prova a vedere sulla porta 8080 del localhost.

  • comment-avatar
    roberto 10 anni ago

    ciao ti ringrazio per la guida, è stata utilissima.
    vorrei però fare una domanda:

    ho implementato un’applicazione web in cui vi è l’utente (il client) che digita un login in una form html. la pagina html richiama la servlet per controllare su un file.txt l’utenza…etc..

    il problema è che la sevlet non riesce a trovare il file. (FileNotFound Exception). ho capito che non riesco ad identificare la cartella in cui si trova il file.txt. Io ho inserito il file in “c:\desktop\tomcat\webapps\myapplicazioneweb\WEB-inf\file.txt”

    ma non riesco a capire nella mia applicazione quale percorso inserire.
    ad esempio ho provato con “http:\\localhost:8080\webapps\myapplicazioneweb\WEB-inf\file.txt” ma non trova il file.

    grazie

  • comment-avatar
    andrea valle 9 anni ago

    Ciao, ho dovuto installare tomcat7 in manuale, funziona tutto, ma il processo gira come root, potresti dirmi come evitare di usare l’utente root per questioni di sicurezza ovviamente, grazie

  • comment-avatar
    Stefano 9 anni ago

    Ciao ho lo stesso problema di Alfredo. Mi spiego:

    dopo aver eseguito con successo il comando startup dalla cartella bin di apache, provo ad aprire la pagina http://localhost:8080 senza successo. Ho anche eseguito il comando netstat -o per vedere se la porta 8080 è occupata. Ed in effetti lo è, nel senso che il pc sul quale ho bisogno di installare tomcat è connesso ad internet attraverso un proxy che utilizza la porta 8080. Come devo procedere in questo caso?

  • comment-avatar

    Buon giorno,
    ho letto la guida piuttosto esauriente negli argomenti trattati, purtroppo manca invece la parte relativa a dove fare la configurazione per utilizzare un database nelle webapps, argomento che ho trovato ostico su parecchi forum e siti internet, se conoscessi anche come fare questa configurazione e lo aggiungessi a questa guida penso che risolveresti non pochi problemi a un mare di utenti, che come me continuano a sbatterci la testa contro. Io mi trovo bene usando db sql server express della microsoft anche per lavoro, da poco mi sono messo a scivere pagine jsp su tomcat, ma senza riuscire a collegare i due sono davanti a un grosso limite, meglio passare al php? E le mie conoscenze pregresse nel mio tanto caro java sono alla fine?
    Grazie, spero che saprai spendere un po’ di tempo per aiutarmi/ci, saluti.

    • comment-avatar

      Ciao Yuri,
      innanzitutto grazie per aver letto l’articolo e per il tuo suggerimento;
      nei prossimi giorni proverò a scrivere un articolo sull’accesso ad un database MySql o PostgreSql (li preferisco perché sono Open Source), ma la procedura è molto simile per Microsoft SQL Server, basta cambiare il driver JDBC, da una Web Application deployata su Tomcat e scritta in JSP o JSF.

      Grazie

  • comment-avatar

    Procedimento e spiegazione ben fatta, grazie!

  • comment-avatar

    Complimenti per l’ottima guida! Passo dopo passo si riesce a configurare Tomcat tranquillamente

  • comment-avatar

    Riprovo, devo aver saltato qualche passaggio…