JavaWeb Listener之HttpSessionBindListener

HttpSessionBindListener        监听把自身这个对象绑定到HttpSession对象上、解绑

绑定到HttpSession对象上,其实就是调用session的setAttribute()方法把一个HttpSessionBindListener对象放进去。

解绑就是调用session的removeAttribute()方法把HttpSessionListener对象移除。

HttpSessionBindListener这个监听器比较特殊,其他监听器都是注册后就监听了,而且是一对多监听所有的;

HttpSessionBindListener是注册后,还需要使用session.setAttribute(" " , HttpSessionBindListener对象),将HttpSessionBindListener对象放到某个session中,此HttpSessionBindListener对象才会监听,而且只会监听所在的session。一般一个HttpSessionBindListener只放到一个session中,所以一般是一对一监听的。

@WebListener()
public class MyListener implements HttpSessionBindListener{
    public void valueBound(HttpSessionBindingEvent event) {

    }

    public void valueUnbound(HttpSessionBindingEvent event) {

    }
}

JavaWeb中的8个监听器都是接口,不能直接new,需要先实现。

 HttpSession session = request.getSession();
        MyListener myListener = new MyListener();
        session.setAttribute("listener",myListener);      session.removeAttribute("listener");

session.setAttribute("listener",myListener);

把我(myListener)放到某个session中了,我开始监听这个session的HttpSessionBindListener对象的添加、移除事件,我自己的添加、移除也算。


统计在线人数

有3种方式。

我们在ServletContext(application域)中设置count参数来记录在线人数。

看怎么理解“在线“这个概念了。

如果正在浏览本站的页面,不管有没有登录,就算是在线,可以使用(1)。

(1)使用HttpSessionListener监听session的创建、销毁

一个在线用户对应一个Session,统计在线人数,只需统计服务器上session对象的数量。

@WebListener()
public class MyListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {
        //count++;
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        //count--
    }
}        

将session超时时间设置小些,因为默认30min,用户离开后30min这段时间内也算在在线,这样统计的误差略大。

超时时间太小,session频繁销毁、新建,又会增加服务器负担,且新建Session也会有时间开销。

一般人工客服超时时间是2min。

如果在线是指处于登录状态,那上面这种方式就不可行。因为访问本站就会创建session,不需要登录;登出后也可以继续访问、浏览本站的页面,session仍然保留。

这就需要使用(2)、(3)了。

(2)登录时获取ServletContext中的count,+1,登出时-1。

(3)利用HttpSessionBindListener,登录时绑定一个HttpSessionBindListener对象到session中,登出时从session中移出这个HttpSessionBindListener对象。

@WebListener()
public class MyListener implements HttpSessionBindListener{
    public void valueBound(HttpSessionBindingEvent event) {
         //count++
    }

    public void valueUnbound(HttpSessionBindingEvent event) {
          //count--
    }
}    

(2)、(3)其实是一样的,都是在用户登录、登出时记录一下,只是实现统计功能的代码所写位置不同,一个写在Servlet中,一个写在Listener中。

原文地址:https://www.cnblogs.com/chy18883701161/p/11436959.html

时间: 2025-01-04 05:41:13

JavaWeb Listener之HttpSessionBindListener的相关文章

JavaWeb Listener

1 ServletContextListener 监听ServletContext对象被创建和销毁的Servlet监听器 开发:>创建一个实现了ServletContextListener的类并且实现里面的两个方法 public class HelloServletContextListener implements ServletContextListener public class HelloServletContextListener implements ServletContextL

JavaWeb Listener之HttpSessionActivationListener ,session钝化、活化

HttpSessionActivationListener    监听HttpSession对象的活化.钝化 钝化:将HttpSession对象从内存中转移至硬盘,存储为.session文件. 活化:把HttpSession对象从持久化状态转变为运行状态(从硬盘加载到内存,恢复原样). @WebListener() public class MyListener implements HttpSessionActivationListener , Serializable { public vo

javaweb学习总结(四十五)——监听器(Listener)学习二

一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

javaweb学习总结(四十四)——监听器(Listener)学习

一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 1.2.监听器案例——监听window窗口的事件监听器 1 package me.gacl.listener.demo; 2 3 import java.awt.Fram

JavaWeb基础—监听器Listener

javaWeb三大组件: servlet listener(用的不多) filter 什么叫监听器: 初次相见:AWT 二次相见:SAX(XML解析时)Bundle 绑定 监听器是一个接口,内容由我们实现 它需要注册,例如注册在按钮上 监听器的方法会在特定事件发生时调用 特性: 总是和观察者模式相关. 事件源:谁飙车 事件:有人飚车了 监听器:交警(就监听谁飙车,就注册在事件源身上),监听器的方法(这里就是抓捕) 当然可能不止一个. JavaWeb中的监听器(八大监听器) 常见的事件源:Serv

JavaWeb:Listener

1.ServletContextListener: 1).what:监听 ServletContext  对象被创建或销毁的 Servlet 监听器. 2).how:  >创建一个实现了 ServletContextListener 的类,并且实现其中的两个方法 public class HelloServletContextListner implements ServletContextListener >在 web.xml 文件中配置 Listener <listener>

javaweb学习总结(四十七)——监听器(Listener)在开发中的应用

监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听器技术来实现这个功能了. 1 package me.gacl.web.listener; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.http.HttpSessionEvent; 5 import javax.ser

JavaWEB 通过Listener理解域对象生命周期

利用 ServletRequestListener.HttpSessionListener 以及 ServletContextListener 可以把request,session,以及Application的生命周期进一步的做一了解 > request:是一个请求,当一个响应返回时,即被销毁.当发送一个请求时被创建.注意:请求转发的过程是 一个 request 对象. 注:在页面上放的 属性 ,在servlet中时获取不到的,因为页面响应后request已经销毁了. 注:重定向是两个请求. >

JavaWeb监听器Listener

在监听器的对象作用领域中一般涉及监听主体(监听器).监听客体(事件源).监听事件(事件). 在警察监听小偷中,警察是监听器,小偷是事件源,偷东西是时间. JavaWeb中监听器的事件源(ServletContext.HttpSession.ServletRequest.JavaBean) 1.ServletContext 生命周期监听:ServletContextListener 属性监听:ServletContextAttributeListener 2.HttpSession 生命周期监听: