Servlet中的监听器Listener

监听器(Listener)

  1. 介绍及作用:监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件,它还可以监听域对象的属性发生修改的事件,可以在事件发生前或者发生后做一些必要的处理。

  2. 相关概念:
    a.事件源:被监听的对象
    b.监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器
    c.注册监听器:将监听器与事件源进行绑定
    e.响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码

  3. 监听器的分类:
    按照监听的事件可以将监听器划分为以下三类:
    a.监听域对象自身的创建和销毁的事件监听器;
    b.监听域对象中属性的增加和删除的事件监听器;
    c.监听绑定到HttpSession域中某个对象状态的事件监听器。

  4. 主要的作用域:ServletContext、HttpSession、HttpServletRequest这三个对象中属性变更信息事件的监听器

  5. 监听器中的方法:

方法描述
attributeAdded ()当向被监听对象中增加一个属性时,web容器就调用事件监听器的attributeAdded方法进行响应,这个方法接收一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象
attributeRemoved()当删除被监听对象中的一个属性时,web容器调用事件监听器的attributeRemoved方法进行响应
attributeReplaced()当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的attributeReplaced方法进行响应
  1. 以统计学生在线人数为例(HttpSessionAttributeListener)
@WebListener
public class OnlineListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {
        System.out.println("OnlineListener.attributeAdded");

        String name =  se.getName();
      
        //登录用户的session发生变化
        if("account".equals(name)){
            ServletContext application = se.getSession().getServletContext();
            int online_num = application.getAttribute("online_num") == null ? 0 : (Integer) application.getAttribute("online_num");
            System.out.println("online_num = " + online_num);
            online_num++;
            application.setAttribute("online_num",online_num);
        }

    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent se) {
        System.out.println("OnlineListener.attributeRemoved");

        String name =  se.getName();
        //退出 用户的session发生变化
        if("account".equals(name)){
            ServletContext application = se.getSession().getServletContext();
            int online_num = application.getAttribute("online_num") == null ? 0 : (Integer) application.getAttribute("online_num");
            System.out.println("online_num = " + online_num);
            online_num--;
            application.setAttribute("online_num",online_num);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值