Listener监听器

简介:
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
监听器就是个实现特定接口的普通java程序,这个程序专门用来监听另一个java对象的方法调用或属性改变,当被监听的对象发生上述事件后,监听器某个方法将立即被执行。

Java的事件监听机制
1 事件监听涉及到三个组件:事件源,事件对象,事件监听器
2 当事件源发生某个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件对象传递进去,开发人员在监听器中通过事件对象,就可以拿到事件源,从而对事件源进行操作

JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听wb应用程序中的ServletContext,HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件

在Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型
1:监听域对象自身的创建和销毁的事件监听器
2:监听域对象中的属性的增加和删除的事件监听器
3:监听绑定到HttpSession域中的某个对象的状态的事件监听器

Listener接口分类
1. ServletContextListener监听ServletContext对象
2. ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改

  1. HttpSessionListener监听Session对象
  2. HttpSessionActivationListener监听HTTP会话的active和passivate情况,passivate是指非活动的session被写入持久设备(比如硬盘),active相反。
  3. HttpSessionAttributeListener监听Session中的属性操作

  4. ServletRequestListener监听Request对象

  5. ServletRequestAttributeListener监听Requset中的属性操作

监听ServletContext域对象的创建和销毁
ServletContextListener接口用于监听ServletContext对象的创建和销毁事件,采用ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。

当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。
当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。

ServletContext域对象创建和销毁时机:
创建:服务器启动针对每一个Web应用创建ServletContext
销毁:服务器关闭前针对每一个web应用的ServletContext

范例:编写一个MyServletContextListener类,实现ServletContextListener接口,监听ServletContext对象的创建和销毁
第一步:编写监听器

 public class MyServletContextListener implements ServletContextListener {
 MyServletContextListener类实现了ServletContextListener接口, 
 因此可以对ServletContext对象的创建和销毁这两个动作进行监听。

       @Override
   public void contextInitialized(ServletContextEvent sce) {
           System.out.println("ServletContext对象创建");
        }
        @Override
     public void contextDestroyed(ServletContextEvent sce) {
           System.out.println("ServletContext对象销毁");
   }
}

第二步:在web.xml文件中注册监听器
要想监听事件源,那么必须将监听器注册到事件源上才能够实现对事件源的行为动作进行监听,在JavaWeb中,监听的注册是在web.xml文件中进行配置的

<display-name></display-name>
<welcome-file-lost>
     <welcome-filter>index.jsp</welcome-filter>
</welcome-file-list>

注册针对ServletContext对象进行监听的监听器

<listener>
     <description>ServletContextListener监听器</description>
  实现了ServletContextListener接口的监听器类
     <listener-class>me.gacl.web.listener.MyServletContextListener</listener-class>
</listener>

通过这两个步骤,我们就完成了监听器的编写和注册,Web服务器启动时,就会自动把在web.xml中配置的监听器注册到ServletContext对象上,这样开发好的MyServletContextListener监听器就可以对ServletContext对象进行监听了的

监听HttpSession域对象的创建和销毁
HttpSessionListener接口用于监听HttpSession对象的创建和销毁
创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法
  销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。
范例:编写一个MyHttpSessionListener类,实现HttpSessionListener接口,监听HttpSession对象的创建和销毁

public class MyHttpSessionListener implements HttpSessionListener {
    @Override
   public void sessionCreated(HttpSessionEvent se){       
 System.out.println( se.getSession() + "创建了!!");
    }
     /* HttpSession的销毁时机需要在web.xml中进行配置,如下:      * <session-config>
            <session-timeout>1</session-timeout>24              </session-config>       这样配置就表示session在1分钟之后就被销毁    */
  @Override 
 public void sessionDestroyed(HttpSessionEvent se){       

  System.out.println("session销毁了!!");
     }
 }

在web,xml文件中注册监听器

<!--注册针对HttpSession对象进行监听的监听器--> 
<listener>       
<description>HttpSessionListener监听器</description> 4       <listener-class>me.gacl.web.listener.MyHttpSessionListener</listener-class> 
</listener>
   <!-- 配置HttpSession对象的销毁时机 --> 
 <session-config>       <!--配置HttpSession对象的1分钟之后销毁 --> 
       <session-timeout>1</session-timeout>
 </session-config>

监听ServletRequest域对象的创建和销毁
  ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁
  Request对象被创建时,监听器的requestInitialized(ServletRequestEvent sre)方法将会被调用
  Request对象被销毁时,监听器的requestDestroyed(ServletRequestEvent sre)方法将会被调用
  ServletRequest域对象创建和销毁时机:
    创建:用户每一次访问都会创建request对象
    销毁:当前访问结束,request对象就会销毁
范例:编写一个MyServletRequestListener类,实现ServletRequestListener接口,监听ServletRequest对象的创建和销毁

ServletRequestListener类实现了ServletRequestListener接口,
因此可以对ServletRequest对象的创建和销毁这两个动作进行监听。

 public class MyServletRequestListener implements ServletRequestListener {
      @Override
     public void requestDestroyed(ServletRequestEvent sre) {
         System.out.println(sre.getServletRequest() + "销毁了!!");
           }

     @Override
     public void requestInitialized(ServletRequestEvent sre) {
         System.out.println(sre.getServletRequest() + "创建了!!");
     }
}

在web.xml文件中注册监听器

<!--注册针对ServletRequest对象进行监听的监听器-->
   <listener>
       <description>ServletRequestListener监听器</description>
      <listener-class>me.gacl.web.listener.MyServletRequestListener</listener-class>
   </listener>

Listener的常见应用
http://www.cnblogs.com/xdp-gacl/p/3965508.html(重点)
统计在线人数+自定义Session扫描器

参考博客:
http://www.cnblogs.com/xdp-gacl/p/3961929.html(重点)
http://www.cnblogs.com/xdp-gacl/p/3969249.html(重点)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值