一、在线用户列表:
1、实时刷新在线用户,其实现方法如下:
创建会话管理器类,监听session会话,包含成员变量map<userName,Session>,当session创建时,将用户添加到map集合中,session销毁时,将用户从map集合中移除;
在页面onload中调用js,定时每1分钟调用后台获取map集合中用户信息的方法;
此功能关键在于考虑多种用户退出系统的情况:
1>正常注销,销毁session,触发移除map中相应用户操作;
2>session超时,web.xml中配置超时时间,当客户端超时时,会自动销毁session;
3>同一用户第二次登录时,将第一次登录注销;
4>关闭浏览器推出,在页面onunload事件中调用注销用户方法;
5>关机,断电,断网等异常情形,首页onload事件中定时每1分钟发送消息到服务器端,服务器端返回任意消息,形成心跳,以检测客户端是否在线;session超时时间设置为2分钟,当客户端发生异常,不再发送消息到客户端,2分钟后session超时,自动销毁session。
2、系统功能模块使用次数统计:
此功能用户统计各个模块使用次数,开始时准备直接查询日志表,根据模块分组得到使用次数,但是后来需求说统计方式是,每点击一下左边的菜单就算使用一次,进去相应模块后的增删改不算,所以改变处理为以下处理方式:
1、左边的菜单是存在数据库菜单表中,可以增删改的,所以直接在页面调用一个js,在执行查询功能之前,用dwr先将菜单表的useCount字段加1;
2、考虑到子菜单有可能移动,所以根菜单的使用次数就不能单纯的在点击子菜单时加1,而应该为其所有子菜单的使用次数之和;
3、此统计数据以柱状图显示,初始页面显示各个根菜单的使用情况,点击表示某根菜单使用情况的柱子,可以查看其子菜单的使用情况柱状图;这里涉及到jfreechart的热点链接,其处理步骤如下:
java中:
plot.setURLGenerator(new StandardPieURLGenerator("xx.do?"));//设定链接
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);//生成图片
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; //获取图片地址
ChartUtilities.writeImageMap(w, "map0", info, false); //生成map0
jsp页面中:
${map0}
<img src="${graphURL}" width="500" height="300" usemap="#map0">
设定了链接之后,jfreechart会自动添加一些参数,包括category,其值就是menuName,我就通过判断category是否为空,来区分是否是根菜单,如果是则设置热点链接查看子菜单使用情况,如果不是则不让它继续链接,而是在页面下边生成一个“返回”按钮,让其可以返回到根菜单使用情况页面。
三、经常使用的用户统计:
1、使用次数可在属性文件中配置,三种情况及规则如下:
1>最近一个月,超过10次;
2>最近一个季度,超过25次;
3>最近一年,超过100次;
2、使用次数取操作日志表中的每人的登录天数,一天登录多次的不重复统计;
四、spdt分布情况:
1、包括各个spdt下的激活用户数及经常使用的用户数;
2、激活用户数取用户表中按spdt分组的数据,不与时间相关,经常使用的用户数同“经常使用的用户统计”,分三种情况进行统计;
3、页面以柱状图展示,每组spdt下红色柱状代表激活用户数,蓝色柱状代表经常使用的用户数;柱子上方表明用户数;
五、系统登录次数统计:
1、三种统计方式及页面显示:
1>按年统计,无需输入任何条件,可按年统计出系统使用次数;页面横轴显示“xxxx”;
2>按月统计,页面显示年份下拉列表,按按月统计出相应年份的使用次数;页面横轴显示“xxxx-xx”;
3>按天统计,页面显示年份、月份下拉列表,可按天统计出相应月份的使用次数;页面横轴显示“xxxx-xx-xx”;
2、页面以折线图展示,以反映系统使用变化情况;
3、登录次数数据也是取自操作日志表,按时间分组;但涉及到一个问题,按天统计时,当某天为休息日,没有用户登录时,查询出的数据没有当月总天数那么多条记录,折线图横轴就会出现跳跃,这样如果需要的话,需要在后台对数组数据进行补齐;
4、页面横轴显示格式,可以在查询语句中直接格式化;
5、页面下拉列表动态显示,不能用<p>标签,这样会自动换行,应该<table>嵌套<table>标签;