欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java web监听器统计在线用户及人数

程序员文章站 2024-03-03 15:26:34
在线用户使用httpsessionlistener监听器统计  每当一个session会话建立  在线用户人数+1 每当一个session会话销毁...

在线用户使用httpsessionlistener监听器统计 

每当一个session会话建立  在线用户人数+1

每当一个session会话销毁 在线用户人数-1

使用servletrequestlistener监听器统计用户信息

每当一个request建立  将当前用户放入集合

每当session会话销毁  将当前用户移出集合

我使用的是servlet3.0  监听器直接使用注解@weblistener即可 不用在web.xml中布局

在web.xml中配置session-timeout标签  标志session过期时间为1分钟  0为不过期

<session-config> 
  <session-timeout>1</session-timeout> 
</session-config> 

servlet3.0使用条件

java web监听器统计在线用户及人数

运行结果:

java web监听器统计在线用户及人数

由于session对话关闭时间并不一定以设置的1分钟为准 所以 gif图像中最后等待时间较长

user 实体类

package com.scx.entity; 
/** 
 * 用户实体类 
 * 
 */ 
public class user { 
  //当前用户的session id 
  private string sessionid; 
  //当前用户的ip地址 
  private string ip; 
  //当前用户第一次访问的时间 
  private string firsttime; 
  public user() { 
    super(); 
  } 
  public string getip() { 
    return ip; 
  } 
  public void setip(string ip) { 
    this.ip = ip; 
  } 
  public string getfirsttime() { 
    return firsttime; 
  } 
  public void setfirsttime(string firsttime) { 
    this.firsttime = firsttime; 
  } 
  public string getsessionid() { 
    return sessionid; 
  } 
  public void setsessionid(string sessionid) { 
    this.sessionid = sessionid; 
  } 
} 
 

httpsessionlistener监听器

package com.scx.listener; 
import java.util.arraylist; 
import javax.servlet.annotation.weblistener; 
import javax.servlet.http.httpsessionevent; 
import javax.servlet.http.httpsessionlistener; 
import com.scx.entity.user; 
import com.scx.util.sessionutil; 
/** 
 * httpsessionlistener 监听器 
 * 
 */ 
@weblistener 
public class myhttpsessionlistener implements httpsessionlistener{ 
  //当前用户数 
  private int usercounts=0; 
  @override 
  public void sessioncreated(httpsessionevent se) { 
    //sessioncreated 用户数+1 
    usercounts++; 
    //重新在servletcontext中保存usercounts 
    se.getsession().getservletcontext().setattribute("usercounts", usercounts); 
  } 
  @override 
  public void sessiondestroyed(httpsessionevent se) { 
    //sessiondestroyed 用户数-1 
    usercounts--; 
    //重新在servletcontext中保存usercounts 
    se.getsession().getservletcontext().setattribute("usercounts", usercounts); 
    @suppresswarnings("unchecked") 
    arraylist<user> userlist=(arraylist<user>) se.getsession().getservletcontext().getattribute("userlist"); 
    string sessionid=se.getsession().getid(); 
    //如果当前用户在userlist中 在session销毁时 将当前用户移出userlist 
    if(sessionutil.getuserbysessionid(userlist, sessionid)!=null){ 
      userlist.remove(sessionutil.getuserbysessionid(userlist, sessionid)); 
    } 
    //将userlist集合 重新保存到servletcontext 
    se.getsession().getservletcontext().setattribute("userlist", userlist); 
  } 
} 

servletrequestlistener监听器

package com.scx.listener; 
import java.text.simpledateformat; 
import java.util.arraylist; 
import java.util.date; 
import javax.servlet.servletrequestevent; 
import javax.servlet.servletrequestlistener; 
import javax.servlet.annotation.weblistener; 
import javax.servlet.http.httpservletrequest; 
import com.scx.entity.user; 
import com.scx.util.sessionutil; 

/** 
 * servletrequestlistener 监听器 
 * 
 */ 
@weblistener 
public class myservletrequestlistener implements servletrequestlistener { 
  //用户集合 
  private arraylist<user> userlist; 
  @override 
  public void requestdestroyed(servletrequestevent arg0) { 
  } 
  @suppresswarnings("unchecked") 
  @override 
  public void requestinitialized(servletrequestevent arg0) { 
    //从servletcontext中获的userlist 
    userlist=(arraylist<user>) arg0.getservletcontext().getattribute("userlist"); 
    //如果servletcontext中没有userlist对象 初始化userlist 
    if(userlist==null){ 
      userlist=new arraylist<user>(); 
    } 
    httpservletrequest request=(httpservletrequest) arg0.getservletrequest(); 
    //sessionid 
    string sessionid=request.getsession().getid(); 
    //如果当前sessionid不存在集合中 创建当前user对象 
    if(sessionutil.getuserbysessionid(userlist,sessionid)==null){ 
      user user=new user(); 
      user.setsessionid(sessionid); 
      user.setip(request.getremoteaddr()); 
      simpledateformat sdf=new simpledateformat("yyyy-mm-dd hh:mm:ss"); 
      user.setfirsttime(sdf.format(new date())); 
      userlist.add(user); 
    } 
    //将userlist集合 保存到servletcontext 
    arg0.getservletcontext().setattribute("userlist", userlist); 
  } 
} 

工具类

package com.scx.util; 
import java.util.arraylist; 
import com.scx.entity.user; 
public class sessionutil { 
  //根据sessionid判断当前用户是否存在在集合中 如果存在 返回当前用户 否则返回null 
  public static user getuserbysessionid(arraylist<user> userlist,string sessionid) { 
    for (user user : userlist) { 
      if(sessionid.equals(user.getsessionid())){ 
        return user; 
      } 
    } 
    return null; 
  } 
} 

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!