6. Utilisation de Tomcat avec Apache

Jusqu'à sa version 5, Tomcat était un bon serveur de servlets / JSP, mais manquait de fonctionnalités et peut-être de performances pour rivaliser avec Apache quant au service du contenu statique. La bonne façon de l'utiliser était donc de le cantonner au service des applications web (servlets, JSP, etc...). Apache était en frontal, gérait la sécurité et le contenu statique (pages, images, etc...), et déléguait les requêtes dynamiques à Tomcat. La configuration pour ce faire reste la même, construite sur le protocole AJP/1.3. L'arrivée de l'APR (Apache Portable Runtime) au cœur de Tomcat 5.5 lui permet d'utiliser le même code qu'Apache pour gérer le contenu statique, et donc de rattraper ce déficit de performance. Cela dit, le couple Apache / Tomcat fonctionne toujours très bien, et reste encore utilisé. Permettre à Apache et Tomcat de dialoguer nécessite quelques ajustements techniques à la configuration de Tomcat et d'Apache. Côté Apache, on doit veiller à trois choses :
  • au chargement du module mod_jk ;
  • à correctement configurer le fonctionnement de mod_jk dans un fichier de configuration appelé workers.properties
  • à correctement rediriger les requêtes dynamiques vers Tomcat.
Voici un exemple de configuration côté Apache. Le fichier par défaut de configuration d'Apache s'appelle httpd.conf.

Exemple 14. Éléments de configuration côté Apache

 # Chargement et déclaration du module mod_jk
 # .dll sous Windows
 # .so sous Unix / Linux
LoadModule jk_module modules/mod_jk.dll
AddModule  mod_jk.c
 # déclaration du fichier de configuration de mod_jk
JkWorkersFile D:\Tomcat\conf\workers.properties

NameVirtualHost *

<VirtualHost *>
	 # déclaration et paramétrage d'un hôte virtuel 
	ServerName    www.galilee.org
	DocumentRoot  "D:\www\www.galilee.org\htdocs"
	ErrorLog      "D:\www\www.galilee.org \logs\error.log"
	CustomLog     "D:\www\www.galilee.org \logs\access.log" combined
	
	 # configuration du répertoire contenant les éléments statiques
	DirectoryIndex index.html
	<Directory  "D:\www\www.galilee.org\htdocs">
		Order deny,allow
		Allow from all
	</Directory>
	
	 # configuration de mod_jk
	<IfModule mod_jk.c>
		JkLogFile          D:\www\www.galilee.org\logs\mod_jk.log
		JkLogLevel         info
		JkLogStampFormat    "[%a %b %d %H:%M:%S %Y] "
		JkOptions          +ForwardKeySize +ForwardURICompat -ForwardDirectories 
		JkRequestLogFormat  "%w %V %T"
		
		 # redirection de toutes les requêtes commençant par 
		 # /webapp vers le connecteur ajp13
		 # ce connecteur doit être déclaré dans workers.properties
		JkMount /webapps/* ajp13
	</IfModule>
</VirtualHost>

Le fichier workers.properties permet de paramétrer l'accès à Tomcant. Voyons un exemple.

Exemple 15. Exemple de fichier workers.properties

 # doit indiquer dans quel répertoire Tomcat est installé
workers.tomcat_home=C:\tomcat\apache-tomcat-6.0.29\

 #doit indiquer dans quel répertoire le JDK est installé
workers.java_home=D:\java\jdk-6.0.18

 # la valeur de cette variable est / sur Unix et \ sur Windows
ps=\

 # liste des workers existants, on peut en mettre plusieurs
worker.list=ajp13

 # paramétrage de chaque worker déclaré
 # Tomcat devra écouter le bon port sur le bon hôte, avec le bon protocole
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13

Dans notre cas, Tomcat devra donc déclarer un connecteur de type AJP 13 écoutant le port 8009.

Exemple 16. Exemple de connecteur Tomcat AJP13

 <Connector  port="8009" 
            protocol="AJP/1.3" 
            redirectPort="8443" />

Java servlet et JSP
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Position de l'API Servlet
2. Présentation
Présentation de Tomcat
1. Un peu d'histoire
2. Organisation des répertoires de Tomcat
2.1. Répertoire bin
2.2. Répertoire conf
2.3. Répertoire lib
2.4. Répertoire log
2.5. Répertoire temp
2.6. Répertoire webapp
2.7. Répertoire work
3. Lancement de Tomcat
3.1. Lancement par défaut
3.2. Accéder à l'administration de Tomcat
3.3. Plusieurs instances de Tomcat
4. Configuration de Tomcat
4.1. Introduction
4.2. Élément Server
4.3. Élément Service
4.4. Élément Connector
4.5. Élément Engine
4.6. Élément Host
4.7. Élément Context
4.8. Élément GlobalNamingResources
4.9. Élément Realm
4.10. Élément Valve
5. Définition et chargement des applications web
5.1. Introduction
5.2. Prise en compte des éléments Context
5.3. Chargement et mise à jour à chaud
6. Utilisation de Tomcat avec Apache
API Servlet
1. Introduction
2. Une première servlet
2.1. Le code
2.2. Création de l'application web
2.3. Déploiement dans Tomcat
3. Concepts, cycle de vie
3.1. Requête
3.2. Réponse
3.3. Session
3.4. Application web
3.5. Contexte d'exécution
3.6. Cycle de vie
3.7. Filtre
4. Présentation générale de l'API
4.1. Introduction
4.2. Interfaces disponibles
5. Notion de servlet
5.1. Interfaces servlet
5.2. Cycle de vie d'une servlet
5.3. Paramètres d'initialisation d'une servlet
6. Notion de requête
6.1. Accès aux paramètres d'une requête
6.2. Accès aux éléments de l'en-tête HTTP
6.3. Accès aux éléments de l'URL
6.4. Accès aux paramètres du client
6.5. Accès aux informations de sécurité
6.6. Accès à la session, au contexte et aux informations d'initialisation
7. Notion de réponse
7.1. Contrôle du buffer de sortie
7.2. Contrôle de la réponse HTTP
8. Notion de session HTTP
9. Redirection ou inclusion d'une ressource
10. Listeners
10.1. Introduction
10.2. Événements de l'API Servlet
10.3. Ajout ou retrait d'un attribut
10.4. Création et destruction d'un contexte
10.5. Notification d'un objet attaché à un contexte
10.6. Déclaration d'un listener dans une application web
11. Connexion à une base
11.1. Introduction
11.2. Connexion manuelle
11.3. Connexion par utilisation de source de données
Filtrage
1. Filtrage de servlets
2. Mise en place d'un filtre
2.1. Écriture d'un filtre
2.2. Déclaration du filtrage
3. Filtrage d'une requête
4. Filtrage d'une réponse
4.1. Fonctionnement de ce filtrage
Java Server Pages
1. Introduction
2. Un premier exemple
2.1. Une première JSP statique
2.2. Une première JSP dynamique
2.3. Fonctionnement interne des JSP
3. JSP scriplet
3.1. Les expressions
3.2. Les déclarations
3.3. Variables prédéfinies
3.4. Scriplet de directives
4. Utilisation de beans
4.1. Introduction
4.2. Déclaration d'un bean existant
4.3. Création d'un nouveau bean
4.4. Utilisation des propriétés d'un bean
5. Inclure un contenu externe dans une JSP
5.1. Introduction
5.2. Inclusion au lancement de l'application
5.3. Inclusion au traitement de la requête
6. Utilisation de bibliothèques de tags
6.1. Introduction
6.2. Bibliothèque core
7. Internationalisation
7.1. Notion de bundle
7.2. Internationalisation de pages JSP
Projet exemple
1. Présentation du projet