Tomcat
Tomcat, une composante du projet Jakarta est la version moderne de JServ. Il peut également servir de serveur, mais nous estimons qu’il lui faudra longtemps pour arriver au niveau d’Apache et que ce ne serait pas un bon choix pour un site web sérieux.
La page d’accueil du projet Jakarta est http://jakarta.apache.org/, où vous pourrez lire :
Le but du projet Jakarta est de fournir des solutions serveur de qualité professionnelle, basées sur la plateforme Java et développées de façon ouverte et coopérative.
Au moment de l’écriture de ce livre, Tomcat 4.0 était incompatible avec le module mod_cgi d’Apache et nécessitait dans tous les cas Java 1.2, qui est bien moins répandu que Java 1.1. Nous avons donc décidé de nous intéresser à Tomcat 3.2.
D’après notre expérience, installer un logiciel lié à Java est un processus très pénible et Tomcat n’y fait pas exception. Le postulat semble être que Java est tellement fascinant que les explications ne sont pas nécessaires -- les adeptes s’immergeront dans le fleuve sacré et tout deviendra clair après de nombreux jours passés sous la surface. C’est sûrement parce que les explications sont chères et que de gros intérêts commerciaux sont en jeu. Cela contraste fortement avec le site Apache ou le site CPAN de Perl, qui sont tous les deux maintenus par des bénévoles enthousiastes. Ce qu’on y trouve est facile à comprendre et fonctionne parfaitement.
Installation du JDK
Avant tout, vous avez besoin d’un JDK (Java Development Kit). Nous avons téléchargé jdk1.1.8 pour FreeBSD à partir de http://sun.java.com et nous l’avons installée. Cette version est également disponible à l’URL ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/nate/JDK1.1/jdk1.1.8_ELF.V1999-11-9.tar.gz. L’installation est très simple : il suffit de décompresser le fichier avec unzip puis d’en extraire les fichiers avec tar. Si vous lisez trop rapidement le fichier README, vous pouvez avoir l’impression qu’il faut décompacter le fichier src.zip : ne le faites pas, sauf si vous souhaiter lire le code source des composants Java. Il ne faut, bien sûr, absolument pas décompacter le fichier classes.zip.
Une étape essentielle, qui n’est peut-être pas très clairement expliquée dans la documentation, est qu’il faut ajouter le chemin du JDK, .usr/src/java/jdk1.1.8/bin, à votre path. Il faut également initialiser la variable d’environnement CLASSPATH avec /usr/src/java/jdk1.1.8/lib/classes.zip et ajouter le répertoire courant ( . ) au path, s’il ne s’y trouve pas déjà.
Assurez-vous que les noms des répertoires correspondent à votre système et reconnectez-vous pour que votre configuration prenne effet. Pour vérifier que vous n’avez rien oublié, le plus simple est d’écrire un programme « Hello world » :
public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
Sauvegardez ce fichier sous le nom de la classe publique, avec l’extension .java : Hello.java et compilez-le avec la commande suivante :
javac Hello.java
Pour lancer son exécution, faites :
java Hello
Si Hello World apparaît à l’écran, c’est que tout va bien.
Installation de Tomcat
Tomcat peut fonctionner de trois façons différentes :
- Comme un conteneur de servlets autonome. Ce type de fonctionnement est pratique pour déboguer et effectuer des tests car il agit comme un serveur web (assez spartiate). Nous ne vous conseillons pas de l’utiliser à la place d’Apache.
- Comme un conteneur de servlets intégré, s’exécutant dans l’espace d’adresses d’Apache. Ce fonctionnement donne de bonnes performances mais s’adaptera mal à un accroissement du trafic de votre site.
- Comme un conteneur de servlets externe, s’exécutant dans son propre espace d’adresses et communiquant avec Apache via des sockets TCP/IP.
Si vous décider d’utiliser le fonctionnement 2 ou 3, ce qui sera sûrement le cas, vous devez choisir la méthode à utiliser et l’implémenter en conséquence.
L’installation de Tomcat implique donc deux processus distincts : son installation proprement dite et l’adaptation d’Apache pour le relier à Tomcat.
Généralement, nous sommes partisans de l’installation à partir des sources mais, dans le cas de Java, ce processus peut s’avérer assez pénible : nous avons donc décider de l’installer à partir d’une distribution binaire, jakarta-tomcat-3.3a.tar.gz dans notre cas.
L’installation est plutôt simple. Après avoir décompacté l’archive, tout ce qu’il reste à faire est d’initialiser les variables d’environnement :
JAVA_HOME à /usr/src/java/jdk1.1.8
TOMCAT_HOME à /usr/src/tomcat/jakarta-tomcat-3.3a
(adaptez ces chemins pour votre système) et se reconnecter. Pour tester que tout fonctionne, faites :
ls $TOMCAT_HOME
Si cela n’affiche pas le contenu de ce répertoire, c’est que quelque chose ne va pas.
L’installation sur les systèmes Win32 est très similaire. Initialisez le chemin vers le répertoire de Tomcat en faisant :
set TOMCAT_HOME=\usr\src\tomcat\jakarta-tomcat-3.3a"
Le répertoire .jakarta-tomcat-3.3a/bin contient deux scripts : startup.sh, qui lance Tomcat, et shutdown.sh, qui l’arrête. Pour vérifier que tout a bien été installé, placez-vous dans ce répertoire et lancez le premier script. Un long affichage devrait s’ensuivre (après une pause assez longue). Vous remarquerez que le script se détache du shell dès le départ, ce qui fait que l’on se sait pas quand il se termine.
Par défaut, Tomcat produit ses messages de log à l’écran, ce qui n’est pas souhaitable ; il est donc conseillé de modifier le fichier conf/server.xml de :
...
<LogSetter name ="tc_log"
verbosityLevel="INFORMATION"
/>
...
en :
...
<LogSetter name ="tc_log"
path="logs/tomcat.log"
verbosityLevel="INFORMATION"
/>
...
Ce qui aura pour effet de transférer les messages à l’écran dans le fichier log.
Si vous vous connectez maintenant sur le port 8080 de votre machine -- nous avons fait http://www.butterthlies.com:8080 -- Tomcat vous présentera sa page d’accueil, qui est $TOMCAT_HOME/webapps/ROOT/index.html. Vous remarquerez que la page prétend qu’elle s’appelle $TOMCAT_HOME/webapps/index.html, ce qui est faux.
Lorsque vous en aurez assez de contempler cette page, vous pouvez stopper Tomcat en faisant $TOMCAT_HOME/bin/shutdown.sh. Si vous essayez de lancer Tomcat sans l’avoir d’abord arrêté, cela provoquera une erreur fatale de Java.
Structure de l’arborescence des répertoires de Tomcat
Dans le répertoire jakarta-tomcat-3.3a (ou celui où vous avez installé Tomcat sur votre machine), vous trouverez les répertoires suivants :
bin
Contient les scripts de démarrage et d’arrêt, le script tomcat.sh, et d’autres scripts pour les plateformes Win32.
conf
Contient les fichiers de configuration.
doc
Contient différents documents, dont uguide -- celui qu’il faut imprimer et garder sous la main -- et la FAQ.
lib
Contient les fichiers jar.
logs
Contient les fichiers log.
webapps
Contient les exemples d’applications.
work
Contient des fichiers et répertoires propres à Tomcat.
Nous examinerons le contenu des sous-répertoires qui méritent commentaire.
bin
Les scripts de démarrage et d’arrêt se contentent d’appeler le script principal, tomcat.sh. Celui-ci fait deux choses :
- Il recherche un CLASSPATH.
- Il passe les paramètres de la ligne de commande à org.apache.tomcat.startup.Tomcat. Ces paramètres sont start ou stop, ainsi que l’emplacement du fichier server.xml (voir plus loin), qui sert à configurer Tomcat selon vos goûts. Si, par exemple, vous utilisez /etc/server_1.xml avec Tomcat et Apache, il faut lancer Tomcat en faisant :
bin/tomcat.sh start -f/etc/server_1.xml
conf
Ce sous-répertoire contient deux fichiers importants :
server.xml
Ce fichier règle plusieurs problèmes, avec lesquels vous ne devez pas interférer. Pour connaître sa syntaxe, voir la documentation sur le serveur par défaut que nous avons lancé plus haut (elle se trouve dans http:/.doc/serverxml.html ).
apps-*.xml
Chaque fichier apps-<nom>.xml décrit également une configuration -- leur consultation est activée par la directive :
<ContextXmlReader config="conf/apps.xml" />
qui force la lecture de conf/apps.xml et des conf/apps-*.xml, ainsi que le chargement des contextes qu’ils décrivent (voir l’exemple de servlet ci-dessous pour comprendre comment sont utilisés les contextes).
Écriture et test d’une servlet
Nous utiliserons la servlet de test, Simple.java que nous avons déjà décrite pour montrer comment installer une servlet avec Tomcat. Nous devons tout d’abord créer un répertoire, .site.tomcat, et y placer un sous-répertoire servlets -- c’est vers lui que nous ferons pointer Tomcat. Dans .site.tomcat/servlets, nous créons un sous-répertoire WEB-INF (c’est là que Tomcat s’attend à trouver les choses), qui contiendra lui-même un sous-répertoire classes. Puis, nous copions le fichier Simple.class dans .site.tomcat/servlets/WEB-INF/classes. On associe ensuite la classe Simple a une servlet, que l’on nommera sans grande imagination test, en créant un fichier .site.tomcat/servlets/WEB-INF/web.xml contenant les lignes suivantes :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>
test
</servlet-name>
<servlet-class>
Simple
</servlet-class>
</servlet>
</web-app>
Enfin, il faut prévenir Tomcat en associant le répertoire .site.tomcat/servlets à un contexte. Pour cela, on crée le fichier conf/apps-simple.xml (ce fichier sera lu automatiquement par la configuration par défaut) contenant les lignes suivantes :
<?xml version="1.0" encoding="ISO-8859-1"?>
<webapps>
<Context path="/simple"
docBase=".site.tomcat/servlets"
debug="0"
reloadable="true" >
<LogSetter name="simple_tc.log" path="logs/simple.log" />
<LogSetter name="simple_servlet_log"
path="logs/simple_servlet.log"
servletLogger="true"/>
</Context>
</webapps>
Vous devez évidemment initialiser docBase avec le chemin correct. Le paramètre path précise la première partie de l’URL qui accèdera à ce contexte. Le contexte peut contenir du code HTML, ainsi que des servlets et des JSP. Les servlets sont situées dans le sous-répertoire servlet de path : ainsi, pour accéder à la servlet Simple avec cette configuration, il faudra utiliser l’URL http://.simple/servlet/test. Si vous utilisez l’URL http://.simple/servlet/test?a=b&c=d&c=e, vous verrez apparaître :
Simple Servlet
a[0]=b
c[0]=d
c[1]=e