当前位置: 移动技术网 > IT编程>开发语言>Java > java web监听器统计在线用户及人数

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

在线用户使用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使用条件

运行结果:

由于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; 
  } 
} 

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网