1. Écouteur qui écoute les changements de propriétés dans les objets de domaine
L'auditeur d'événements pour le changement d'attributs dans les objets de domaine est l'écouteur pour écouter les événements d'information de changement d'attribut dans les trois objets: servletContext, httpSession et httpservletRequest.
Ces trois interfaces d'écoute sont ServletContextAttributeleListener, httpSessionAttributeleListener et ServleTrequestAttraTributleListener. Les trois interfaces définissent trois méthodes pour gérer les événements qui augmentent, suppriment et remplacent les attributs dans l'objet écouté. Les noms de méthode correspondants du même événement dans ces trois interfaces sont exactement les mêmes, mais les paramètres acceptés sont différents.
1.1. Méthode attribuée
Lors de l'ajout d'un attribut à l'objet écouté, le conteneur Web répond en appelant la méthode attribuée de l'auditeur d'événements. Cette méthode reçoit un paramètre de type d'événement. L'auditeur peut obtenir l'objet de domaine qui ajoute des attributs et les objets d'attribut enregistrés dans le domaine. La définition complète de syntaxe de chaque écouteur d'attribut de domaine est la suivante:
public void attributeadded (servletContextAttutteevent scine) public void attributereplace (httpSessionBindingEvent hsbe) public vide attributed (serpletRequestAttributeevent srae)
1.2. Méthode attributiveMoved
Lors de la suppression d'un attribut dans l'objet écouté, le conteneur Web appelle la méthode AttributeReMoved de l'écouteur d'événements pour répondre à la définition de syntaxe complète dans l'écouteur d'attribut dans chaque domaine:
public void attributeReMoved (servletContextAttributeevent SCAE) public void attributeReMoved (httpSessionBindingEvent hsbe) public void attributereMoved (servletRequestAttributeevent srae)
1.3. Méthode attribuée
Lorsqu'un certain attribut dans l'objet de domaine de l'écoute est remplacé, le conteneur Web appelle la méthode AttributereAl placée de l'écouteur d'événements pour répondre à la définition de syntaxe complète dans chaque écouteur d'attribut de domaine:
public void attributereplaced (servletContextAttutteevent SCAE) public void attributerelpace (httpSessionbindingEvent hsbe) public vide attributerelpace (servletRequestAttributeevent srae)
1.4. ServletContextAtTrutLeListener Exemple d'écoute:
Écrivez un auditeur ServletContextAtTributEListener pour surveiller les changements dans les valeurs d'attribut des objets de domaine ServletContext. Le code est le suivant:
package me.gacl.web.listener; import java.text.messageFormat; import javax.servlet.servletContextAttributeevent; import javax.servlet.servletContextAttributeleLeter; / *** @classname: myServletContextAtCrutEListener * @Description: Londice pour l'écouteur pour changer d'attribue CanGlang * @Date: 2014-9-11 10:53:04 PM ** / classe publique MyServletContextAttutTributEListener implémente ServletContextAttutTributEListener {@override public void attributeAdded (ServletConTextAttaTtribeTevent Scab) {String STR = MessageFormat.Format ("Valuver Consextext a ajouté l'attribut: {0}. {1} ", scab.getName (), scab.getValue ()); System.out.println (STR); } @Override public void attributeRemoved (servletContextAtTrributeEvent Scab) {String str = messageFormat.format ("Delete Attribut: {0} Dans l'objet Domain ServletContext, la valeur d'attribut est: {1}", scab.getName (), scab.getValue ()); System.out.println (STR); } @Override public void attributeReplaced (servletContextAtTrributeEvent Scab) {String str = MessageFormat.Format ("La valeur de l'attribut: {0} a été remplacée dans l'objet Domain ServletContext", scab.getName ()); System.out.println (STR); }}Enregistrez l'auditeur dans le fichier web.xml
<Cousiner> <Description> MyServletContextAttributeListener Écouteur </ Description> <auditeur-classe> me.gacl.web.Listener.myservletContextAttutTributleListener </ auteur-cllass> </diner>
Écrivez ServletContextAtTRIBUTELISTENTest.jsp Page de test
<% @ Page Language = "Java" Pageencoding = "UTF-8"%> <! DocType HTML> <HTML> <A-Head> <Title> ServletContextAttutTributleListener Test </ Title> </ Head> <Body> <% // Ajouter Attribute Application.SetAttribute ("Name", "Longyanglang"); // Remplacez la valeur de l'attribut de nom dans le domaine d'application application.setAttribute ("name", "gacl"); // Supprimez l'attribut de nom dans l'application d'objet de domaine d'application application.RemoveAtTribute ("nom"); %> </ body> </html>Les résultats de l'opération sont les suivants:
À partir des résultats en cours d'exécution, nous pouvons voir que l'écouteur ServletContextListener a réussi à écouter le changement de la valeur de la propriété dans l'objet de domaine ServletContext (application).
1.5. ServletRequestAttributeListener et httSessessionAttributeListener Écouteur Exemple:
Écrivez un auditeur pour surveiller les modifications des valeurs d'attribut des objets de domaine HTTPSession et httpservletRequest, le code est le suivant:
package me.gacl.web.Listener; import java.text.messageFormat; import javax.servlet.servletRequestAttributeevent; import javax.servlet.servletRequestAttutAlListener; import Javax.servlet.http. javax.servlet.http.httpSessionBindingEvent; classe publique MyRequestAndSessionAtTRributeListener implémente httpSessionAttributeListener, servleRequestAttutLeListener {@Override public void attributeAdded (servleTrequestAttributeevent srae) {String Str = Message attribut: {0}, la valeur d'attribut est: {1} ", srae.getName (), srae.getValue ()); System.out.println (STR); } @Override public void attributeReMoved (servLetRequestAtTrutEevent srae) {String str = MessageFormat.Format ("Supprimer les attributs dans l'objet de domaine ServleTrequest: {0}, la valeur d'attribut est: {1}", srae.getname (), srae.getValue ()); System.out.println (STR); } @Override public void attributeReplaced (servLetRequestAttributeevent srae) {String str = messageFormat.format ("La valeur des attributs: {0} a été remplacée dans l'objet de domaine ServleTrequest", srae.getName ()); System.out.println (STR); } @Override public void attributeAdded (httpSessionBindingEvent se) {String str = MessageFormat.format ("L'attribut: {0} a été ajouté à l'objet" httpSession Domain, la valeur d'attribut est: {1} ", se.getname (), se.getValue ()); System.out.TrLnnn (Str);} AttributeReMoved (httpSessionBindingEvent se) {String str = MessageFormat.Format ("L'attribut: {0} a été supprimé de l'objet de domaine" httpSession, la valeur d'attribut est: {1} ", se.getName (), se.getValue ()); System.out.println (STR); } @Override public void attributeReplaced (httpSessionBindingEvent se) {String str = MessageFormat.format ("La valeur de l'attribut: {0} a été remplacée dans l'objet de domaine HttSession httSession", se.getName ()); System.out.println (STR); }}Enregistrez l'auditeur dans le fichier web.xml
<Deurner> <Dcription> MyRequestAndSessionAtTributleListERner Écouteur </, description> <auditeur-classe> me.gacl.web.Listener.MyRequestandSessionAttributeleListener </ auditeur-Class> </diner>
Écrivez la demande de test et la page de test de la page
<% @ page Language = "Java" Pageencoding = "UTF-8"%> <! DocType HTML> <HTML> <A-Head> <Title> DemandeAndSessionAttributeListener Test Test </ Title> </ Head> <Body> <% // Add Attribute Session.SetAttribute ("AA", "BB"); // Remplacez la valeur de l'attribut AA dans le domaine de session Session.SetAttribute ("aa", "xx"); // Supprimez la session d'attribut AA.RemoveAtTribute ("AA"); // Ajouter un attribut request.setAttribute ("aa", "bb"); // Remplacez la valeur de l'attribut AA dans le domaine de demande request.setAttribute ("aa", "xx"); // supprimez l'attribut aa request.reMoveAtTribute ("aa"); %> </ body> </html>Les résultats de l'opération sont les suivants:
D'après les résultats de l'exécution, nous pouvons voir que l'auditeur HTTPSessionAttributeListener et ServLetRequestAttutleListener ont réussi à écouter les changements dans les valeurs d'attribut de l'objet de domaine HTTPSESSE et de l'objet de domaine HttpservletRequest.
2. Conscient de l'auditeur de l'événement lié à la session
Les objets stockés dans le domaine de session peuvent avoir plusieurs états: liaison (session.setAttribute ("bean", objet)) dans la session; non lié à (session.reMoveAtTribute ("Bean")) du domaine de session; persistant vers un périphérique de stockage avec l'objet de session; Récupération d'un périphérique de stockage avec l'objet de session. Deux interfaces d'écoute spéciaux "httSessessionBindingListener et httpSessionActivationListener" sont définies dans la spécification du servlet pour aider les objets JavaBean à comprendre leurs états dans le domaine de session:, les classes qui implémentent ces deux interfaces ne nécessitent pas d'enregistrement dans le fichier web.xml.
2.1. Interface httpSessionBindingListener
L'objet JavaBean qui implémente l'interface HTTPSessionBindingListener peut sentir qu'il est lié à la session et aux événements supprimés de la session. Lorsque l'objet est lié à l'objet HTTPSESSE, le serveur Web appelle la méthode de l'objet VOID (HTTPSessionBindingEvent) de l'objet. Lorsque l'objet est non lié à partir de l'objet HTTPSession, le serveur Web appelle la méthode VOID ValueUnbound (HTTPSessionBindingEvent Event) de l'objet.
exemple:
Package me.gacl.domain; importer javax.servlet.http.httpSessionBindingEvent; import javax.servlet.http.httpSessionBindingListener; / *** @classname: javabeANDemo1 * @Description: * L'objet Javabean qui implémente le HTTPSessionbindBindListener peut contenir l'interface de la session et la session HTTPSessionbindBindListener peut contenir l'interface de la session et la session HTTPSESSESSESSESSESS Événements supprimés de la session lorsque l'objet est lié à l'objet HTTPSession, le serveur Web appelle la méthode VOID ValueBound (HttSessionBindingEvent Event) de l'objet lorsque l'objet est lié à l'objet httpSession. Lors de la non-liaison dans l'objet, le serveur Web appelle la méthode VOID Valud ValueUnbound (HTTPSessionBindingEvent) * @Author: Lonely CanGlang * @Date: 2014-9-11 11:14:54 PM ** / classe publique JavabeANDemo1 implémente HttpSessionBinDingListener {private String name; @Override public void ValueBound (événement httpSessionBindingEvent) {System.out.println (name + "a été ajouté à la session"); } @Override public void ValueUnbound (événement httpSessionBindingEvent) {System.out.println (name + "Kiked Out by Session"); } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public javabeANDemo1 (String name) {this.name = name; }}Le javabeANDEMO1 ci-dessus Javabean implémente l'interface httpSessionBindingListener, de sorte que cet objet Javabean peut sentir qu'il est lié à la session et supprimé de la session. Le code de test est le suivant:
<% @ Page Language = "Java" Pageencoding = "UTF-8"%> <% @ Page Import = "Me.gacl.domain.javabeANDEMO1"%> <! Doctype Html> <Html> <A-Head> <Title> </ Title> </ Head> <% ", NEW, New JavabeANDEMO1 ("Lonely Canagang")); // RemoveAttribute ("Bean"); %> </ body> </html>Les résultats de l'opération sont les suivants:
2.2. Interface httpSessionActivationListener
L'objet JavaBean qui implémente l'interface HttSessionActivationListener peut se sentir pour être activé (désérialisé) et passivé (sérialisé). Avant que l'objet JavaBean lié à l'objet HTTPSession ne soit passivé (sérialisé) avec l'objet HTTPSESSE, le serveur Web appelle le vide SessionWillPassivate (événement httpSessionEvent) de l'objet JavaBean. De cette façon, l'objet Javabean peut savoir qu'il sera sérialisé (passif) au disque dur avec l'objet httpSession.
Une fois que l'objet JavaBean lié à l'objet HTTPSESSIE doit être activé (désérialisé) avec l'objet HTTPSession, le serveur Web appelle la méthode void SessionDidActive (événement HTTPSessionEvent) de l'objet Javabean. De cette façon, l'objet Javabean peut savoir qu'il sera désérialisé (activé) et renvoyé en mémoire avec l'objet HTTPSESSION.
exemple:
package me.gacl.domain; import java.io.serializable; import javax.servlet.http.httpSessionAntivationListener; import javax.servlet.http.httpSessionEvent; / *** @classname: javabeANDemoMo L'activation de l'événement qu'il est activé et passif: l'objet JavaBean et la session sont désérialisés (activés) en mémoire ensemble. Passivation: l'objet Javabean existe dans la session. Lorsque le serveur sérialise la session sur le disque dur, si l'objet Javabean dans la session implémente l'interface sérialisable, le serveur sérialisera l'objet JavaBean dans la session vers le disque dur. Le fonctionnement de l'objet Javabean et la session sur le disque dur est appelé passivation. Si l'objet Javabean de la session n'implémente pas l'interface sérialisable, le serveur supprime d'abord l'objet JavaBean dans la session qui n'implémente pas l'interface sérialisable, puis sérialise (passivate) la session sur le disque dur. Lorsque l'objet JavaBean lié à l'objet httpSession sera passivé avec l'objet httpSession, le serveur Web appelle le vide de l'objet JavaBean avant l'objet JavaBean lié à l'objet httpSession est passivé avec l'objet httpSession. Méthode SessionWillPassivate (HttpSessionEvent Event) afin que l'objet JavaBean puisse savoir qu'il sera sérialisé (passif) avec l'objet httpSession au disque dur. Après que l'objet JavaBean lié à l'objet HTTPSession sera activé avec l'objet HTTPSession, le serveur Web appelle la méthode void SessionDidActive (HttSessionEvent Event) de l'objet JavaBean afin que l'objet JavaBean puisse savoir dans la mémoire * @Autor 11:22:35 PM ** / Classe publique JavaBeAndemo2 implémente httpSessionActivationListener, Serializable {private static final SerialVersionUID = 7589841135210272124l; nom de chaîne privé; @Override public void sessionwillpassivate (httpSessionEvent se) {System.out.println (name + "et session sont sérialisés (passifs) sur le disque dur ensemble. L'ID de la session est:" + se.getSession (). GedId ()); } @Override public void sessionDidActivate (httpSessionEvent se) {System.out.println (name + "et session sont désérialisés (activés) à partir du disque dur ensemble. L'ID de la session est:" + se.getSession (). GedId ()); } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public javabeANDEMO2 (nom de chaîne) {this.name = name; }}Afin d'observer le processus de l'objet JavaBean lié à l'objet HTTPSESSION étant passivé au disque dur et réactivé du disque dur à la mémoire, nous devons utiliser le serveur Tomcat pour nous aider à terminer le processus de passivation et d'activation de l'objet HTTPSESSE. Les méthodes spécifiques sont les suivantes:
Créez un fichier context.xml dans le dossier webroot / meta-inf comme suit:
Le contenu du fichier context.xml est le suivant:
<Context> <manager classname = "org.apache.catalina.session.persistentManager" maxidleswap = "1"> <store classname = "org.apache.catalina.session.fileStore" Directory = "GACL" /> </a manager> </ptext>
Après 1 minute de configuration dans le fichier context.xml, passivez l'objet HTTPSession dans un dossier GACL sur le disque dur local
Le code de test JSP est le suivant:
<% @ page Language = "Java" pageEncoding = "UTF-8"%> <% @ page import = "me.gacl.domain.javabeNdemo2" %> <! Doctype html> <html> <adead> <ititle> </ title> </ head> <body> Dès que vous accédez à la page JSP, HTTPSession est créée. L'ID de la session créée est: $ {pageContext.Session.id} <hr /> <% session.setAttribute ("Bean", new JavaBeANDEMO2 ("Lonely and Fierly")); %> </ body> </html>Lorsque vous accédez à cette page JSP, le serveur créera immédiatement un objet HTTPSession, puis liera l'objet Javabean qui implémente l'interface HTTPSessionActivationListener à l'objet Session. Après avoir attendu 1 minute, personne n'accédera à nouveau à cette page JSP, et le serveur passivera automatiquement (sérialiser) l'objet HTTPSESSE au disque dur.
Nous pouvons trouver la session sérialisée en stockage local dans le travail Work / Catalina / LocalHost / Javaweb_Listener_20140908 / GACL, comme indiqué sur la figure ci-dessous:
Lorsque vous accédez à nouveau à cette page JSP, le serveur réactivera automatiquement (désérialiser) l'objet HTTPSession sur le disque dur et le renvoie en mémoire. Les résultats de l'opération sont les suivants:
Il n'y a que tellement de contenu dans la technologie des auditeurs dans la technologie de développement de Javaweb. Dans le travail quotidien, la technologie des auditeurs est utilisée plus fréquemment dans le développement de projets Javaweb, vous devez donc maîtriser cette technologie.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.