1. 도메인 객체의 속성 변경에 대해 듣는 리스너
도메인 객체에서 속성을 변경하기위한 이벤트 리스너는 세 가지 객체의 속성 변경 정보 이벤트를 듣는 리스너입니다.
이 세 가지 리스너 인터페이스는 ServletContextAttripteListener, httpsessionattributeListener 및 ServletRequestAttributeListener입니다. 세 가지 인터페이스 모두 청취 된 객체의 속성을 증가, 삭제 및 교체하는 이벤트를 처리하는 세 가지 방법을 정의합니다. 이 세 인터페이스에서 동일한 이벤트의 해당 메소드 이름은 정확히 동일하지만 허용되는 매개 변수는 다릅니다.
1.1. 귀속 된 방법
청취중인 객체에 속성을 추가 할 때 웹 컨테이너는 이벤트 리스너의 기여한 메소드를 호출하여 응답합니다. 이 메소드는 이벤트 유형 매개 변수를 수신합니다. 리스너는 속성을 추가하는 도메인 객체와 도메인에 저장된 속성 객체를 얻을 수 있습니다. 각 도메인 속성 리스너의 완전한 구문 정의는 다음과 같습니다.
공개 void argributeadded (ServletContextAttributeevent scae) 공개 void artributeReplaced (httpsessionBindingEvent hsbe) public void argributermoved (servletrequestattributeevent srae)
1.2. attributermoved 방법
청취중인 객체에서 속성을 삭제할 때 웹 컨테이너는 이벤트 리스너의 attributermeed 메소드를 호출하여 각 도메인의 속성 리스너의 전체 구문 정의에 응답합니다.
공개적으로 void attributermoved (servletcontextattributeevent scae) public void attributermoved (httpsessionbindingevent hsbe) public void attributermoved (servletrequestattributeevent srae)
1.3. AttributeReplaced 방법
리스너의 도메인 객체의 특정 속성이 교체되면 웹 컨테이너는 이벤트 리스너의 AttributeReplaced 메소드를 호출하여 각 도메인 속성 리스너의 완전한 구문 정의에 응답합니다.
공개 void artributeereplaced (ServletContextAttributeevent scae) 공개 void averberePlaced (httpsessionBindingEvent hsbe) public void averbiteReplaced (servletrequestattributeevent srae)
1.4. ServletContextAttritBireListener 리스너 예제 :
ServletContattAttRipteListener 리스너 리스너를 작성하여 ServletContext 도메인 개체의 속성 값의 변경 사항을 모니터링하십시오. 코드는 다음과 같습니다.
package me.gacl.web.listener; import java.text.messageformat; import javax.servlet.servlet.servletcontexttattributeevent; import javax.servlet.servletcontexttributeListener;/*** @classname : myServletContextTattributeListener* @Describer의 이벤트 청취자 : @Author : Lonely Canglang*@Date : 2014-9-11 10:53:04 PM **/ Public Class MyServletContextTateListEner는 ServletContextTattributeListener {@override public void AttributedDed (servletcontextAttributeEvent scab) {servletcontextAttributeEvent void (servletContextAttitTreevent void scab) {servletcontext Adtrittrite : " {0}, 속성 값은 다음과 같습니다. {1} ", scab.getName (), scab.getValue ()); System.out.println (str); } @Override public void attributermoved (servletcontextattributeevent scab) {string str = messageformat.format ( "삭제 : {0} servletcontext 도메인 객체에서 {0}, 속성 값은 다음과 같습니다. {1}", scab.getname (), scab.getvalue (); System.out.println (str); } @override public void arquberePlaced (servletContextAttributeevent scab) {string str = messageformat.format ( "속성 값 : {0}은 servletContext 도메인 객체에서 대체되었습니다", scab.getName (); System.out.println (str); }}Web.xml 파일에 리스너를 등록하십시오
<layer> <cression> myServletContextAttRipteListEner Listener </description> <layer-class> me.gacl.web.listener.myservletContextTattributeListener </laiser-class> </largeer>
ServletContextTattRibuteListEnerTest.jsp 테스트 페이지를 작성하십시오
<%@ page language = "java"pageencoding = "utf-8"%> <! doctype html> <html> <head> <title> servletcontextTattattiptributeListener 청취자 테스트 </title> </head> <body> <%// attribute application.setattribute ( "longyanglang"); // 응용 프로그램 도메인 객체 객체 application.setAttribute ( "name", "gaCl")에서 이름 속성 값을 바꿉니다. // 응용 프로그램 도메인 객체 객체 응용 프로그램에서 이름 속성을 제거합니다. %> </body> </html>
작업 결과는 다음과 같습니다.
실행 결과에서 ServletContextListener 리스너가 ServletContext 도메인 오브젝트 (응용 프로그램)의 속성 값 변경을 성공적으로 들었음을 알 수 있습니다.
1.5. ServletRequestattripteListener 및 httpsessionattributeListener 청취자 예제 :
httpsession 및 httpservletrequest 도메인 객체의 속성 값의 변경 사항을 모니터링하려면 리스너를 작성하십시오. 코드는 다음과 같습니다.
packing me.gacl.web.listener; import java.text.messageformat; import javax.servlet.servletrequestattributeevent; import javax.servlet.servletrequestattributeListener; import javax.servlet.http.htttp.httpessionattremernistener; 가져 오기 javax.servlet.http.httpsessionbindingevent; public class myRequestandSessionAttributeListener는 httpssessionAttributeListener, servletRequestAttributeListener {@OverRide public void argributeadded (servletrequestattributee srae) {strestrequestee) {strest hastiant addeptribution (servletrequesteptee srae) { "strest areast hame hame hame hame hame hame hame {0}, 속성 값은 다음과 같습니다. {1} ", srae.getName (), srae.getValue ()); System.out.println (str); } @override public void attributermoved (servletrequestattributeevent srae) {string str = messageformat.format ( "servletrequest 도메인 객체에서 속성 제거 : {0}, 속성 값은 다음과 같습니다. {1}", srae.getname (), srae.getvalue (); System.out.println (str); } @override public void aitripreePlaced (servletrequestattributeevent srae) {string str = messageformat.format ( "속성의 값 : {0}은 servletrequest 도메인 객체에서 대체되었습니다", srae.getName (); System.out.println (str); } @override public void argributeadded (httpssessionBindingEvent se) {string str = messageformat.format ( "속성 : {0}은"httpsession domain 객체, 속성 값은 다음과 같이 추가되었습니다. AttributerMoved (httpssessionBindingEvent se) {String str = messageformat.format ( "속성 : {0}은"httpsession 도메인 객체에서 삭제되었습니다. 속성 값은 다음과 같습니다. {1} ", se.getName (), se.getValue (); System.out.println (str); } @override public void arverberPlaced (httpssessionBindingEvent se) {string str = messageformat.format ( "속성 값 : {0}은 httpsession 도메인 객체에서 대체되었습니다", se.getName ()); System.out.println (str); }}Web.xml 파일에 리스너를 등록하십시오
<layer> <cression> myRequestAndSessionAttRippleListener Listener </description> <layer-class> me.gacl.web.listener.MyRequestAndSessionAttributeListener </laiseer-class> </largeer>
requestandSessionAttRiptIpListEnerTest.jsp 테스트 페이지를 작성하십시오
<%@ page language = "java"pageencoding = "utf-8"%> <! doctype html> <html> <head> <title> requestandSsessattRiptionElistener 청취자 테스트 </title> </head> <body> <%// attribute session.setattribute ( "aa", "bb"); // 세션 도메인 객체 세션에서 AA 속성의 값을 바꾸십시오. // AA 속성 세션을 제거합니다 .removeatTribute ( "AA"); // 속성 request.setAttribute ( "aa", "bb"); // 요청 도메인 객체 request.setAttribute ( "aa", "xx")에서 AA 속성의 값을 바꿉니다. // AA 속성 요청을 제거합니다 .removeatTribute ( "AA"); %> </body> </html>
작업 결과는 다음과 같습니다.
실행 결과에서 httpsessionattributeListensener 리스너 및 ServletRequestAttributeListener가 HTTPSESSION 도메인 객체 및 HTTPSERVletRequest 도메인 객체의 속성 값의 변경 사항을 성공적으로 들었음을 알 수 있습니다.
2. 이벤트 청취자가 세션에 바인딩되는 것을 알고 있습니다
세션 도메인에 저장된 객체는 여러 상태를 가질 수 있습니다. 바인딩 (세션에 세션 .SetAttribute ( "Bean", Object))); 세션 도메인에서 Unbinding (session.removeattribute ( "Bean")); 세션 객체가있는 저장 장치에 지속; 세션 객체가있는 저장 장치에서 복구. 두 개의 특수 리스너 인터페이스 "HttpsessionBindingListener 및 HttpssessionActivationListener"는 서틀 사양에 정의되어 Javabean 객체가 세션 도메인에서 상태를 이해하는 데 도움이됩니다.
2.1. httpsessionBindingListener 인터페이스
httpsessionBindingListener 인터페이스를 구현하는 javabean 객체는 세션에 세션에 바인딩되고 세션에서 삭제 된 이벤트에 결합되어 있음을 느낄 수 있습니다. 객체가 httpsession 객체에 바인딩되면 웹 서버는 객체의 void valueBound (httpsessionBindingEvent) 메소드를 호출합니다. 객체가 httpsession 객체에서 바지를 끊지 않으면 웹 서버는 객체의 valueUnbound (httpsessionBindingEvent) 메소드를 호출합니다.
예:
Me.gacl.domain; import javax.servlet.http.httpsessionbindingevent; import javax.servlet.http.httpsessionBindingListener;/*** @ClassName : javabeAndemo1* @description :* Javabean 객체는 httpessension을 의미하는 Javabean 개체를 암시하는 Javabean 개체를 암시하는 Javabean 개체는 객체가 httpsession 객체에 바인딩되면 세션에서 삭제 된 이벤트는 객체가 httpsession 객체에 바인딩 될 때 객체의 void valueBound (httpsessionBindingEvent) 메소드를 호출합니다. 객체에서 unding을 할 때 웹 서버는 객체의 void valueUnbound (httpssessionBindingEvent 이벤트) 메소드* @Author : Lonely Canglang* @Date : 2014-9-11 11:14:54 PM **/ public class javabeandemo1 httpessessionBindingListener {private String 이름; @override public void valueBound (httpssessionBindingEvent 이벤트) {system.out.println (이름+"세션에 추가되었습니다"); } @override public void valueUnbound (httpssessionBindingEvent event) {System.out.println (이름+"킥오프에 의해 킥오프"); } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public javabeandemo1 (문자열 이름) {this.name = 이름; }}위의 JavabeAndemo1 Javabean은 httpsessionBindingListener 인터페이스를 구현 하므로이 Javabean 객체는 세션에 바인딩되어 세션에서 삭제된다는 것을 느낄 수 있습니다. 테스트 코드는 다음과 같습니다.
<%@ page language = "java"pageencoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeandemo1"%> <! doctype html> <html> <head> <title> </title> </head> <body> <%// javabean 개체를 세션에 바인딩합니다. javabeandemo1 ( "Lonely Canglang")); // removeAttribute ( "bean"); %> </body> </html>
작업 결과는 다음과 같습니다.
2.2. httpsessionActivationListener 인터페이스
httpsessionactationlistener 인터페이스를 구현하는 javabean 객체는 그 자체가 활성화되고 (탈선) 및 패시브 (Serialized) 이벤트를 감지 할 수 있습니다. httpsession 객체에 묶인 Javabean 객체가 httpsession 객체와 함께 통행 (직렬화)되기 전에 웹 서버는 void sessionwillPassivate (httpsessionevent) 메소드를 Javabean 객체의 메소드라고합니다. 이런 식으로, Javabean 객체는 httpsession 객체를 사용하여 하드 디스크에 직렬화 (수동적) 될 것임을 알 수 있습니다.
httpsession 객체에 묶인 Javabean 객체를 httpsession 객체와 함께 활성화 (deserialized) 후에, 웹 서버는 void sessiondidactive (httpsessionevent) 메소드를 Javabean 객체의 메소드를 호출합니다. 이런 식으로, Javabean 객체는 그것이 사막화 (활성화) 될 것이라는 것을 알 수 있으며 httpsession 객체와 함께 메모리로 돌아 왔습니다.
예:
package me.gacl.domain; import java.io.serializable; import javax.servlet.http.http.htttp.htttp.htttp.htttp.htttp.httpessionevent;/*** @classname : javabeandemo2* @description : httpessionation perferious httpessional perferious 이벤트가 활성화되고 수동적 인 이벤트의 활성화 : Javabean 객체와 세션은 메모리로 사막화 (활성화)됩니다. 수동화 : Javabean 객체는 세션에 존재합니다. 서버가 세션을 하드 디스크로 연속화하면 세션의 Javabean 객체가 직렬화 가능한 인터페이스를 구현하면 서버는 세션의 Javabean 객체를 하드 디스크로 함께 일련화합니다. Javabean 객체와 하드 디스크로의 세션을 함께 운영하는 것을 패시베이션이라고합니다. 세션의 Javabean 객체가 직렬화 가능한 인터페이스를 구현하지 않으면 서버는 먼저 세션에서 Serializable 인터페이스를 구현하지 않는 세션에서 Javabean 객체를 제거한 다음 하드 디스크로 세션을 직렬화 (통행)합니다. httpsession 객체에 바인딩 된 Javabean 객체가 httpsession 객체와 함께 통행 될 때, 웹 서버는 httpsession 객체에 묶인 Javabean 객체가 httpsession 객체와 함께 통과되기 전에 Javabean 객체 객체의 무효를 호출합니다. SessionWillPassivate (httpsessionEvent 이벤트) 메소드는 JavaBean 객체가 하드 디스크에 httpsession 객체를 사용하여 직렬화 (수동)를 알 수 있도록합니다. httpsession 객체에 묶인 Javabean 객체가 httpsession 객체와 함께 활성화 된 후, 웹 서버는 javabean 객체가 Httpsession 객체를 메모리로 뒤로 httpsession ( @author : 2014-911)으로 httpession 객체를 다시 제시 할 수 있음을 알 수 있도록 Javabean 객체의 void sessiondidactive (httpsessionevent event) 메소드를 호출합니다. 11:22:35 pm **/ public class javabeandemo2는 httpsessionactivationListener, Serializable {private static final long serialversionuid = 7589841135210272124L; 개인 문자열 이름; @override public void sessionwillPassivate (httpssessionevent se) {system.out.println (name+"및 세션은 하드 디스크에 시리얼 (수동)입니다. 세션의 ID는"+se.getSession (). getId ()); } @override public void sessiondidActivate (httpssessionEvent se) {system.out.println (name+"및 세션은 하드 디스크에서 함께 사형화되어 있습니다. 세션의 ID는 다음과 같습니다. } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public javabeandemo2 (문자열 이름) {this.name = 이름; }}하드 디스크에 통행중인 httpsession 객체에 결합 된 Javabean 물체의 프로세스를 관찰하고 하드 디스크에서 메모리로 다시 활성화하려면 Tomcat 서버를 사용하여 httpsession 객체의 통과 및 활성화 프로세스를 완료 할 수 있도록 도와야합니다. 특정 방법은 다음과 같습니다.
다음과 같이 webroot/meta-inf 폴더에서 context.xml 파일을 만듭니다.
context.xml 파일의 내용은 다음과 같습니다.
<CERTXT> <manager className = "org.apache.catalina.session.persistentManager"maxIdlesWap = "1"> <Store ClassName = "org.apache.catalina.session.filestore"directory = "gacl"/> </manager> </context>
Context.xml 파일에서 1 분의 구성 후 httpsession 객체를 로컬 하드 디스크의 GACL 폴더로 통행하십시오.
JSP 테스트 코드는 다음과 같습니다.
<%@ page language = "java"pageencoding = "utf-8"%> <%@ page import = "me.gacl.domain.javabeandemo2"%> <! doctype html> <html> <head> <title> </title> </head> <body> JSP 페이지에 액세스하자마자 HTTPSESSION이 생성됩니다. 생성 된 세션의 ID는 다음과 같습니다. $ {pagecontext.session.id} <hr/> <% session.setattribute ( "bean", new JavabeAndemo2 ( "Lonely and Proubly"); %> </body> </html>이 JSP 페이지에 액세스 할 때 서버는 즉시 httpsession 객체를 생성 한 다음 httpssessionActivationListener 인터페이스를 세션 객체에 구현하는 javabean 객체를 바인딩합니다. 1 분을 기다린 후 아무도이 JSP 페이지에 다시 액세스하지 않으며 서버는 HTTPSESSION 객체를 하드 디스크에 자동으로 통행 (직렬화)합니다.
아래 그림과 같이 Tomcat Server의 작업/Catalina/LocalHost/Javaweb_Listener_20140908/GACL 폴더에서 로컬 스토리지에 직렬화 된 세션을 찾을 수 있습니다.
이 JSP 페이지에 다시 액세스하면 서버는 하드 디스크의 httpsession 객체를 자동으로 재 활성화 (deserialize)하고 메모리로 반환합니다. 작업 결과는 다음과 같습니다.
Javaweb Development 기술의 청취자 기술에는 너무 많은 내용이 있습니다. 일상적인 작업에서 청취자 기술은 Javaweb 프로젝트 개발에서 더 자주 사용 되므로이 기술을 마스터해야합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.