Introduction à Tomcat

Ce chapitre présente la Fondation Apache (ASF) en reprenant ses différents projet, et plus précisément Apache Tomcat.

1. Apache Software Foundation (ASF)

Apache Software Foundation Logo
Figure 24 : Apache Software Foundation Logo

L'Apache Software Foundation (ASF) est une organisation à but non lucratif qui développe des logiciels open source sous la licence Apache, dont le renommé serveur web Apache HTTP Server. Elle a été créée en juin 1999 dans le Delaware aux États-Unis.

La fondation Apache est une communauté décentralisée de développeurs qui travaillent sur ses projets open source. Les projets Apache sont caractérisés par un mode de développement collaboratif fondé sur le consensus ainsi que par une licence de logiciel ouverte et pragmatique.

Chaque projet est dirigé par une équipe de contributeurs auto-désignée et on ne devient membre de la fondation qu'après avoir contribué activement aux projets Apache.

Les objectifs principaux de la fondation sont de protéger juridiquement le travail des contributeurs et d'empêcher que la marque Apache soit utilisée illégalement.

2. Licence Apache

La licence Apache est une licence de logiciel libre et open source. Elle est écrite par l'Apache Software Foundation, qui l'applique à tous les logiciels qu'elle publie. Il existe plusieurs versions de cette licence (1.0, 1.1, 2.0).

Cette licence n'est pas copyleft.

Les caractéristiques majeures de la licence Apache sont, d'une part, d'autoriser la modification et la distribution du code sous toute forme (libre ou propriétaire, gratuit ou commercial) et, d'autre part, d'obliger le maintien du copyright lors de toute modification (et également du texte de la licence elle-même).

Un exemple typique et simple de l'application de cette licence est le serveur web éponyme. En effet, Apache a été réutilisé comme base pour le développement d'un greffon du serveur applicatif WebSphere de chez IBM.

2.1. Descriptif de la licence

Licence

Une copie de la licence doit être fournie avec le code source.

Modification

Chaque fichier modifié doit clairement mentionner le fait qu'il a été modifié.

Marques et brevets

Il doit être fait mention de tous les brevets, marques déposées, copyright et note d'attribution, à l'exception de ceux qui ne concernent pas le code que vous distribuez.

NOTICE

Si le code source original contient un fichier NOTICE, il est obligatoire de faire figurer dans votre propre développement une version lisible de ce même fichier sous une des formes suivantes :

  • sous la forme d'un fichier texte NOTICE ;
  • dans un écran généré (par l'application) ;
  • dans la documentation du code source.

Le contenu de ce fichier doit être uniquement à titre informatif et ne doit en aucun cas modifier la licence.

Il est autorisé d'ajouter son propre copyright aux modifications ajoutées. Ces modifications peuvent être placées sous la même licence ou sous les termes d'une autre licence. Si aucune déclaration explicite n'est incluse, la licence Apache sera la licence régissant les modifications.

Cette licence ne donne pas le droit d'utiliser les marques déposées en dehors d'un usage raisonnable lors de la description des origines du logiciel.

Une version modifiée ne peut avoir le même nom que le logiciel original.

Le nom des auteurs/contributeurs ne peut être utilisé pour promouvoir un produit dérivé.

Apache Licenses

Source : Licence Apache

3. Projets de la Fondation

  • ActiveMQ
  • Ant
  • Atlas
  • Axis, sous-projet d'Apache Web Services
  • Derby, sous-projet d'Apache DB
  • Camel
  • Cassandra
  • CloudStack
  • Cocoon
  • Commons
  • Cordova
  • DB
  • Apache Beam
  • Directory
  • Excalibur
  • Felix, implémentation d'OSGi
  • Forrest
  • FreeMarker
  • Geronimo
  • Gump
  • Hadoop
  • Apache HTTP Server
  • Ivy
  • Jackrabbit
  • James
  • JMeter
  • Kafka
  • Karaf
  • Lenya
  • Apache Logging Services
  • Lucene
  • Mahout
  • Maven, outil pour la gestion et l'automatisation de production des projets logiciels.
  • NetBeans
  • NiFi
  • mod perl
  • MyFaces
  • Apache OFBiz
  • Apache OpenOffice
  • Apache Portable Runtime (APR)
  • Portals
  • SpamAssassin
  • Spark
  • ServiceMix
  • Struts
  • Subversion
  • Tapestry
  • TCL
  • Tika
  • Tinkerpop
  • Tomcat
  • Velocity
  • Apache Web Services
  • Apache XML
  • XMLBeans
  • XML Graphics

4. Apache Tomcat

Logo Apache Tomcat
Figure 25 : Logo Apache Tomcat

Apache Tomcat est un conteneur web libre de servlets et JSP Java EE. Issu du projet Jakarta, c'est un des nombreux projets de l’Apache Software Foundation. Il implémente les spécifications des servlets et des JSP du Java Community Process, est paramétrable par des fichiers XML et des propriétés, et inclut des outils pour la configuration et la gestion. Il comporte également un serveur HTTP. Il est lui-même écrit en Java.

Bien qu'étant une implémentation de JEE moins complète que la plupart de ses concurrents, et même grâce à cette légèreté, Tomcat domine rapidement le marché des serveurs Java. Il représentait en 2014 la moitié des utilisations de tels serveurs, loin devant JBoss et Jetty. En 2016, son utilisation baisse à 42%.

Source : Apache Tomcat

5. Composants Apache Tomcat

Tomcat 4.x est constitué de trois composants : Catalina (un conteneur de servlets), Coyote (un connecteur HTTP) et Jasper (un moteur JSP).

5.1. Catalina

Catalina est le conteneur de servlets de Tomcat. Catalina implémente les spécifications de Sun Microsystems pour les servlets et les pages JavaServer (JSP). Dans Tomcat, un élément "Realm" représente une "base de données" de noms d'utilisateur, mots de passe et rôles (semblables aux groupes Unix) assignés à ces utilisateurs. Différentes implémentations du "Realm" permettent à Catalina d'être intégrée dans des environnements où de telles informations d'authentification sont déjà créées et maintenues, puis d'utiliser ces informations pour implémenter le "Container Managed Security" comme décrit dans la spécification Servlet.

5.2. Coyote

Coyote est un composant "Connecteur" pour Tomcat qui supporte le protocole HTTP 1.1 comme serveur web. Cela permet à Catalina, précisément un conteneur Java Servlet ou JSP, d'agir également comme un simple serveur web qui sert de fichiers locaux comme documents HTTP. Coyote écoute les connexions entrantes au serveur sur un port TCP spécifique et transmet la requête au moteur Tomcat pour traiter la requête et envoyer une réponse au client demandeur. Un autre "Coyote Connector", Coyote JK, écoute de la même manière mais transmet ses requêtes à un autre serveur web, comme Apache, en utilisant le protocole JK, qui offre généralement de meilleures performances.

5.3. Jasper

Jasper est le moteur JSP de Tomcat. Jasper analyse les fichiers JSP pour les compiler en code Java sous forme de servlets (qui peuvent être gérés par Catalina). Lors de l'exécution, Jasper détecte les modifications apportées aux fichiers JSP et les recompile.

Depuis la version 5, Tomcat utilise Jasper 2, qui est une implémentation de la spécification JSP 2.0 de Sun Microsystems. De Jasper à Jasper 2, des caractéristiques importantes ont été ajoutées :

  • JSP Tag library pooling. Les objets de classe Tag handler peuvent être regroupés et réutilisés dans l'ensemble du servlet JSP.
  • Compilation JSP en arrière-plan - Lors de la recompilation du code Java JSP modifié, l'ancienne version est toujours disponible pour les requêtes serveur. L'ancien servlet JSP est supprimé une fois que le nouveau servlet JSP a fini d'être recompilé.
  • Recompilation JSP en cas de changement de page inclus - Les pages peuvent être insérées et incluses dans un JSP au moment de l'exécution. Le JSP ne sera pas seulement recompilé avec les changements de fichiers JSP mais aussi avec les changements de pages incluses.
  • Compilateur Java JDT - Jasper 2 peut utiliser le compilateur Java Eclipse JDT (Java Development Tools) au lieu de Ant et javac.

Trois nouveaux composants ont été ajoutés avec la sortie de Tomcat 7 : Cluster, Haute Disponibilité et Application Web.

5.4. Cluster

Ce composant a été ajouté pour gérer les grandes applications. Il est utilisé pour l'équilibrage de charge qui peut être réalisé par de nombreuses techniques. La prise en charge du clustering nécessite actuellement la version 1.5 ou supérieure du JDK.

5.5. Haute Disponibilité

Une fonction de haute disponibilité a été ajoutée pour faciliter la planification des mises à niveau du système (p. ex. nouvelles versions, demandes de modification) sans affecter l'environnement réel. Cela se fait en envoyant les requêtes de trafic en direct vers un serveur temporaire sur un port différent pendant que le serveur principal est mis à niveau sur le port principal. Il est très utile pour traiter les demandes des utilisateurs sur les applications web à fort trafic[5].

5.6. Application Web

La version Tomcat 7 a également ajouté l'amélioration des applications Web basées sur l'utilisateur et sur le système afin d'ajouter la prise en charge du déploiement dans les divers environnements. Il essaie également de gérer les sessions ainsi que les applications à travers le réseau.

Un certain nombre de composants supplémentaires peuvent être utilisés avec Apache Tomcat. Ces composants peuvent être construits par les utilisateurs s'ils en ont besoin ou peuvent être téléchargés depuis l'un des miroirs Apache Tomcat.

Source : Apache Tomcat

6. Versions Apache Tomcat

La dernière version stable d'Apache est la version 9.0 (9.0.17, 2019-03-18) mais les versions 7.0 (7.0.93, 2019-02-21) et 8.5 (8.5.39, 2019-03-19) restent supportées.

Apache Tomcat 9.x est construit sur Tomcat 8.0.x et 8.5.x. Il implémente les spécifications Servlet 4.0, JSP 2.3, EL 3.0, WebSocket 1.1 and JASPIC 1.1 (versions requises par la plaforme Java EE 8). Cette version ajoute des améliorations significatives :

  • Support pour HTTP/2
  • Support pour l'usage de OpenSSL pour TLS avec des connecteurs JSSE (NIO et NIO2)
  • Support pour le TLS virtual hosting (SNI)
Servlet API JSP API EL Spec WebSocket Spec JASPIC Spec Apache Tomcat Version Latest Released Version Supported Java Versions
4.0 2.3 3.0 1.1 1.1 9.0.x 9.0.17 Java EE 8
3.1 2.3 3.0 1.1 1.1 8.5.x 8.5.39 Java EE 7
3.1 2.3 3.0 1.1 N/A 8.0.x 8.0.53 Java EE 7
3.0 2.2 2.2 1.1 N/A 7.0.x 7.0.93 Java EE 6
2.5 2.1 2.1 N/A N/A 6.0.x 6.0.53 Java EE 5
2.4 2.0 N/A N/A N/A 5.5.x 5.5.36 Java EE 1.4
2.3 1.2 N/A N/A N/A 4.1.x 4.1.40 Java EE 1.3
2.2 1.1 N/A N/A N/A 3.3.x 3.3.2 Java EE 1.1

Source : Apache Tomcat Versions

7. Documentation

8. Dérivés