Servlet学习——监听器

【监听器】

监听器就是监听某个域对象状态变化的组件
【相关概念】
    事件源:被监听的对象(三个域对象 request、session、servletContext(也就是application))
    监听器:监听事件源对象事件源对象的状态的变化都会触发监听器
    注册监听器:将监听器与事件源进行绑定
    响应行为:监听器监听到事件源的状态变化时所涉及的功能代码(程序员编写代码)
【使用】
       加注解 :@WebListener
       可以监听ServletContext、HttpSession、ServletRequest
       监听器有 3 类 8 种
           1、监听生命周期
               ServletRequestListener
               HttpSessionListener
               ServletContextListener
           2、监听值的变化
               ServletRequestAttributeListener
               HttpSessionAttributeListener
               ServletContextAttributeListener
           3、针对Session 中的对象
               监听Session中的java对象(javaBean),是javaBean实现监听器的接口
               根据监听的类型选择实现的接口

实例:
监听页面在线人数
当有用户访问时,会去创建session对象 ,人数+1
当有用户退出时,会销毁对应session对象 ,人数-1

注:
      当你登录的时候也就是创建session的时候会+1,但是你退出浏览器的时候session仍然存在,并不会-1。
      你可以通过session.invalidate(); 去销毁session;
      你要是想要达到关闭浏览器去销毁session可以通过js
       < body οnbefοreunlοad=“window.location=‘loginout.jsp’” >
      在   loginout.jsp   中写 <% session.invalidate();%>
    目前知道的就这些,上面那个方法只能在IE中可行。
    如果有更好的方式,欢迎评论

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


public class Onlinecountlistener implements HttpSessionListener {
    private int onlineNumber = 0;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
//        如果将值设置到session作用域中 范围太小 页面刷新时 在线人数并不更新
//        所以设置到更大的作用域application也就是ServletContext作用域中
//        这里获取ServletContext 为了就是这个
        onlineNumber++;
        ServletContext servletContext = se.getSession().getServletContext();
        servletContext.setAttribute("onlineNumber", onlineNumber);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        onlineNumber--;
        ServletContext servletContext = se.getSession().getServletContext();
        servletContext.setAttribute("onlineNumber", onlineNumber);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值