1. Überwachen Sie Einführung
1.1. Das Konzept des Zuhörers
Ein Hörer ist ein Objekt, das speziell zum Hören und Verarbeiten von Ereignissen oder Statusänderungen verwendet wird, die bei anderen Objekten auftreten. Wenn im überwachten Objekt eine Situation auftritt, werden sofort entsprechende Maßnahmen ergriffen. Ein Hörer ist eigentlich ein gewöhnliches Java -Programm, das eine bestimmte Schnittstelle implementiert. Dieses Programm wird speziell verwendet, um auf Methodenaufrufe oder Eigenschaftenänderungen eines anderen Java -Objekts zu hören. Wenn das obige Ereignis im angehenden Objekt stattfindet, wird sofort eine bestimmte Methode des Hörers ausgeführt.
1.2. Hörer Fall-Event Listener Hören Sie Fenster Fenster an
Paket me.gacl.listener.demo; Import Java.awt.Frame; Import Java.awt.event.WindowEvent; Import Java.awt.event.Windowlistener; Public Class Demo1 { /***Java -Ereignis -Hörmechanismus*1. Ereignishörer umfasst drei Komponenten: Ereignisquelle, Ereignisobjekt, Ereignislistener*2. Wenn eine Aktion auf der Ereignisquelle erfolgt, wird eine Methode des Ereignishörers aufgerufen und das Ereignisobjekt in die Methode übergeben. * Entwickler können die Ereignisquelle über das Ereignisobjekt im Hörer erhalten und so auf der Ereignisquelle arbeiten. */ public static void main (String [] args) {Frame f = new Frame (); F.Setsize (400, 400); f.setvisible (true); // Ereignislistener registrieren. // das Ereignisobjekt über Ereignisobjekte EFRAME f = (Frame) E.getSource (); windowOPED (windowEvent e) {}}); }}1.3. Entwerfen Sie ein Objekt, das von anderen Objekten angehört werden kann
Wenn wir uns entwickeln, schreiben wir Zuhörern, um andere Objekte zu überwachen. Was sollten wir also tun, wenn wir ein Objekt entwerfen möchten, damit dieses Objekt von anderen Objekten angehört werden kann? Wir können ein Objekt gemäß einem strengen Ereignisverarbeitungsmodell entwerfen, und dieses Objekt kann von anderen Objekten angehört werden. Das Ereignisverarbeitungsmodell umfasst drei Komponenten: Ereignisquelle, Ereignisobjekt und Ereignishörer.
Entwerfen wir ein Personenobjekt gemäß dem Ereignisverarbeitungsmodell. Der spezifische Code lautet wie folgt:
Paket me.gacl.observer;/*** @className: Person (Ereignisquelle)* @Description: Entwerfen Sie eine Personklasse als Ereignisquelle. Das Verhalten der Objekte dieser Klasse (z. B. Essen, Laufen) kann von anderen Objekten angehört werden* @Author: Lonely canglang* @date: 2014-9-9 9:26:06 PM **/ Public Class Person {/ *** @field: Hörer* Definieren Sie eine Personierer-Variable in der Person, um sich an die übergepasste Hörer zu erinnern. /** * @Method: Eat * @Description: Verhalten der Entwurfsperson: Eat * @anthor: Die einsame und Arroganz * * /public void eat () {if (Hörer! = Null) { /** * rufen Quelle*/ listener.doeat (neues Ereignis (this)); }} /*** @Method: run* @Description: Verhalten der Designperson: Run* @anthor: Die einsame und arroganz** /public void run () {if (louser! * Das Ereignisobjekt fasst die Ereignisquelle zusammen, und diese in neuem Ereignis (dies) repräsentiert die Ereignisquelle*/ listener.dorun (neues Ereignis (this)); }} / ** * @Method: RegisterListener * @Description: Diese Methode wird verwendet, um einen Hörer zu registrieren, der das Verhalten von Personenklassen -Objekten hört }}/*** @className: PersonListener (Ereignishörer)* @Description: Entwerfen Sie die Hörer-Schnittstelle für Personklasse (Ereignisquelle)* @Author: Lonely canglang* @date: 2014-9-9-9 9:28:06 Uhr **/Schnittstelle PersonListener {/** @Method: @ @@Description. * Wenn die Implementierungsklasse die DOEAT -Methode implementiert, können Sie die Wirkung von Personenklassen -Objekten (EAT) überwachen * @Anthor: Lonely canglang * * @param e */ void doeat (Ereignis E); /** * @Method: Dorun * @Description: Diese Methode wird verwendet, um das Verhalten von Person -Objektläufen (Lauf) anzuhören. * Wenn die Implementierungsklasse die Dorun -Methode implementiert, können Sie sich die Aktion von Personenklassen -Objektläufen anhören. } public person getource () {return source; } public void setSource (Person Source) {this.source = Source; }}Nach einem solchen Design können Objekte der Peron -Klasse von anderen Objekten angehört werden. Der Testcode lautet wie folgt:
Paket me.gacl.observer; personenbeschäftigte personentest { / ** * @Method: main * @Description: Test Person Klasse * @anthor: Der arrogante Wolf * * @param args * / public static void main (String [] args) {// person p = new Person (); // Registrieren Sie den Hörer, der das Verhalten von P -Objekten P -Objekte hört. System.out.println (p + "essen"); // p essen p.eat (); // p laufe p.run (); }}Auslaufergebnisse:
me.gacl.observer.person@4a5ab2 isst me.gacl.observer.person@4a5ab2 läuft
2. Zuhörer in Javaweb
2.1. Grundkonzepte
Zuhörer in Javaweb sind eine spezielle Klasse, die in der Servlet -Spezifikation definiert ist. Sie werden verwendet, um auf Erschaffungs- und Zerstörungsereignisse von Domänenobjekten wie ServletContext, HTTPSession und ServletRequest in Webanwendungen sowie auf Ereignisse zuzuhören, bei denen Eigenschaften in diesen Domänenobjekten geändert werden.
2.2. Klassifizierung von Servlet -Zuhörern
In der Servlet -Spezifikation sind mehrere Arten von Zuhörern definiert. Die für das Zuhören verwendeten Ereignisquellen sind ServletContext, httpSession und ServletRequest. Die Servlet -Spezifikation unterteilt mehrere Arten von Hörern in drei Arten für Operationen für diese drei Objekte:
• Ereignishörer, der die Erstellung und Zerstörung des Domain -Objekts selbst hört.
• Ereignishörer, der zum Hinzufügen und Löschen von Eigenschaften in Domänenobjekten hört.
• Ein Ereignishörer, der den Status eines Objekts in der HttpSession -Domäne hört.
2.3. Hören Sie sich die Schöpfung und Zerstörung von ServletContext -Domänenobjekten an
Die ServletContextListener -Schnittstelle wird verwendet, um die Erstellung und Zerstörungsereignisse von ServletContext -Objekten zuzuhören. Alle Klassen, die die ServletContextListener -Schnittstelle implementieren, können die Erstellung und Zerstörung von ServletContext -Objekten anhören.
• Wenn das ServletContext -Objekt erstellt wird, wird die kontextinitialisierte (servletContexevent scet) -Methode abgefeuert.
• Wenn das ServletContext -Objekt zerstört wird, wird die kontextdestryed (servletContexevent scet) -Methode aktiviert.
• Zeit für das Erstellen und Zerstören von Domänenobjekten von ServletContext:
Create: Server Startup erstellt ServletContext für jede Webanwendung
Zerstörung: Schließen Sie den ServletContext, der jede Webanwendung darstellt, bevor der Server geschlossen ist.
Beispiel: schreiben
1. Schreiben Sie einen Hörer mit dem folgenden Code:
Paket me.gacl.web.Listener; importieren javax.servlet.servletContexeVvent; importieren Sie Javax.servlet.servletContextListener;/*** @ClassName: MyServletContextListener* @Description: Die MyServletContext -Klassen. ServletContext -Objekt. * @Author: Der stolze Wolf* @date: 2014-9-9 10:26:16 PM **/ public class myServletContextListener implementiert servletContextListener {@Override public void contextinitialized (ServletContexTevent Scet). } @Override public void contextDestroyed (servletContexevent scet) {System.out.println ("ServletContext -Objektzerstörung"); }}2. Registrieren Sie den Hörer in der Datei web.xml
Wir haben oben erwähnt, dass Sie den Hörer an die Ereignisquelle registrieren müssen, um die Aktion der Ereignisquelle zu überwachen, um die Ereignisquellen zuzuhören. In Javaweb ist die Hörregistrierung wie folgt in der Datei web.xml konfiguriert:
<? XSI: Schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_30.xsd" <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- Register a listener for listening to ServletContext objects --> <listener> <description>ServletContextListener listener</description> <!--Receiver class that implements the ServletContextListener interface --> <Hörer-Class> me.gacl.web.Listener.MyServletContextListener </Listener-Class> </Listener> </web-App>
Nach diesen beiden Schritten haben wir das Schreiben und die Registrierung des Zuhörers abgeschlossen. Wenn der Webserver startet, registriert er automatisch den in web.xml konfigurierten Listener im ServletContext -Objekt. Auf diese Weise kann der entwickelte MyServletContextListener -Listener das ServletContext -Objekt anhören.
2.4. Hören Sie sich die Schöpfung und Zerstörung von HTTPSession -Domain -Objekten an
Die HttpSessionListener -Schnittstelle wird verwendet, um die Erstellung und Zerstörung von HTTPSession -Objekten anzuhören. Beim Erstellen einer Sitzung wird die Methode "Session Created (httpSessionEvent) bei der Zerstörung einer Sitzung aktiviert, und die Methode SessionDestroyed (httpSessionEvent) wird aktiviert.
Beispiel: Schreiben Sie eine MyHttpSessionListener -Klasse, implementieren
1. Schreiben Sie einen Hörer mit dem folgenden Code:
package me.gacl.web.listener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;/*** @ClassName: MyHttpSessionListener* @Description: The MyHttpSessionListener class implements the HttpSessionListener interface, * Therefore, the two actions of creating and Die Zerstörung des HTTPSession -Objekts kann angehört werden. * @Author: The Lonely canglang* @date: 2014-9-9 11:04:33 PM **/ öffentliche Klasse myhttpSessionListener implementiert httpSessionListener {@Override public void sessioncreated (httpSessionEvent se) {system.println (se.s.getsSession () + "). }/* Die Zerstörungszeit von HttpSession muss wie folgt in Web.xml konfiguriert werden:* <Session-Config> <Session-Timeout> 1 </Session-Timeout> </sessions-config> Diese Konfiguration bedeutet, dass die Sitzung nach 1 Minute*/@override öffentlicher Sitzungsstörungen (httpSessioned SESSessioned SESSELDED SESSELDED). }}2. Registrieren Sie den Hörer in der Datei web.xml
<!-Registrieren Sie den Hörer zum Anhören von HttpSession-Objekten-> <Hörer> <BEKRÜSUNG> httpSessionListener-Hörer </Beschreibung> <Listener-Klasse> me.gaCl.web.Listener.MyHttpSessionListener </Hörer-Class> </Hörer> <! HTTPSession-Objekt-> <Session-Config> <!-Konfigurieren Sie die Zerstörung des HttpSession-Objekts 1 Minute später
Wenn wir auf die JSP -Seite zugreifen, wird das HTTPSession -Objekt erstellt. Zu diesem Zeitpunkt können wir den Erstellungsprozess des HttpSession -Objekts im httpSessionListener beobachten. Wir können eine JSP -Seite schreiben, um den Erstellungsprozess des HTTPSession -Objekts zu beobachten.
Wie folgt: index.jsp
< %@ page Language = "java" import = "java.util. Die ID der erstellten Sitzung lautet: $ {pageContext.Session.id} </body> </html>Die Betriebsergebnisse sind wie folgt:
2.5. Hören Sie sich die Schöpfung und Zerstörung von ServletRequest -Domain -Objekten an
Wenn die ServletRequestListener -Schnittstelle verwendet wird, um die Erstellung und Zerstörung des ServletRequest -Objekts anzuhören, wird die RequestInitialisierte (ServletRequestevent SRE) -Methode des Hörers aufgerufen. Wenn das Anforderungsobjekt zerstört wird, wird die Methode des RequestDestroyed (ServletRequestevent SRE) des Hörers aufgerufen.
ServletRequest Domain -Objekt Erstellung und Zerstörung Timing:
Erstellen: Jedes Mal, wenn der Benutzer besucht, wird das Anforderungsobjekt erstellt, das Anforderungsobjekt wird zerstört: Der aktuelle Zugriff ist vorbei, das Anforderungsobjekt wird zerstört.
Beispiel: Schreiben Sie eine MyServletRequestListener -Klasse, implementieren Sie die ServletRequestListener -Schnittstelle, hören Sie sich die Erstellung und Zerstörung von ServletRequest -Objekten an
1. Schreiben Sie einen Hörer mit dem folgenden Code:
Paket me.gacl.web.Listener; importieren javax.servlet.servletRequestEvent; importieren javax.servlet.servletRequestListener;/*** @ClassName: MyServletrequestListener* @Description: Die MyServletrequestlisten -Klassen implementiert die Deljequestlisten -DistroctrequestListen -DistroctrequestListen -Distroctrequestlisten. ServletRequest -Objekt. * @Author: Der stolze Wolf* @Date: 2014-9-9 11:50:08 PM **/ öffentliche Klasse MyServletRequestListener implementiert ServletRequestListener {@Override public void void RequestDestroyed (ServletRequestEvent Sre) {system.out.println (sre.getServletrequest () + "). } @Override public void requestInitialized (servletRequestEvent sre) {System.out.println (sre.getServletRequest () + "erstellt !!"); }}2. Registrieren Sie den Hörer in der Datei web.xml
<!-Registrieren Sie den Hörer, wenn Sie das ServletRequest-Objekt anhören-> <Hörer> <Bription> servletRequestListener-Listener </Beschreibung> <Hörer-Klasse> me.gacl.web.Listener.myServletRequestListener </listener-classe> </listener>
Die Testergebnisse sind wie folgt:
Aus dem Laufergebnis können wir feststellen, dass der Benutzer jedes Mal, wenn er zugreift, ein Anforderungsobjekt erstellt und das Anforderungsobjekt nach Abschluss des Zugriffs zerstört wird.
Das obige ist eine kurze Erklärung des Hörers.