:: Enseignements :: Master :: Master TTT :: 2011-2012 :: Programmation réseau en Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Introduction à Tomcat |
Nous nous proposons au cours de ce TP de construire des servlettes simples utilisant Tomcat (matou en anglais). Une servlette est une application web hébergée exécutée par un serveur. Ici Tomcat joue le rôle de container de servlettes mais également de serveur web communiquant directement avec le client. Il est également possible de rendre Tomcat accessible indirectement par le biais d'un serveur web généraliste tel que le serveur HTTP Apache (avec le connecteur mod_jk).
Installation de Tomcat
Tomcat est un logiciel libre sous licence Apache : il est possible de télécharger et compiler ses sources mais étant pressés nous préférons récupérer une distribution binaire de la dernière version 6.x disponible
ici.
Nous décompressons l'archive de Tomcat et découvrons les répertoires suivants :
- bin/ : contient les scripts utiles Unix (.sh) et Windows (.bat) notamment pour démarrer et arrêter le serveur Tomcat. Quelques fichiers jar de binaires sont aussi présents.
- conf/ : contient les fichiers de configuration (dictionnaires de clé/valeur ou fichiers XML).
- lib/ : bibliothèques compilées nécessaires pour l'exécution de Tomcat (fichiers jar). On pourra y rajouter de nouvelles bibliothèques utiles pour l'exécution des applications web installées.
- logs/ : là où seront stockés les journaux notifiant les évènements et erreurs.
- webapps/ : il s'agit du répertoire où sont stockées toutes les applications (pages et classes compilées) du serveur (chacune dans un sous-répertoire différent).
Miaou World
Nous réalisons une première application où Tomcat miaule le traditionnel "Hello World". Pour cela nous créons un répertoire avec l'arborescence suivante :
- docs/ pour la documentation
- src/ où les sources Java de la servlet seront mises
- web/ contenant les pages du site (html, jsp, images, javascript ...)
- web/WEB-INF/ avec les fichiers de configuration dont web.xml
- web/WEB-INF/classes/ qui est le lieu où seront placées les classes compilées (avec respect de la hiérarchie de paquetages)
On crée un fichier HelloWorld.java dans src/ étendant la classe abstraite HttpServlet : on pourra consulter la Javadoc de
javax.servlet à cet effet. Il faut redéfinir la méthode
doGet(HttpServletRequest req, HttpServletResponse resp) : on pourra écrire le contenu de la page (Hello World) dans
response.getOutputStream().
Il est maintenant nécessaire de définir les servlettes qui sont liées à une classe Java. Chaque servlette est également liée à une URL d'accès sur le serveur. Ces liaisons sont définies dans web.xml : on s'inspirera du fichier webapps/docs/appdev/sample/web/WEB-INF/web.xml livré en exemple avec Tomcat.
Nous ajoutons une page statique index.html à la racine du site (web/) qui comporte un lien vers l'URL de la servlette.
On déploie ensuite notre application. Pour cela on pourra utiliser un fichier build.xml standard que l'on devra éventuellement adapter à notre application. Ce fichier contient des règles pour la compilation des classes par l'outil de construction Apache Ant et permet de générer un répertoire de distribution (règle dist) que l'on déploiera sur le serveur en le copiant dans webapps/.
Nous pouvons maintenant démarrer Tomcat via le script bin/startup.sh (et le stopper avec bin/shutdown.sh). Normalement Tomcat devrait être accessible depuis le port 8080 en HTTP/1.1 (le port est configurable dans conf/server.xml).
Compteur de pages affichées
On souhaite modifier la classe précédente pour qu'elle affiche un compteur de pages affichées avec mémorisation de l'instant du premier et dernier affichage. Ajouter les champs de classe nécessaires et modifier la méthode doGet.
Créer maintenant une deuxième servlette mais qui reste associée à la même classe (avec naturellement une URL différente). Consulter les URLs des deux compteurs créés : que peut-on remarquer ?
Compteur de visites
Un client peut demander l'affichage d'une page de multiples fois. Afin de ne pas comptabiliser ces doublons, nous souhaitons maintenir maintenant un compteur de visites. Une page affichée une fois ou plus durant une session compte pour une unique visite. Consulter la Javadoc pour la classe HttpServletRequest afin de savoir comment créer et récupérer une session. Par quel mécanisme Tomcat assure-t-il la persistence d'une session au cours des requêtes d'un même client ? Adapter le compteur de pages pour en faire un compteur de visites.
© Université de Marne-la-Vallée