1. 모니터 소개
1.1. 청취자의 개념
리스너는 다른 객체에서 발생하는 이벤트 또는 상태 변경을 듣고 처리하는 데 특별히 사용되는 객체입니다. 모니터링 된 객체에서 상황이 발생하면 해당 조치가 즉시 취해집니다. 청취자는 실제로 특정 인터페이스를 구현하는 일반적인 Java 프로그램입니다. 이 프로그램은 특별히 다른 Java 객체의 메소드 호출 또는 속성 변경을 듣는 데 사용됩니다. 위의 이벤트가 청취되는 객체에서 발생하면 청취자의 특정 방법이 즉시 실행됩니다.
1.2. 리스너 케이스-청취자가 창 창을 듣고 있습니다
Me.gacl.listener.demo; import java.awt.frame; import java.awt.event.windowevent; import java.awt.event.windowlistener; public class demo1 { /***java 이벤트 청취 메커니즘*1. 이벤트 청취에는 이벤트 소스, 이벤트 객체, 이벤트 리스너*2의 세 가지 구성 요소가 포함됩니다. 이벤트 소스에서 작업이 발생하면 이벤트 리스너의 메소드를 호출하고 메소드를 호출 할 때 이벤트 객체를 전달합니다. * 개발자는 리스너의 이벤트 객체를 통해 이벤트 소스를 얻을 수 있으므로 이벤트 소스에서 작동합니다. */ public static void main (String [] args) {frame f = new Frame (); F.setsize (400, 400); F. 세트 Visible (true); // 등록 이벤트 리스너 F.AddWindowListener (new WindowListener () {public void WindowActivated (WindowEvent e) {} public void window windowclosed (windowevent e) {}/*** 창 양식이 닫히면 Windowlistener 리스너가 들릴 때 창 구성이 닫히는 방법을 처리합니다. // 이벤트 객체를 통해 eframe f = () e.getSource (); Windowopened (windowevent e) {}}); }}1.3. 다른 물체에서들을 수있는 물건을 디자인하십시오.
우리가 개발을 할 때, 우리는 다른 물체를 모니터링하기 위해 청취자를 작성합니다. 그렇다면이 객체를 다른 객체가들을 수 있도록 객체를 설계하려면 어떻게해야합니까? 엄격한 이벤트 처리 모델에 따라 객체를 설계 할 수 있으며이 객체는 다른 객체에서들을 수 있습니다. 이벤트 처리 모델에는 이벤트 소스, 이벤트 객체 및 이벤트 리스너의 세 가지 구성 요소가 포함됩니다.
이벤트 처리 모델에 따라 사람 객체를 설계해 봅시다. 특정 코드는 다음과 같습니다.
Me.gacl.observer;/*** @classname : person (이벤트 소스)* @description : 이벤트 소스로서 사람 클래스를 디자인하십시오. 이 수업의 대상 (예 : 식사, 달리기)의 행동은 다른 물체* @author : Lonely Canglang* @Date : 2014-9-9 9:26:06 PM **/ 공개 클래스 사람 {/ *** @field : 청취자*/ private extersner Listener를 기억하기 위해 개인 수업에서 인원 수업을 정의합니다. /** * @Method : Eat * @description : Design Person 's Behavior : Eat * @anthor : 고독한 및 오만 */public void eat () {if (Learger! = null) {/** * 호출 방법을 호출하여 이벤트 대상을 듣고 이벤트 대상을 전달하여 이벤트 소스 (이벤트 소스) (이벤트) (이벤트) (새 이벤트)를 전달합니다. Listener.doeat (새 이벤트 (this)); }} /*** @method : run* @description : 디자인 사람의 행동 : run* @anthor : run* @anthor : lone and arrogance** /public void run () {if (listener! = null) { /*** 청취자의 도룬 방법을 클래스 런 (RUN) 액션을 듣고 이벤트 이벤트를 DOEAT 방법에 전달합니다. * 이벤트 객체는 이벤트 소스를 캡슐화하며 새 이벤트 (this)에서는 이벤트 소스*/ Learger.dorun (새 이벤트 (this))를 나타냅니다. }} / ** * @method : registerListener * @description :이 방법은 개인 클래스 객체의 동작을 듣는 청취자를 등록하는 데 사용됩니다. * @Anthor : aloof wolf * * @param 리스너 * / public void registerListener (PersonListener Listener) {this.listener = 청취자; }}/*** @ClassName : PersonListener (이벤트 청취자)* @Description : Person 클래스 (이벤트 소스)에 대한 리스너 인터페이스 디자인* @Author : Lonely Canglang* @Date : 2014-9-9 9:28:06 PM **/Interface PersonListener {/*** @Method : Doeat* @description (EAT) * 구현 클래스가 DOEAT 메소드를 구현할 때, 사람 클래스 객체의 동작을 모니터링 할 수 있습니다. Eat (eat) * @anthor : Lonely Canglang * * @param e */ void doeat (이벤트 E); /** * @method : dorun * @description :이 방법은 사람 객체 실행 (실행)의 동작을 듣는 데 사용됩니다. * 구현 클래스가 Dorun 메소드를 구현할 때, 사람 클래스 객체 실행 (run)* @anthor : @Anthor : @Param e*/ void dorun (event e);}/ *** @className : event (event object)* @description : 이벤트 소스를 캡슐화하기위한 디자이 사건 클래스* 克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 � 克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 {thiscour) {this. } public person getSource () {return source; } public void setSource (개인 소스) {this.source = source; }}그러한 디자인 후에는 Peron 클래스의 객체를 다른 물체에서들을 수 있습니다. 테스트 코드는 다음과 같습니다.
packing me.gacl.observer; public class persontest { / ** * @method : main * @description : test person class * @anthor : 거만 늑대 * * @param args * / public static void main (String [] args) {// person p = new person (); // p 객체의 동작 p 객체 p.registerListener (new PersonListener () {// p eating behavior public void doeat (event e) {person p = e.getSource (); System.out.println (p + "Eating"); System.out.println (P + "Eating"); // p eating p.eat (); // p P.Run () 실행; }}실행 결과 :
me.gacl.observer.person@4a5ab2는 me.gacl.observer.person@4a5ab2를 먹고 있습니다
2. Javaweb의 청취자
2.1. 기본 개념
Javaweb의 청취자는 서블릿 사양에 정의 된 특별 수업입니다. 웹 응용 프로그램에서 ServletContext, Httpsession 및 ServletRequest와 같은 도메인 객체의 생성 및 파괴 이벤트를 듣고 이러한 도메인 객체의 속성이 수정되는 이벤트를 듣는 데 사용됩니다.
2.2. 서틀 리스너의 분류
서블릿 사양에는 여러 유형의 리스너가 정의되어 있습니다. 청취에 사용되는 이벤트 소스는 ServletContext, httpsession 및 ServletRequest입니다. 서블릿 사양은 여러 유형의 리스너를이 세 가지 개체의 작업을 위해 세 가지 유형으로 나눕니다.
• 도메인 객체 자체의 생성 및 파괴를 듣는 이벤트 리스너.
• 도메인 객체에서 속성을 추가 및 삭제하기위한 리시너.
• httpsession 도메인에서 객체의 상태를 듣는 이벤트 리스너.
2.3. ServletContext 도메인 개체의 생성 및 파괴를 듣습니다.
ServletContextListener 인터페이스는 ServletContext 객체의 생성 및 파괴 이벤트를 듣는 데 사용됩니다. ServletContextListener 인터페이스를 구현하는 모든 클래스는 ServletContext 객체의 생성 및 파괴를들을 수 있습니다.
• ServletContext 객체가 생성되면 ContextInitialized (ServletContexTevent SCET) 메소드가 발사됩니다.
• ServletContext 객체가 파괴되면 ContextDestroyed (ServletContexTevent SCET) 메소드가 활성화됩니다.
• ServletContext 도메인 개체 생성 및 파괴 시간 :
작성 : 서버 시작은 각 웹 응용 프로그램에 대해 ServletContext를 만듭니다
파괴 : 서버가 닫히기 전에 각 웹 응용 프로그램을 나타내는 ServletContext를 닫습니다.
예 : MyServletContextListener 클래스 작성, ServletContextListener 인터페이스를 구현하고 ServletContext 객체의 생성 및 파괴를 듣습니다.
1. 다음 코드로 리스너를 쓰십시오.
packing me.gacl.web.listener; import javax.servlet.servletcontextevent; import javax.servlet.servletcontextlistener;/*** @classname : myServletContextListener* @description : myServletContextListner* @Description : MyServletContextListner Classner interface,* ServletContext 객체. * @Author : 자랑스러운 늑대* @Date : 2014-9-9 오후 10:26:16 PM **/ public class myservletcontextListener는 servletcontextListener {@override public void contextInitialized (servletcontextevent) {system.out.out.out.out.out.out.out.out.println ( "servletcontext object Creation"); } @override public void contextDestroyed (servletcontextevent scet) {system.out.println ( "servletcontext 객체 파괴"); }}2. Web.xml 파일에 리스너를 등록하십시오
위에서 언급 한 이벤트 소스를 듣기 위해서는 이벤트 소스의 동작을 모니터링하기 위해 리스너를 이벤트 소스에 등록해야한다고 언급했습니다. Javaweb에서 청취 등록은 다음과 같이 web.xml 파일에서 구성됩니다.
<? xml version = "1.0"encoding = "utf-8"?> <web-app version = "3.0"xmlns = "http://java.sun.com/xml/xml/ns/javaee"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance. 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_0.xsd"> </display-name> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> <!-servletcontext 객체를 듣기위한 리스너 등록-> <liseer> <description> servletcontextListener Listener </description> <!-ServletContextListener 인터페이스를 구현하는 수신기 클래스-> <Leater-Class> me.gacl.web.listener.myservletcontextListener </laiseer-class> </liareer> </web-app>
이 두 단계 후에, 우리는 청취자의 서면 및 등록을 완료했습니다. 웹 서버가 시작되면 Web.xml에 구성된 리스너를 ServletContext 객체에 자동으로 등록합니다. 이러한 방식으로 개발 된 MyServletContextListener 리스너는 ServletContext 객체에서들을 수 있습니다.
2.4. httpsession 도메인 객체의 생성 및 파괴를 듣습니다.
httpsessionlistener 인터페이스는 httpsession 객체의 생성 및 파괴를 듣는 데 사용됩니다. 세션을 만들 때 세션을 파괴 할 때 세션 크리징 (httpsessionevent se) 메소드가 활성화되며 세션에서 파견 된 (httpsessionevent se) 메소드가 활성화됩니다.
예 : MyHttPsessionListener 클래스를 작성하고 HTTPSSESSIONLISTERENCERFACE를 구현하고 HTTPSESSION 객체의 생성 및 파괴를 듣습니다.
1. 다음 코드로 리스너를 쓰십시오.
ME.GACL.WEB.Listener; import javax.servlet.http.httpsessionevent; import javax.servlet.http.httpsessionListener;/*** @ClassName : myHttPsessionListener* @Description : MyHtTpsessionListener 클래스는 HTTPSENTION CAPTITION을 통해*,* httpsession 객체를 파괴하면들을 수 있습니다. * @Author : The Lonely Canglang* @Date : 2014-9-9 11:04:33 PM **/ Public Class MyHttPsessionListener는 httpsessionListener {@override public void sessioncreated (httpsessionevent se) {system.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.out.outsession (); }/* httpsession의 파괴 시간은 다음과 같이 web.xml에서 구성되어야합니다.* <session-config> <session-timeout> 1 </session-timeout> </session-config>이 구성은 세션이 1 분 후에 파괴되었음을 의미합니다. }}2. Web.xml 파일에 리스너를 등록하십시오
<!-HTTPSESSION 객체 청취에 대한 리스너 등록자-> <Leater> <description> httpsessionListener 청취자 </descriper> <layer-class> me.gacl.web.listener.myhttpsessionListener </Learter-Class> </Learger> <!-httpsession 객체를 파괴하는 시간을 구성하는 시간을 구성합니다. httpsession 객체-> <session-config> <!-1 분 후 httpsession 객체의 파괴를 구성-> <세션-타임 아웃> 1 </session-timeout> </session-config>
JSP 페이지에 액세스하면 httpsession 객체가 생성됩니다. 이때, 우리는 httpsessionListener에서 httpsession 객체의 생성 과정을 관찰 할 수 있습니다. httpsession 객체의 생성 과정을 관찰하기 위해 JSP 페이지를 작성할 수 있습니다.
다음과 같이 : index.jsp
< %@ page language = "java"import = "java.util.*"pageencoding = "utf-8" %> <! dubtml> <html> <head> <title> httpsessionListener 리스너 리스너는 httpsession 객체 </title> </head> jspsession에 액세스 할 수 있습니다. 생성 된 세션의 ID는 $ {pagecontext.session.id} </body> </html>입니다작업 결과는 다음과 같습니다.
2.5. Servletrequest 도메인 개체의 생성 및 파괴를 듣습니다.
ServletRequestListener 인터페이스가 ServletRequest 객체의 생성 및 파괴를 듣는 데 사용되는 경우, 리스너의 requestInitialized (servletrequestevent sre) 방법이 호출됩니다. 요청 객체가 파괴되면 리스너의 요청이 파견 된 (servletrequestevent sre) 메소드가 호출됩니다.
ServletRequest 도메인 객체 생성 및 파괴 타이밍 :
생성 : 사용자를 방문 할 때마다 요청 객체가 생성되면 요청 객체가 파괴됩니다. 현재 액세스가 끝나고 요청 객체가 파괴됩니다.
예 : MyServletRequestListener 클래스 작성, ServletRequestListener 인터페이스 구현, ServletRequest 객체의 생성 및 파괴를 듣습니다.
1. 다음 코드로 리스너를 쓰십시오.
packing me.gacl.web.listener; import javax.servlet.servletrequestevent; import javax.servlet.servletrequestlistener;/*** @classname : myservletrequestlistener* @description : myservletrequestlistlistener* @description : myServletrequestlistner interfacenestresner를 구현할 수 있습니다. ServletRequest 객체. * @Author : The Proud Wolf* @Date : 2014-9-9 11:50:08 PM **/ public class myServletRequestListener는 servletRequestListener {@override public void requestDestroyed (servletrequestevent sre) {System.out.println (sre.getservletrequest () + "); } @override public void requestInitialized (servletrequestevent sre) {system.out.println (sre.getServletRequest () + "생성 !!"); }}2. Web.xml 파일에 리스너를 등록하십시오
<!-ServletRequest 객체 청취에 대한 리스너 등록자-> <layer> <description> servletrequestlistener Listener </descript> <layer-class> me.gacl.web.listener.myservletrequestlistener </larteerclass> </largeer>
테스트 결과는 다음과 같습니다.
실행 결과에서 액세스 할 때마다 사용자가 요청 객체를 작성하고 액세스가 완료된 후에 요청 객체가 파괴되는 것을 알 수 있습니다.
위의 것은 청취자에 대한 간단한 설명입니다.