提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2010-12-21 17:16:56.000|阅读 563 次
概述:本文将介绍如何使用java统计在线人数,希望对大家有帮助。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
对于登录信息时使用session存储的,所以我这里是通过实现HttpSessionAttributeListener这个接口完成的。
1、实现接口类,在web.xml文件中配置监听类,从而可以使该类完成其工作。
public class SessionListener implements HttpSessionAttributeListener
{
public void attributeAdded(HttpSessionBindingEvent event)
{
if (event.getName().equals("userid"))
{
try
{
OnlineCounter.doUser(event.getValue(),false);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public void attributeRemoved(HttpSessionBindingEvent event)
{
if (event.getName().equals("userid"))
{
try
{
OnlineCounter.doUser(event.getValue(),true);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public void attributeReplaced(HttpSessionBindingEvent event)
{
}
}
2、要做的就是实现任务类OnlineCounter了
public class OnlineCounter
{
private static List list = new ArrayList();
private static List list1 = new ArrayList();
private OnlineCounter() {
}
// 统计当前在线会员人数
public static void doUser(Object object,boolean bl) {
//得到用户当前访问时间
String nowtime = getTime("mm:ss");
//Str数组用来存放用户的id和访问时间
String[] str = new String[2];
str[0] = object.toString();
str[1] = nowtime;
//temp数组用来临时存放从list里面取出的用户的id和访问时间
String[] temp = new String[2];
//循环list
for (int i = 0; i < list.size(); i++) {
temp = (String[])list.get(i);
//如果从list里面取出的用户ip和str里面存放的id相同,则更新访问时间
if(bl==false && temp[0].equals(str[0])) {
list.set(i,str);
return;
}
//如果监听类中穿过来bl==true,则认为不在线
if(bl==true && temp[0].equals(str[0]))
{
list.remove(i);
}
}
//添加一个新的在线用户
if(bl==false)
list.add(str);
//释放资源
str = null;temp = null;
}
//统计网站所有在线人数
public static void allUser(Object object) {
//得到用户当前访问时间
String nowtime = getTime("mm:ss");
//Str数组用来存放用户得ip和访问时间
String[] str = new String[2];
str[0] = object.toString();
str[1] = nowtime;
//temp数组用来临时存放从list里面取出的用户ip和访问时间
String[] temp = new String[2];
//循环list
for (int i = 0; i < list1.size(); i++) {
temp = (String[])list1.get(i);
//如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间
if( temp[0].equals(str[0])) {
list1.set(i,str);
return;
}
//如果用户超过10分钟没有访问,则认为不在线
if(subTime(nowtime,temp[1]) > 600)
{
//System.out.print("清空list过期的值"+i);
list1.remove(i);
}
}
//添加一个新的在线用户
list1.add(str);
//释放资源
str = null;temp = null;
}
public static int getOnlineAllCount() {
//返回当前在线人数
return list1.size();
}
public static int getOnlineCount() {
//返回当前在线人数
return list.size();
}
/*public static void romovelist()
{
}*/
public static List getOnline() {
return list;
}
/** 计算两个时间差,返回相差秒数 */
public static int subTime(String src,String des) {
int n = 0;
java.util.Calendar ca = java.util.Calendar.getInstance();
long time1 =compareStringTime(src,des,"mm:ss");
ca.setTimeInMillis(time1);
n = (ca.get(java.util.Calendar.MINUTE)) * 60;
n = n + ca.get(java.util.Calendar.SECOND);
return n;
}
/**
* 获得当前时间
* @param parrten 输出的时间格式
* @return 返回时间
*/
public static String getTime(String parrten)
{
String timestr;
if(parrten==null||parrten.equals(""))
{
parrten="yyyyMMddHHmmss";
}
java.text.SimpleDateFormat sdf=new SimpleDateFormat(parrten);
java.util.Date cday=new Date();
timestr=sdf.format(cday);
return timestr;
}
/**
* 比较两个字符串时间的大小
* @param t1 时间1
* @param t2 时间2
* @param parrten 时间格式 :yyyy-MM-dd
* @return 返回long =0相等,>0 t1>t2,<0 t1<t2
*/
public static long compareStringTime(String t1,String t2,String parrten)
{
SimpleDateFormat formatter = new SimpleDateFormat (parrten);
ParsePosition pos = new ParsePosition(0);
ParsePosition pos1 = new ParsePosition(0);
Date dt1=formatter.parse(t1,pos);
Date dt2=formatter.parse(t2,pos1);
long l=dt1.getTime()-dt2.getTime();
return l;
}
}
3、在web。xml中配置监听类
<!-- online user -->
<listener>
<listener-class>baby.com.common.SessionListener</listener-class>
</listener>
最后就是在访问页面调用类中的alluser方法来实现统计在线人数就可以了
String ip="";
if (request.getHeader("x-forwarded-for") == null)
{
ip= request.getRemoteAddr();
}
else
{
ip=request.getHeader("x-forwarded-for");
}
OnlineCounter.allUser(ip);
这样就完成了 在线统计功能。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢