Programmation des Réseaux avec Java

Servlettes avec Tomcat

Nous abordons ici la mise en oeuvre et le fonctionnement des servlettes en Java, ainsi que la configuration des applications web (webapp) qui les hébergent.

Exercice 1 - Installation de Tomcat

Tomcat, le serveur de servlettes et de JSP du projet Jakarta, est déjà "installé" sur le serveur de vos comptes, mais nécessite de créer un répertoire sur vos machines. Au premier lancement de la commande
tomcat4 start
un répertoire MY_CATALINA_HOME est créé sur votre compte.

Important: vous n'oublierez pas avant de vous déloger d'arrêter le serveur avec la commande
tomcat4 stop

Vérifier que le serveur a correctement démarré en accédant depuis un navigateur à l'URL http://localhost:8180/. Testez les exemples de servlettes et de JSP. Accédez également à la documentation, et en particulier aux javadoc des API des servlettes et des JSP.

Exercice 2 - La servlette qui dit bonjour

Dans le répertoire d'installation (MY_CATALINA_HOME), créer une nouvelle application web de nom TDbasic revient à créer un nouveau répertoire sous webapp, soit ${MY_CATALINA_HOME}/webapp/TDbasic). À l'intérieur de ce répertoire TDbasic, créer un sous-répertoire WEB-INF qui contient lui-même un sous répertoire classes. S'inspirer de l'architecture de la webapp d'exemple ~/MY_CATALINA_HOME/webapp/examples.

Dans le répertoire classes, écrire une classe servlette Bonjour héritant de la classe javax.servlet.http.HttpServlet. Cette classe doit redéfinir la méthode doGet() de sorte qu'elle écrive, sur le flot de sortie associé à la réponse, une page HTML contenant "Bonjour" écrit en gras. Après avoir compilé ce source par

javac -classpath ~/MY_CATALINA_HOME/common/lib/servlet.jar:. Bonjour.java
vérifier qu'elle fonctionne en accédant dans un navigateur à l'URL
http://localhost:8180/TDbasic/servlet/Bonjour

Exercice 3 - Configuration de l'application Web

En vous inspirant du fichier web.xml de la webapp examples, créer un fichier web.xml pour la webapp TDbasic (dans webapp/TDbasic/WEB-INF/web.xml) en ne conservant que les éléments nécessaires et en les modifiant de sorte que :

Vérifier (après arrêt et relance de Tomcat) que la servlette est accessible par:
http://localhost:8180/TDbasic/servlet/Bonjour
http://localhost:8180/TDbasic/servlet/bonjour
http://localhost:8180/TDbasic/hello

En fonction de la version de Tomcat dont vous disposez, vous pouvez essayer d'arrêter, de redémarer ou de recharger une webapp. Pour cela, consulter la documentation concernant l'application Manager; vous pourrez être ammenés à modifier les répertoires et les fichiers dans MY_CATALINA_HOME et à créer des copies de certains fichiers plutôt que des liens symboliques, en particulier dans le répertoire conf.

Exercice 4 - Instances de servlettes

Dans le fichier Bonjour.java, ajouter une variable d'instance count (initialisée à 0 qui compte le nombre de fois où la servlette a été appelée (incrémentée dans la méthode doGet()). Modifier le contenu de la page retournée par la servlette afin de visualiser ce nombre. Tester votre servlette avec le chemin http://localhost:8180/TDbasic/hello.

  1. Créer dans l'élément <servlet-mapping> du fichier web.xml un second chemin, disons helloBis, associé au même nom de servlette que le chemin hello. Vérifier que une seule instance de la servlette existe, qu'elle soit accédée par les chemins hello ou helloBis.
  2. Créer maintenant dans l'élément <servlet> du fichier web.xml un second nom, disons otherBonjour, associé à la même classe de servlette Bonjour. Associer ce nom de servlette à tous les URL de la forme *.hello. Vérifier que deux instances de la servlette existent.

Exercice 5 - Initialisation de servlettes

Si le serveur est arrêté puis redémarré, de nouvelles servlettes sont instanciées et leur compteur est donc réinitialisé à 0.

Pour permettre de conserver un historique, une solution consiste à sauver la valeur du compteur à chaque fois que ce nombre est modifié.

  1. Pour cela, la servlette doit tout d'abord récupérer le nom d'un fichier au moment de l'instanciation. Ce nom peut être précisé dans le fichier web.xml grâce à l'élément <init-param> (cf. web.xml de la webapp examples). La valeur de ce paramètre peut ensuite être récupérée dans la servlette, par redéfinition de la méthode init(ServletConfig config), via la méthode getInitParameter() sur l'instance de ServletConfig reçue en argument.
  2. Il faut ensuite modifier le contenu du fichier lors de chaque accès à la page (attention à la concurrence).

Exercice 6 - Utilisation de formulaire

Écrire un formulaire statique (une page HTML), permettant à un client de préciser un texte qu'il désire voir afficher après "Bonjour" dans la page retournée par votre servlette. Le champ de saisie sera initialisé à "moi" et le bouton de soumission du formulaire associé à votre servlette avec la méthode GET. Tester l'association.

Maintenant que votre servlette est associée au formulaire, modifier la méthode doGet() afin de récupérer le texte entré par le client. Pour cela, utiliser la méthode getParameter() de la l'instance de HttpServletRequest reçue en argument.

Modifier le formulaire et votre servlette afin d'accéder à cette fonctionnalité via la méthode POST.


Etienne.Duris[at]univ-mlv.fr © Université de Marne-La-Vallée - Mars 2004