Comme Java vient installé avec MacOSX, installer Tomcat reste assez simple (quoique un peu plus compliqué que sous Windows). Il faut télécharger le paquetage de Tomcat sur le site officiel. Au moment d'écrire cet aide, il s'agissait de la version 6.0.18 et le fichier se nomme apache-tomcat-6.0.18.tar.gz
. Bien sûr, cela peut changer.
Une fois téléchargé, il faut décompresser les fichier à un bon endroit, tout comme dans /usr/local
. Pour copier les fichier à cet endroit, il faut avoir les privilèges administrateurs avec la commande sudo
.
mbp:~ stephane$ sudo sh Password: sh-3.2# mv apache-tomcat-6.0.18.tar.gz /usr/local/ sh-3.2# cd /usr/local/ sh-3.2# gnutar -xzvf apache-tomcat-6.0.18.tar.gz
Optionellement, en étant dans /usr/local
, on peut créer un lien symbolique vers Tomcat, de cette façon, on pourra faire référence à tomcat
au lieu de apache-tomcat-6.0.18
.
sudo ln -s apache-tomcat-6.0.18 tomcat
Tomcat est maintenant installé dans le répertoire /usr/local/apache-tomcat-6.0.18/
. Il reste tout de même quelques changements à faire. Il est préférable de changer le propriétaires des fichiers. Changer owner
et group
par les informations appropriés.
sh-3.2# chown -R owner:group /usr/local/apache-tomcat-6.0.18
owner
et group
par des valeurs appropriées.
Dans un répertoire quelconque (ex : ~/bin
), créer deux fichiers. Un pour démarrer, nommé start_tomcat
et l'autre stop_tomcat
. Les deux fichiers sont quasi identiques, c'est seulement la quatrième ligne qui change.
#!/bin/sh export CATALINA_HOME=/usr/local/apache-tomcat-6.0.18 export JAVA_HOME=/usr $CATALINA_HOME/bin/startup.sh
#!/bin/sh export CATALINA_HOME=/usr/local/apache-tomcat-6.0.18 export JAVA_HOME=/usr $CATALINA_HOME/bin/shutdown.sh
Changer le mode des fichiers pour les rendre exécutables :
chmod ug+x start_tomcat stop_tomcat
S'il faut prévoir un utilisateur qui agira en tant que gestionnaire, il faut l'ajouter dans le fichier /usr/local/apache-tomcat-6.0.18/conf/tomcat-users.xml
. Dans cet exemple, un utilisateur stef
avec le mot de passe stef
et le rôle manager
a été ajouté.
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="manager"/> <user username="stef" password="stef" roles="manager"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="role1" password="tomcat" roles="role1"/> <user username="both" password="tomcat" roles="tomcat,role1"/> </tomcat-users>
Et finalement, démarrer le service de Tomcat. Il faudra exécuter stop_tomcat
pour arrêter.
~/bin/start_tomcat
Pour vérifier que tout est fonctionnel, il faut aller à la page http://localhost:8080/. Si la page par défaut de Tomcat apparaît, l'installation a réussi.
Les fichiers de configuration de Tomcat se trouvent dans le répertoire /usr/local/apache-tomcat-5.5.27/conf/
et le plus intéressant est server.xml
où l'on peut changer le port HTTP du serveur. Par défaut il est à 8080.
Autre fichier intéressant, tomcat-users.xml
qui donne les informations utilisateurs. Il est possible d'en ajouter d'autres en insérant une ligne supplémentaire.
<user username="stef" password="L9_s0x9-iDè" roles="manager"/>
/usr/local/tomcat/webapps
, exemple test
.javax.servlet.*
et la compiler.web.xml
dans le répertoire WEB-INF
de l'application.
Créer un fichier Java dans WEB-INF/classes
qui implémente javax.servlet.*
. Dans ce cas, TestServlet.java
.
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet 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("<head>"); out.println("<title>Bonjour Monde !</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Bonjour Monde avec une simple servlet !</h1>"); out.println("</body>"); out.println("</html>"); } }
Compiler le fichier Java. Ne pas oublier de modifier la variable d'environnement CLASSPATH
au besoin.
javac TestServlet.java
En compilant une classe qui importe javax.servlet.*
, il se peut que javac
ne trouve pas la librairie nécessaire. Cette librairie, servlet-api.jar
vient avec Tomcat, il suffit de l'ajouter dans le $CLASSPATH
:
export CLASSPATH="$CLASSPATH:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/classes.jar:/usr/local/apache-tomcat-6.0.18/common/lib/servlet-api.jar"
ou
export CLASSPATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/classes.jar:/usr/local/tomcat/common/lib/servlet-api.jar"
ou, avec l'API JSP :
export CLASSPATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/classes.jar:/usr/local/tomcat/common/lib/servlet-api.jar:/usr/local/tomcat/common/lib/jsp-api.jar"
Créer un fichier web.xml
dans WEB-INF
pour l'application.
<?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> <display-name>Test Servlet</display-name> <description>Test d'une application fonctionnant avec servlet.</description> <context-param> <param-name>webmaster</param-name> <param-value>stephane@domain.com</param-value> <description>The EMAIL address of the administrator to whom questions and comments about this application should be addressed.</description> </context-param> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/Test_servlet</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> <!-- 30 minutes --> </session-config> </web-app>
Selon la documentation, depuis la version 5 de Tomcat, il n'est pas conseillé d'inclure un contexte dans le fichier server.xml
. Pour ce faire, il faut inclure une section <Context>
dans la section <Host>
.
<Context path="/mine" docBase="mine" debug="0" reloadable="true"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_mine_log." suffix=".txt" timestamp="true"/> </Context>