1. Hörer, der Änderungen der Eigenschaften in Domänenobjekten hört
Der Ereignishörer für die Änderung von Attributen in Domänenobjekten ist der Hörer, um die Attributänderungsinformationsereignisse in den drei Objekten zu hören: ServletContext, httpSession und httpServletRequest.
Diese drei Hörer -Schnittstellen sind servletContextAttributelistener, httpSessionattributelistener und servletRequestattributelistener. Alle drei Schnittstellen definieren drei Methoden, um die Ereignisse zu verarbeiten, die Attribute im angehörten Objekt erhöhen, löschen und ersetzen. Die entsprechenden Methodennamen desselben Ereignisses in diesen drei Schnittstellen sind genau gleich, die akzeptierten Parameter sind jedoch unterschiedlich.
1.1. Methode zuzuschreiben
Beim Hinzufügen eines Attributs zum angehenden Objekt antwortet der Webcontainer, indem Sie die Attribute -Methode des Ereignishörers aufrufen. Diese Methode empfängt einen Parameter vom Ereignisart. Der Hörer kann das Domänenobjekt erhalten, das Attribute hinzufügt, und die in der Domäne gespeicherten Attributobjekte. Die vollständige Syntaxdefinition jedes Domänenattribut -Listeners lautet wie folgt:
public void Attributeded (ServletContextAttributeEvent Scae) Public Void Attributeeplaced (httpSessionBindingEvent HSBE) Öffentliche Void Attributermoved (ServletRequestAtributeEvent SRAE)
1.2. Attributtern -Methode
Beim Löschen eines Attributs im zugehörigen Objekt ruft der Web -Container die zu Attributtern -Methode des Ereignishörers auf, um auf die vollständige Syntax -Definition im Attribut -Listener in jeder Domäne zu antworten:
Public Void AttruterMoved (ServletContextAtTributeEvent Scae) Public Void AttruterMoved (httpSessionBindingEvent HSBE) Public Void AttruterMoved (ServletRequestAttributeEvent Srae)
1.3. AttributeePlaced -Methode
Wenn ein bestimmtes Attribut im Domänenobjekt des Listeners ersetzt wird, ruft der Web -Container die Methode des Ereignishörers auf, um auf die vollständige Syntax -Definition in jedem Domänenattribut -Hörer zu reagieren:
public void attributeeplaced (servletContextAttributeEvent Scae) Public Void Attributeeplaced (httpSessionBindingEvent HSBE) Public Void Attributeeplaced (servletRequestAttributeEvent srae)
1.4. ServletContextAttributelistener -Hörer Beispiel:
Schreiben Sie einen ServletContextAttributelistener -Listener, um die Änderungen der Attributwerte von ServletContext -Domänenobjekten zu überwachen. Der Code ist wie folgt:
package me.gacl.web.listener;import java.text.MessageFormat;import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;/*** @ClassName: MyServletContextAttributeListener* @Description: Event listener for changing attributes in ServletContext Domain-Objekt* @Author: Lonely canglang* @Date: 2014-9-11 10:53:04 PM **/ public class MyServletContextAttributelistener implementiert servletContextattributelistener {@Override public void attributeded (servletContextatTribUTEvent) {String-Sting-Format (servletContextatTributeeTeeTeeTeeTeeTeeTeeTeeTeeTeeT) {String stratesformat. hat das Attribut hinzugefügt: {0}, Attributwert ist: {1} ", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void attributeremoved (ServletContextAtTributeEvent scab) {string str = messageFormat.format ("Attribut löschen: {0} im ServletContext -Domain -Objekt, der Attributwert ist: {1}", Scab.getName (), Scab.getValue (); System.out.println (str); } @Override public void attributePlate (ServletContextAtTributeEvent scab) {string str = messageFormat.format ("Der Wert von Attribut: {0} wurde im ServletContext -Domain -Objekt ersetzt", Scab.getName ()); System.out.println (str); }}Registrieren Sie den Hörer in der Datei web.xml
<Hörer> <BEKRESCHNISS> MyServletContextAtTribUTelistener Listener </Beschreibung> <Hörer-Klasse> me.gacl.web.Listener.MyServletContextAtTributelistener </Listener-Klasse> </Listener>
Schreiben Sie ServletContextAttributelistentest.jsp Testseite
<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML><html> <head> <title>ServletContextAttributeListener Listener Test</title> </head> <body> <% //Add attribute application.setAttribute("name", "Longyanglang"); // Ersetzen Sie den Wert des Namensattributs in der Anwendungsdomänen -Objekt -Anwendung. // Entfernen Sie das Namensattribut in der Anwendungsdomänenobjektanwendung. RemoveAttribute ("Name"); %> </body> </html>Die Betriebsergebnisse sind wie folgt:
Aus den laufenden Ergebnissen können wir feststellen, dass der ServletContextListener -Listener erfolgreich die Änderung des Eigenschaftswerts im ServletContext -Domain -Objekt (Anwendung) hat.
1.5. ServletRequestattributelistener und httpSessionattributelistener -Hörer Beispiel:
Schreiben Sie einen Hörer, um die Änderungen der Attributwerte von httpSession und httpServletRequest -Domain -Objekten zu überwachen. Der Code lautet wie folgt:
Paket me.gacl.web.Listener; import Java.text.MessageFormat; import Javax.servlet.servletRequestattributeEvent; import Javax.servlet javax.servlet.http.HttpSessionBindingEvent;public class MyRequestAndSessionAttributeListener implements HttpSessionAttributeListener, ServletRequestAttributeListener { @Override public void attributeAdded(ServletRequestAttributeEvent srae) { String str =MessageFormat.format( "ServletRequest Domänenobjekt hat Attribut hinzugefügt: {0}, Attributwert ist: {1} ", srae.getName (), srae.getValue ()); System.out.println (str); } @Override public void AttruterMoved (servletRequestAttributeEvent srae) {String str = messageFormat.Format ("Attribute im ServletRequest -Domänenobjekt entfernen: {0}, der Attributwert ist: {1}", Srae.getname (), srae.getValue (); System.out.println (str); } @Override public void attributePlated (ServletRequestAttributeEvent srae) {String str = messageFormat.format ("Der Wert von Attributen: {0} wurde im ServletRequest -Domain -Objekt ersetzt", Srae.getName ()); System.out.println (str); } @Override public void attributeEdded (httpSessionBindingEvent SE) {String str = messageFormat.format ("Das Attribut: {0} wurde zum" HttpSession -Domain -Objekt "hinzugefügt. Attributeremoved (httpSessionBindingEvent se) {string str = messageFormat.format ("Das Attribut: {0} wurde aus dem" HttpSession -Domänenobjekt "gelöscht, der Attributwert ist: {1}", se.getName (), se.getValue (); System.out.println (str); } @Override public void attributePlate (httpSessionBindingEvent SE) {String str = messageFormat.format ("Der Wert von Attribut: {0} wurde im HttpSession -Domain -Objekt ersetzt", se.getname ()); System.out.println (str); }}Registrieren Sie den Hörer in der Datei web.xml
<Hörer> <BEKRESCHUNG> MyRequestandSessionAttributelistener Listener </Beschreibung> <Hörer-Klasse> me.gacl.web.Listener.myRequestandSessionattributelistener </Listener-Klasse> </Listener>
RequestAndSessionAttributelistentest.jsp Test Page schreiben
<%@ page Language = "java" pageCoding = "utf-8"%> <! docType html> <html> <Head> <title> RequestAndSessionAtTributelistener-Hörer-Test </title> </head> <%// addatTatTribute addieren ("AA" are "); // Ersetzen Sie den Wert des AA -Attributs in der Sitzungsdomänenobjekt -Sitzung. // Entfernen Sie die AA -Attribut -Sitzung.removeAttribute ("AA"); // Attributanforderung hinzufügen. // Ersetzen Sie den Wert des AA -Attributs in der Anforderungsdomänenobjektanforderung. // Entfernen Sie die AA -Attributanforderung. RemoveAttribute ("AA"); %> </body> </html>Die Betriebsergebnisse sind wie folgt:
Aus den Run -Ergebnissen können wir sehen, dass der HTTPSessionAttributelistener -Hörer und ServletRequestAttributelistener die Änderungen in den Attributwerten des HTTPSession -Domain -Objekts und des HTTPServletRequest -Domänenobjekts erfolgreich angehört haben.
2. Kennen Sie den Event -Hörer, der an die Sitzung gebunden ist
In der Sitzungsdomäne gespeicherte Objekte können mehrere Zustände haben: Bindung (Sitzung.Setattribute ("Bean, Objekt)) in die Sitzung; ungebindend (Session.removeAttribute ("Bean")) aus der Sitzungsdomäne; Auf einem Speichergerät mit dem Sitzungsobjekt bestehen; Wiederherstellung von einem Speichergerät mit dem Sitzungsobjekt. Zwei spezielle Hörer -Schnittstellen "httpSessionBindingRistener und httpSessionActivationListener" werden in der Servlet -Spezifikation definiert, um Javabäen -Objekten zu helfen, ihre Zustände in der Sitzungsdomäne zu verstehen: Klassen, die diese beiden Schnittstellen implementieren, müssen keine Registrierung in der Web.xml -Datei erfordern.
2.1. HttpSessionBindingListener -Schnittstelle
Javaban -Objekt, das die HttpSessionBindingListener -Schnittstelle implementiert, kann erkennen, dass sie an die Sitzung gebunden ist und Ereignisse in der Sitzung gelöscht hat. Wenn das Objekt an das HTTPSession -Objekt gebunden ist, ruft der Webserver die Methode des void Valuebound (httpSessionBindingEvent Event) des Objekts auf. Wenn das Objekt aus dem HTTPSession -Objekt entkernt ist, ruft der Webserver die Methode Void ValueUnbound (httpSessionBindingEvent) des Objekts auf.
Beispiel:
Paket me.gacl.domain; import Javax.servlet.http.httpSessionBindingEvent; import Javax.servlet.http.httpSessionBindingListener. Löschte Ereignisse aus der Sitzung Wenn das Objekt an das HTTPSession -Objekt gebunden ist, ruft der Webserver die Methode des void Valuebound (httpSessionBindingingEvent) des Objekts auf, wenn das Objekt an das HTTPSession -Objekt gebunden ist. Wenn der Webserver die ungebundene ValueUnbound (httpSessionBindingEvent-Ereignis) des Objekts aufruft, nennt er das Objekt. @Override public void valueBound (httpSessionBindingEvent Ereignis) {System.out.println (Name+"wurde zur Sitzung hinzugefügt"); } @Override public void valueUnbound (httpSessionBindingEvent Ereignis) {System.out.println (Name+"Von Sitzung ausgeschaltet"); } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public JavaBeandemo1 (String -Name) {this.name = name; }}Die obigen JavabeAnDemo1 -Javabäer implementiert die Schnittstelle httpSessionBindingListener, sodass dieses JavaBean -Objekt spüren kann, dass es an die Sitzung gebunden und aus der Sitzung gelöscht wird. Der Testcode lautet wie folgt:
<%@ page Language = "java" pageCoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeAnDemo1"%> <! docType html> <html> <Head> <titel> </title> </head> <%// Binding the Session JavabeankDemo1 ("Lonely canglang")); // removeTtribute ("Bean"); %> </body> </html>Die Betriebsergebnisse sind wie folgt:
2.2. HttpSessionActivationListener -Schnittstelle
Das Javabäe -Objekt, das die HttpSessionActivationListener -Schnittstelle implementiert, kann sich selbst als aktiviert (deserialisiert) und passivierten (serialisierten) Ereignisse erkennen. Bevor das an das HTTPSSession -Objekt gebundene Javabäe -Objekt mit dem HTTPSession -Objekt (serialisiert) passiviert wird, ruft der Webserver die Methode des void sessionsWillivate (httpSessionEvent) des Javaban -Objekts auf. Auf diese Weise kann das javabäische Objekt wissen, dass es mit dem HttpSession -Objekt auf die Festplatte serialisiert (passiv) wird.
Nachdem das an das HTTPSSession -Objekt gebundene JavaBean -Objekt mit dem HTTPSession -Objekt aktiviert (deserialisiert) werden soll, ruft der Webserver die Methode void SessionDidActive (HTTPSSessionEvent) -Methode des JavaBean -Objekts auf. Auf diese Weise kann das javabäische Objekt wissen, dass es mit dem HTTPSession -Objekt deserialisiert (aktiviert) wird und in den Speicher zurückgeführt wird.
Beispiel:
package me.gacl.domain;import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionEvent;/*** @ClassName: JavaBeanDemo2* @Description: JavaBean object that implements the HttpSessionActivationListener interface can Nehmen Sie die Aktivierung des Ereignisses wahr, dass es aktiviert und passiv ist: Das Javabäe -Objekt und die Sitzung werden gemeinsam deserialisiert (aktiviert) in das Gedächtnis. Passivierung: Das javabäische Objekt existiert in der Sitzung. Wenn der Server die Sitzung mit der Festplatte serialisiert, wird der Server das javabäische Objekt in der Sitzung zusammen mit der serialisierbaren Schnittstelle in der Sitzung mit der serialisierbaren Schnittstelle serialisiert, wenn das javabäische Objekt in der Sitzung implementiert. Der Betrieb des Javabäenobjekts und die Sitzung auf die Festplatte zusammen wird als Passivierung bezeichnet. Wenn das javabäische Objekt in der Sitzung die serialisierbare Schnittstelle nicht implementiert, entfernen der Server das javabäische Objekt zuerst in der Sitzung, die die serialisierbare Schnittstelle nicht implementiert, und dann die Sitzung auf die Festplatte serialisieren (passivieren). Wenn das an das HTTPSSession -Objekt gebundene Javabäe -Objekt mit dem HttpSession -Objekt passiviert wird, ruft der Webserver die Leere des Javabäen -Objekts auf, bevor das an das HTTPSSession -Objekt gebundene Javabäe -Objekt mit dem HTTPSession -Objekt passiviert wird. Die Methode mit Sitzungen (httpSessionEvent) (httpSessionEvent), sodass das Javabäe -Objekt wissen, dass es mit dem HttpSession -Objekt auf die Festplatte serialisiert wird (passiv). Nachdem das an das HttpSession-Objekt gebundene Javabäe-Objekt mit dem HttpSession-Objekt aktiviert wurde, ruft der Webserver die Methode des void sessionDidactive (httpSessionEvent) des Javabäen-Objekts auf, so dass das Javaban-Objekt wissen kann, dass es mit dem HTtpsan-Objekt wieder in Erinnerung bleiben wird. 11:22:35 PM **/ öffentliche Klasse JavabeAneDemo2 implementiert httpSessionActivationListener, serialisierbar {private statische endgültige lange Serialversionuid = 7589841135210272124L; privater Zeichenfolge Name; @Override public void sessionsWillivate (httpSessionEvent SE) {System.out.println (Name+"und Sitzung werden zusammen serialisiert (passiv) auf der Festplatte zusammen. Die ID der Sitzung lautet:"+se.getSession (). GetId ()); } @Override public void sessionDidAcTivate (httpSessionEvent SE) {System.out.println (Name+"und die Sitzung werden von der Festplatte zusammen deeserialisiert (aktiviert). Die ID der Sitzung lautet:"+se.getSession (). } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public JavaBeandemo2 (String -Name) {this.name = name; }}Um den Prozess des an das HTTPSession -Objekt gebundenen Javabäe -Objekts zu beobachten, das an die Festplatte passiviert und von der Festplatte in den Speicher reaktiviert wird, müssen wir den Tomcat -Server verwenden, um uns zu helfen, den Passivierungs- und Aktivierungsprozess des HTTPSession -Objekts zu vervollständigen. Die spezifischen Methoden sind wie folgt:
Erstellen Sie eine context.xml-Datei im Ordner webroot/meta-inf wie folgt:
Der Inhalt der Datei context.xml ist wie folgt:
<Context> <Manager ClassName = "org.apache.catalina.session.PersistentManager" maxidleswap = "1"> <Store className = "org.apache.catalina.session.filestore" Directory = "GaCl"/> </Manager> </context>
Nach 1 Minute Konfiguration in der Datei context.xml passen das HTTPSession -Objekt in einen GaCl -Ordner auf der lokalen Festplatte ein
Der JSP -Testcode lautet wie folgt:
<%@ page Language = "java" pageCoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeAnDemo2"%> <! docType html> <html> <kopf> </title> </head> <body>, sobald Sie auf die Seite von JSP zugreifen. Die ID der erstellten Sitzung lautet: $ {pageContext.Session.id} <hr/> <% Session.setAttribute ("Bean", New JavabeAnDemo2 ("Lonely and Stoly")); %> </body> </html>Beim Zugriff auf diese JSP -Seite erstellt der Server sofort ein HTTPSession -Objekt und binden dann das Javaban -Objekt, das die HTTPSessionActivationListener -Schnittstelle an das Sitzungsobjekt implementiert. Nach 1 Minute wartet niemand wieder auf diese JSP -Seite, und der Server passiviert automatisch das HTTPSession -Objekt auf die Festplatte.
Wir finden die Sitzung, die im lokalen Speicher im Tomcat -Server serialisiert ist, in den Work/Catalina/localhost/javaweb_Listener_20140908/gaCl -Ordner, wie in der Abbildung unten gezeigt:
Bei erneutem Zugriff auf diese JSP -Seite reaktiviert der Server das HTTPSession -Objekt auf der Festplatte automatisch (Deserialize) und gibt es in den Speicher zurück. Die Betriebsergebnisse sind wie folgt:
Die Hörer -Technologie in der Javaweb -Entwicklungstechnologie gibt es nur so viel Inhalt. In der täglichen Arbeit wird die Hörer -Technologie häufiger in der Javaweb -Projektentwicklung eingesetzt, sodass Sie diese Technologie beherrschen müssen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.