java 页面在线访问人数统计和在线登录人数统计
来源:互联网 发布:美国最好大数据公司 编辑:程序博客网 时间:2024/05/04 03:08
OnlineSessionListener监听器(实现HttpSessionListener)接口来实现页面在线访问人数统计,当有用户访问到页面就会创建一个session,此时会触发public
public class OnlineList {private static final OnlineList onlineList = new OnlineList(); private int maxSession; private int activeSession; private OnlineList() { //v = new Vector(); } public static OnlineList getInstance() { return onlineList; } public void addSession(){ activeSession++; if(activeSession>=maxSession){ maxSession=activeSession; } } public void delSession(){ if(activeSession > 0) activeSession--; } public int getActiveSession(){ return activeSession;}public int getmaxSession(){ return maxSession;} }public class OnlineSessionListener implements HttpSessionListener {private OnlineList ol = OnlineList.getInstance();public void sessionCreated(HttpSessionEvent arg0) { ol.addSession();}public void sessionDestroyed(HttpSessionEvent arg0) { ol.delSession();}}
用UserListener监听器(实现HttpSessionAttributeList
在UserList这个类的设计上,我们应用了单例(Singleton)设计模式,关于设计模式的知识,读者可以参看相关的书籍。UserList是一个单例类,所谓单例类,是指一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例类的一个最重要的特点是类的构造方法是私有的,从而避免了外部利用该类的构造方法直接创建多个实例。在代码的第8行,定义一个静态的常量userList,它表示了UserList类的一个对象。在UserList类加载的时候,这个对象就产生了。第11~14行,声明UserList类的构造方法为private,这是为了避免在外部使用UserList类的构造方法创建其对象。要注意的是,如果在类中不写构造方法,那么Java编译器就会为这个类提供一个默认的不带参数的公开的构造方法,这样,在外部就可以通过类的构造方法创建对象了,那么UserList也就不再是一个单例类了。既然UserList类的构造方法是私有的,那么在外部就不能用new去构造对象,于是在代码的第16~19行,定义了一个静态的方法getInstance(),在这个方法中,返回在类加载时创建的UserList类的对象。因为getInstance()方法本身是静态的,所以可以直接通过类名来调用。
import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;public class UserListener implements HttpSessionAttributeListener {//用户登录身份证 private String USERNAME; private UserList u1 = UserList.getInstance(); //判断用户是否存在 public boolean IsExist(String sfz)throws Exception { try { return u1.IsExist(sfz); } catch(Exception ex) { ex.printStackTrace(); return false; } } public String getUSERNAME() { return USERNAME;}public void setUSERNAME(String username) { USERNAME = username;}public void attributeAdded(HttpSessionBindingEvent event) { try{ if("USERNAME".equals(event.getName())){ u1.addUser((String)event.getValue()); } }catch(Exception e){ e.printStackTrace(); } }public void attributeRemoved(HttpSessionBindingEvent event) { try{ if("USERNAME".equals(event.getName())){ u1.RemoveUser((String)event.getValue()); } }catch(Exception e){ e.printStackTrace(); } }public void attributeReplaced(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub }}import java.util.Enumeration;import java.util.Iterator;import java.util.Vector;public class UserList {private static final UserList userList = new UserList(); private Vector v = new Vector(); private int maxUser; private UserList() { //v = new Vector(); } public static UserList getInstance() { return userList; } //将用户登陆身份证保存到Vector中 public void addUser(String sfz) throws Exception { try{ if ( sfz != null&&!"".equals(sfz)) { if ( v.indexOf(sfz) >= 0)//判断是否已经存在 return ; //可能的操作 //添加登录ID v.addElement(sfz); if(getUserCount()>maxUser){ maxUser=getUserCount(); } } } catch(Exception ex) { ex.printStackTrace(); } finally{ } } public boolean IsExist(String sfz)throws Exception { try{ if ( v.indexOf(sfz) >= 0) return true; return false; } catch(Exception ex) { ex.printStackTrace(); return false; } } //删除用户登录ID public void RemoveUser(String sfz)throws Exception { try{ if ( sfz != null&&!"".equals(sfz) ) { //修改数据库 //移除用户登录ID v.removeElement(sfz); } } catch(Exception ex) { ex.printStackTrace(); //写日志 } finally{ } } //返回Vector枚举 public Enumeration getUserList() { return v.elements(); } //返回迭代器 public Iterator getUserListItera(){ return v.iterator(); } //返回在线人数 public int getUserCount() { return v.size(); } //返回在线人数峰值 public int getMaxUser(){ return maxUser; }}最后在web-xml里 加入如下信息<listener> <listener-class> com.myxmu.listener.UserListener </listener-class></listener>
在线人数统计程序存在一些问题,如果用户没有退出登录而直接关闭了浏览器,那么在服务器端的Session中,这个用户仍然是存在的,直到Session的超时值发生。所以在线人数统计只能做到在一个时间段内统计出大致的在线人数,而不能统计出精确的人数。为了提高统计的精确性,可以在客户端设置脚本,当浏览器关闭时,自动向服务器发送一个请求,服务器收到这个请求后,使Session失效。不过,这也不能做到100%的精确,因为还存在着客户端的浏览器异常终止,或者客户机器崩溃的可能。
- java 页面在线访问人数统计和在线登录人数统计
- 统计在线人数和登录人数
- java 统计在线人数
- java统计在线人数
- java统计在线人数
- php 在线访问人数统计
- 通过Application统计网站访问人数和在线人数
- ASP.NET在线人数和访问人数总量统计
- 统计在线人数、每日访问人数和总人数
- 统计java网站访问量和在线人数
- java统计在线人数详解|
- java 实现统计在线人数
- java 实现统计在线人数
- java 统计网站在线人数
- java 在线人数的统计
- java web在线人数统计
- java session统计在线人数
- 访问量和在线人数统计
- Java核心技术笔记——数据结构(1)
- PostgreSQL学习手册(数据类型)
- Android监听Home按键消息
- 高通平台 USB OTG功能
- boost 统计分布之正态分布
- java 页面在线访问人数统计和在线登录人数统计
- 网址URL中特殊字符转义编码
- unity 更换鼠标图标 脚本
- openwrt:install: cannot create directory ‘XXX’:File exists 的出错处理
- android values-v11和values-v14文件夹是干啥的?
- chapter2 理解消息中间件和JMS
- Android 四大组件详解(一) Activity
- Java中测试异常的多种方式
- Java中this调用重载构造函数