JAVAWeb开发学习之监听器(Listener)

原理:存在事件源(Source)和监听器(Listener),并为事件源注册监听器,操作事件源,产生事件对象(Event),将事件对象传递给监听器并执行监听器相应的监听方法。

在 Servlet 中,监听器用于监听 Servlet 三个数据域对象的创建、销毁和内部数据状态的改变。

Servlet 三个数据域对象: ServletContext、HttpSession、ServletRequest

三类 Servlet 监听器:

  1. 数据域对象 创建和销毁监听器 ;
  2. 数据域对象 属性变更监听器 ;
  3. Session中数据对象本身状态监听器。

1、创建和销毁 监听器
  创建和销毁监听器对应三个数据域则应有三个监听器(接口):ServletContextListener、HttpSessionListener、ServletRequestListener;每个接口中分别定义了两个方法分别对数据域对象创建(Created)和销毁(Destroyed)进行监听。
  
  监听器实现步骤:

		 1. 编写类实现监听器接口,重写接口中方法,实现监听功能;
		 2. 在web.xml 中注册监听器:
			    <!--对ServletContextListener监听器进行注册实例-->
			    <!--因为监听器执行不由用户访问,因此不用配置url路径--> 
				    <listener>
				      <!--listener-class中路径为:包路径.类名-->
				        <listener-class>servlet.listener.MyServletContextListener</listener-class>
				    </listener>

三种创建和销毁 监听器的应用

ServletContextListener:
   方法:contextInitialized(ServletContextEvent sce) 监听创建;contextDestroyed(ServletContextEvent sce) 监听销毁
   1、在服务器启动时,对一些对象进行初始化,并将对象保存到ServletContext数据范围中; — 全局数据
   2、对框架进行初始化 ,如Spring框架;
   3、实现任务调度(通过定时器 Timer、TimerTask 实现)
 HttpSessionListener
   对HttpSession 数据对象创建和销毁的监听;
   方法:sessionCreated(HttpSessionEvent se) 监听Session对象创建;
      sessionDestroyed(HttpSessionEvent se) 监听Session对象销毁.
   Session 何时创建 : request.getSession()
   Session 何时销毁(三种方式) : 关闭服务器、Session过期(默认30分钟,可通过web.xml配置)、session.invalidate
 ServletRequestListener
  监听 HttpServletRequest 对象的创建和销毁
  方法:requestInitialized(ServletRequestEvent sre) 监听request对象创建;
     requestDestroyed(ServletRequestEvent sre) 监听request对象销毁。

2、属性变更 监听器

对三种数据域中的属性的创建\修改\移除,同样对应于三个监听器接口:
    ServletContextAttributeListener 监听ServletContext中属性变化;
    HttpSessionAttributeListener   监听HttpSession中属性变化;
    ServletRequestAttributeListener 监听ServletRequest中属性变化;
  每个接口都有三个方法:
    attributeAdded 监听属性添加 ---- 当数据范围对象没有该属性,第一次添加时调用执行 setAttribute(name,value);
    attributeRemoved 监听属性移除 ---- 从一个数据范围对象删除一个已经存在属性时执行 removeAttribute(name);
    attributeReplaced 监听属性替换 ----- 当一个数据范围已经存在一个属性,向数据范围添加相同名称的属性时,触发替换方法 — setAttribute(name,value);
    
    
3、Session中数据对象本身状态监听器

本部分监听器不需要在 web.xml 中进行配置,因为状态监听器是由保存到session数据域中的对象本身去实现的;即由保存到session数据域中的对象java类去实现监听器接口。
  对象的四种状态:绑定/解除绑定; 钝化/活化
  监听器接口:
   1\HttpSessionBindingListener
     valueBound(HttpSessionBindingEvent event) 绑定对象方法
     valueUnbound(HttpSessionBindingEvent event) 解除绑定方法
   2\HttpSessionActivationListener
     sessionDidActivate(HttpSessionEvent se) 感知对象被活化
     sessionWillPassivate(HttpSessionEvent se) 感知对象被钝化
     
  注:对象的钝化和活化应该由tomcat服务器配置后自动进行 配置方法如下:

	<Context>
	  <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
	  <Store className="org.apache.catalina.session.FileStore" directory="it315"/>
	  </Manager>
	</Context>

配置context位置:
  1、tomcat/conf/context.xml: 对所有虚拟主机 所有web工程生效
  2、tomcat/conf/Catalina/localhost/context.xml :对当前虚拟主机所有web工程生效
  3、当前工程/META-INF/context.xml :对当前工程有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值