Listeners

Comme son nom le laisse supposer, un objet listener est un objet qui écoute certains événements dans une application. Lorsque l'événement qu'il écoute se déclenche, alors ce listener s'active : en général, une de ses méthodes particulière est invoquée, avec en paramètre un objet portant les informations sur cet événement.

Le principe de fonctionnement est donc celui du callback : en tant que développeur d'application web, on enregistre des listeners auprès du serveur d'application. Ces objets doivent implémenter des interfaces standard, fournies par l'API Servlet, et être déclarés dans le descripteur d'une application web : le fichier web.xml.

Les événements définis par l'API Servlet sont au nombre de sept :

Chaque contexte possède son interface listener.

La session a un cycle de vie un peu particulier, du fait de sa nature. Rappelons tout d'abord qu'une application web n'a pas nécessairement besoin de la notion de session. Une session devient nécessaire lorsque l'on a besoin de reconnaître un client donné d'une requête à l'autre.

Dans ce cas, une session est créée lors de la première requête de ce client. Cette session a une durée de vie, au-delà de laquelle elle est détruite. Cette durée de vie peut être plus ou moins longue : de quelques heures à plusieurs mois.

Si les requêtes d'une même session se succèdent rapidement, alors cette session sera probablement conservée en mémoire. Si le client reste plusieurs heures sans revenir sur le site, et que le site choisit de conserver tout de même sa session, celle-ci sera probablement déchargée de la mémoire, et conservée sur un support persistant, probablement une base de données.

On voit que quatre types d'événements peuvent alors exister pour une session :

Notons que la passivation d'une session peu intervenir en environnement clusterisé, lorsqu'une session doit passer d'un nœud du cluster à un autre.

Ces quatre événements sont gérés par deux interfaces.

L'objet HttpSessionEvent n'expose qu'une unique méthode : getSession(), qui retourne la session concernée.

Enfin, un objet peut être notifié du fait qu'il a été ajouté à une session. Il doit pour cela implémenter l'interface HttpSessionBindingListener. Cette interface expose deux méthodes :

Ces deux méthodes reçoivent en paramètre un objet de type HttpSessionBindingEvent. Cet événement expose les deux méthodes classiques getName() et getValue(). Il expose également getSession(), qui retourne la session à laquelle cet objet est attaché, ou de laquelle il est détaché.

Tous les listeners que nous avons vu doivent être déclarés dans le fichier web.xml.