Servlet学习——监听器

2023-04-16 14:48:21 浏览数 (2)

【监听器】

代码语言:javascript复制
监听器就是监听某个域对象状态变化的组件
【相关概念】
    事件源:被监听的对象(三个域对象 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中可行。    如果有更好的方式,欢迎评论

代码语言:javascript复制
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);
    }
}

0 人点赞