Servlet中有一个session监听接口:HttpSessionListener,我们可以通过HttpSessionListener监听接口实现对当前在线人数的监听
HttpSessionListener是个session监听器,它有两个方法:
public void sessionCreated(HttpSessionEvent event){}
public void sessionDestroyed(HttpSessionEvent event){}
前者是在session被创建的时候执行,后者是在session被销毁的时候执行,通过对当前session的监听,达到统计在线人数的效果。
首先web.xml中添加如下代码:
<listener>
<listener-class>cn.wuzhuti.web.listener.CountLineListener</listener-class>
</listener>
新建一个Listener类CountLineListener.java,代码如下:
package cn.wuzhiti.web.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; ublic class CountLineListener implements HttpSessionListener{
/***********
* 创建session时调用
*/
public void sessionCreated(HttpSessionEvent event) {
System.out.println("创建session......");
ServletContext context=event.getSession().getServletContext();
Integer count=(Integer)context.getAttribute("count");
if(count==null){
count=new Integer(1);
}else{
int co = count.intValue( );
count= new Integer(co+1);
}
System.out.println("当前用户人数:"+count);
context.setAttribute("count", count);//保存人数
}
/************
* 销毁session时调用
*/
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("销毁session......");
ServletContext context=event.getSession().getServletContext();
Integer count=(Integer)context.getAttribute("count");
int co=count.intValue();
count=new Integer(co-1);
context.setAttribute("count", count);
System.out.println("当前用户人数:"+count);
}
}
这样在用户后创建Session的时候sessionCreateed会被调用,在线人数增加 1人;在退出登录删除Session时sessionDestroyed会被调用,在线人数减少1人。