Apache Tomcat est une implémentation open source d’un conteneur web qui permet d'exécuter des applications web reposant sur les technologies servlets et JSP. Le conteneur de servlets implémente plusieurs spécifications Java entreprise de base, en particulier Java Servlet, JavaServer Pages (JSP) et les API WebSockets. Lancé par l’architecte logiciel de Sun James Duncan Davidson comme implémentation de référence pour la première API Java Servlet et la spécification JSP, Tomcat été donné par Sun à l'Apache Software Foundation. Tomcat a été livré pour la première fois en 1998, soit quatre ans seulement après Java lui-même. Même s’il n’est plus l'implémentation de référence pour aucune de ces technologies, Tomcat reste le serveur Java le plus utilisé, avec un moteur central bien testé et éprouvé, offrant une bonne extensibilité. De nombreuses boutiques de logiciels choisissent Tomcat pour exécuter des applications web Java.
Voici un aperçu de Tomcat et de son utilisation, ainsi que des instructions d'installation de la version la plus récente. Tomcat et l'API Java Servlet Tomcat 9 supportent la spécification Servlet 4.0 et nécessitent le JDK 8 ou plus. Tomcat 8.5 supporte plusieurs nouvelles fonctionnalités comme HTTP/2, mais reste un conteneur de Servlet 3.
Quel type de serveur est Tomcat ?
L'écosystème Java supporte plusieurs types de serveurs d'applications. Voyons dans quel catégorie de serveur se situe Tomcat.
-
Un conteneur de servlet est une implémentation de la spécification Java Servlet, utilisée principalement pour l'hébergement de servlets Java.
-
Un serveur web est un serveur conçu pour servir des fichiers provenant du système local, comme Apache.
-
Un serveur d'application Javaentreprise est une implémentation complète de la spécification Java EE (désormais Jakarta EE).
Finalement, Tomcat est un conteneur de servlets et de JSP. Un servlet Java encapsule le code et la logique métier et définit la façon dont les requêtes et les réponses doivent être traitées dans un serveur Java. JSP est une technologie de rendu de vues côté serveur. En tant que développeur, vous écrivez le servlet ou la page JSP, ensuite vous laissez Tomcat gérer le routage. Tomcat contient également le moteur Coyote, qui est un serveur web. Grâce à Coyote, il est possible d'étendre Tomcat pour inclure diverses spécifications et capacités de Java entreprise, y compris l'API de persistance Java (Java Persistence API - JPA). Tomcat existe également en version étendue, appelée TomEE, qui inclut plus de fonctionnalités d'entreprise (voir plus loin).
Mais comment utiliser Tomcat pour héberger des servlets et des JSP ?
Télécharger et installer Tomcat
Étant donné l’âge de Tomcat, plusieurs versions du logiciel sont disponibles. La page d'accueil de Tomcat donne des informations détaillées sur les différences entre les versions. En général, les développeurs choisissent la dernière version stable. Dans cet exemple, nous avons utilisé Tomcat 9, la dernière version stable de Tomcat actuellement disponible. Tomcat est téléchargeable soit sous forme d'archive (.zip ou tar.gz), soit sous forme de service installé. Le meilleur choix vous appartient, mais si vous ne travaillez pas sous Windows, le choix de l'archive s’impose. Nous utiliserons l'archive pour cet exemple.
Installation de Tomcat sous Windows
Si vous êtes sous Windows et que vous souhaitez utiliser l’installateur, il suffit de télécharger le fichier .exe et de l'exécuter. Tomcat s'installera comme un service avec des valeurs raisonnables par défaut. Il vous informera ensuite de l'endroit où se trouve l'installation, et vous pourrez procéder comme si vous aviez décompressé l'archive à cet endroit.
Etape 1. Installation par ligne de commande
Passez en ligne de commande Windows et tapez gunzip apache-tomcat-9.0.19.tar.gz suivi de tar -xf apache-tomcat-9.0.19.tar. Les répertoires suivants sont créés :
- /bin : il contient les scripts pour l'exécution de Tomcat.
- /webapps : c’est l'emplacement où vous allez déployer vos applications.
- /logs : c’est l'endroit où Tomcat enregistre ses logs. À noter que les logs de Tomcat sont stockés par défaut dans /logs/catalina.out. Vous pouvez utiliser ce fichier pour déboguer les problèmes en rapport avec les fichiers de logs spécifiques aux applications.
- /lib : c’est l'endroit où Tomcat recherche les JAR. C'est là que vous stockerez les paquets supplémentaires non inclus avec Tomcat, comme l’API Java Persistence (JPA).
- /conf : c’est le XML de configuration pour Tomcat, où vous pouvez par exemple comme ajouter des utilisateurs et des rôles pour Tomcat.
Etape 2. Démarrer Tomcat
Si vous avez installé Tomcat en tant que service, il est déjà en cours d'exécution. Sinon, pour le démarrer, tapez ./catalina.sh start en ligne de commande. (Remarque : pour voir toutes les commandes disponibles, il faut taper ./catalina.sh sans argument). Désormais, vous devriez être en mesure d’accéder à l'écran de bienvenue de Tomcat dans un navigateur.
Déploiement d'applications dans Tomcat
Le déploiement d’application se fait dans le répertoire webapps de Tomcat. Il suffit pour cela de déposer un fichier .war et Tomcat l'exécutera. Le format de packaging WAR est un format standard pour une ressource d'application web : c’est un fichier JAR avec quelques fichiers supplémentaires indiquant au conteneur (dans ce cas Tomcat) comment l'exécuter. En plus de ce packaging standard, il existe trois autres manières de déployer du contenu dans Tomcat.
Déploiement éclaté
Une application web « éclatée » est une application qui n'est pas compressée dans un fichier WAR, ce qui signifie qu'elle contient toujours tous les éléments disposés dans les répertoires et les fichiers. L'archive Tomcat que vous avez décompressée est livrée avec plusieurs exemples déployés de cette manière. Vous les trouverez dans le répertoire /webapps/examples. L'avantage d'un déploiement éclaté, c’est qu’il permet de voir les fichiers sans se préoccuper de la compression. L’adresse http://localhost:8080/examples/ donne accès à une liste de liens. Cette page est affichée par Tomcat à partir du fichier /webapps/examples/index.html. Tomcat sert un fichier HTML à partir du système de fichiers, qui est une instance du moteur Coyote de Tomcat agissant comme un serveur web. Vous êtes libre d'explorer ces exemples : ils donnent un bon aperçu des capacités de Tomcat à servir des servlets, des JSP et des WebSockets. Tomcat inclut également une application de gestion par défaut, accessible via le chemin /manager. Cette application vous permet entre autres de démarrer, d'arrêter et de redéployer des applications depuis une console web.
Servir du contenu statique
Il est possible de servir des fichiers à partir du système de fichiers, ou de les transférer de Tomcat vers un autre serveur HTTP comme Apache. Une autre configuration courante est de mettre un serveur de fichiers comme Apache ou Nginx en frontal de Tomcat, et ensuite de transférer vos requêtes API dans Tomcat. Dans ces cas-là, la bibliothèque mod_JK est utilisée pour configurer Tomcat et Apache (ou même un autre serveur web comme IIS) pour communiquer. Pour améliorer les performances, principalement dans la livraison de contenu statique, Tomcat offre également des « wrappers » natifs pour Windows et Linux, généralement connus sous le nom de Tomcat APR. On trouve ici (http://tomcat.apache.org/native-doc/) plus d'informations à ce sujet (en anglais). Ces bibliothèques natives Apache Tomcat ne sont pas nécessaires pour les cas d’usages classiques, mais il est bon de les connaître.
Tomcat embarqué
Pendant longtemps, Jetty a été le seul serveur capable de fonctionner comme un serveur embarqué. Les choses ont changé : désormais Tomcat peut aussi fonctionner en mode embarqué. La différence entre un serveur embarqué et un serveur contenant les fichiers d'application, c’est que dans le cas d’un serveur embarqué l’application a une classe principale (c'est-à-dire que c’est une app Java autonome), invoquant les capacités du serveur depuis sa base de code. Globalement, ce modèle de développement est plus simple et pffre une meilleure portabilité, au point de devenir rapidement la norme. Spring Boot, par exemple, utilise une instance Tomcat embarquée fonctionnant en mode développement. En terme opérationnel, il est très simple de faire tourner un serveur embarqué, puisque l’on ne traite plus qu'un seul composant (l'application) au lieu de traiter à la fois l'application et un déploiement serveur. Néanmoins, la configuration de Tomcat en hôte indépendant est encore très courante.
TomEE
En ajoutant ces bibliothèques à Tomcat lui-même, ou aux dépendances de votre application, on peut exploiter plus de capacités Java EE standard (ou Jakarta EE) avec Tomcat. Mais le serveur TomEE offre une autre option. TomEE possède le même moteur Tomcat, mais avec un support plus important de Java entreprise : le moteur inclut en effet les API populaires JPA et CDI (Contexts and Dependency Injection). La spécification de TomEE est basée sur le profil web de Java EE. Elle est donc plus étendue que Tomcat, mais ce n'est pas un serveur d'application Java EE complet comme WildFly ou Glassfish.
Haute disponibilité et clustering
Tomcat supporte la haute disponibilité et le clustering. La haute disponibilité, c’est essentiellement la capacité de basculer vers une autre instance du serveur et de recréer la session comme si rien ne s'était passé. Le clustering, c’est la capacité de créer plusieurs versions d'un même serveur pour gérer un volume de trafic élevé.
Conclusion
Le travail de développement de Tomcat reste très actif, évoluant en fonction des changements. Il offre toujours une plate-forme solide et fiable pour le déploiement d'applications web. Sa popularité est constante et intacte et il sert toujours de plate-forme Java par défaut pour de nombreux systèmes PaaS.
Commentaire