Programmation des Réseau en Java

Servlets: sesssions et dispatch


Nous continuons ici à utiliser les servlettes en Java, avec les notions de session et de distribution entre servlettes.


Exercice 1 - Les sessions

Créer un formulaire qui permet à l'utilisateur de donner son nom et de choisir un style de caractères préféré (gras, italique ou normal). L'action de ce formulaire doit être d'envoyer, en utilisant par exemple la méthode POST, ces paramètres à une servlette (Configure) qui renvoie un message de confirmation de la prise en compte de ces préférences, en créant un en-tête personalisée, et en utilisant le style de caractères choisi par l'utilisateur. La servlette renverra simplement un bouton "OK" dont elle se chargera de compter le nombre de fois où il a été cliqué grâce à sa méthode GET.

On désire ensuite que cette configuration soit propre à cet utilisateur, pour tous les échanges de requêtes/réponses qu'il aura à faire avec notre serveur. En effet, en première approche, on ne peut pas disposer de deux utilisateurs sans qu'ils soient obligés de partager la même configuration. De même, si l'un en change, les autres en changent également par effet de bord. On voudrait au contraire que, au delà de la réponse au formulaire de configuration, chaque réponse ultérieure de la servlette à un click sur le bouton OK soit précédée de l'en-tête personnalisé et utilise le style de caractère adéquat.

Pour pouvoir autoriser une configuration pour chaque utilisateur, il est nécessaire de disposer d'une notion de session; la classe javax.servlet.http.HttpSession offre cette possibilité.

Utilisez cette classe pour identifier un utilisateur et stocker dans l'objet session (qui est échangé entre le client et le serveur à chaque requête/réponse) les différents paramètres nécessaires. Ce stockage peut se faire par l'intermédiaire d'attributs qu'on peut consulter ou modifier par les méthodes getAttribute() et setAttribute(), comme dans une table de hachage.


Exercice 2 - La distribution entre servlettes

Étant donnée le contexte d'exécution une servlette, il est possible de récupérer un objet implémentant l'interface RequestDispatcher, par les appels de méthodes getServletContext().getRequestDispatcher(cible). Sur l'objet obtenu, qui enveloppe la servlette cible, on peut appeler les méthodes include() ou forward(), qui délèguent une partie ou tout le traitement de la requête à la servlette cible.

En vous servant de ces mécanismes, imaginez un ensemble de servlettes de sorte que:

Bien entendu, les distributeurs sont capables de transmettre des fichiers de données statiques, qui peuvent représenter une partie d'une page résultat.



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