`

java统计在线人数(session存储信息的)

阅读更多

这篇日志是我写的第三次了 前两次都发布失败!郁闷极了!

 

由于在web开发中常常用到这一部分所以在此记录一下,呵呵,就到备忘录了!

我对于登录信息时使用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);

 

这样就完成了 在线统计功能。 如有什么更好的方法请留言谢谢!

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    java统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解系统当前的活跃用户量。本项目通过实现`HttpSessionListener`接口,每隔一分钟动态更新在线人数,提供了高效且可靠的解决方案。以下是对这个...

    JavaWeb 用session统计在线人数

    在JavaWeb开发中,"用session统计在线人数"是一个常见的需求,主要应用于网站或应用的实时用户活动监控。本文将详细解析如何利用session这一核心技术来实现这个功能。 首先,理解session的基本概念。在Web开发中,...

    java web在线人数统计/监听

    总结,Java Web在线人数统计通过监听Session生命周期,结合适当的存储和显示机制,可以实现高效且实时的在线用户数量统计。理解这一机制对于提升Web应用的用户体验和优化服务器资源管理至关重要。

    Spring boot通过HttpSessionListener监听器统计在线人数的实现代码

    - 为了防止用户在同一个浏览器使用多个tab或窗口时导致在线人数统计重复计数,可以将用户唯一标识符(如session中的某个属性)存储到一个HashSet集合中。在`sessionDestroyed`方法中,可以从HashSet中移除对应的...

    session统计在线人数.rar

    **在线人数计数:Java Session统计实战** 在这个关于"session统计在线人数.rar"的压缩包中,包含了Java编程语言的一个示例项目,主要用于演示如何通过session对象来跟踪和统计网站或应用程序中的在线用户数量。Java...

    JAVA的SESSION精准统计

    3. **分布式环境**:在分布式系统中,多个服务器可能共享同一个Session存储(例如使用Redis或Memcached)。在这种情况下,Session统计需要跨服务器同步,可以使用分布式锁或者在共享存储中维护全局的Session计数。 ...

    JAVA jsp统计在线人数

    在Java JSP(JavaServer Pages)环境中,统计在线人数是一项常见的需求,这通常涉及到服务器端的会话管理、数据持久化以及实时性处理。这里我们将深入探讨如何利用JSP技术来实现这一功能。 首先,我们需要理解JSP的...

    java web 统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解网站或应用的实时活跃用户数量。这里我们将深入探讨如何实现这一功能。 首先,我们需要理解“在线人数”的定义。通常,它指的是在一定时间窗口...

    Java监听器学习 统计当前在线人数

    在Java编程中,监听器(Listener)是一种关键的机制,它允许程序对特定事件的发生做出反应。本主题将深入探讨如何使用...理解Java监听器的概念,并结合适当的工具和技术,能帮助你构建出稳定且高效的在线人数统计系统。

    网站统计在线人数,当前年、月、日访问量JAVA代码

    在网站运营过程中,统计在线人数和访问量是至关重要的数据指标,它们可以帮助我们了解网站的活跃度、用户行为以及优化方向。本主题将详细介绍如何使用Java编程语言来实现这一功能,特别是关注当前年、月、日的访问量...

    HttpSessionBindingListener实现在线人员查看即人数统计

    当用户注销、关闭浏览器或session超时时,对应的session对象将被解绑,此时应相应地更新在线人数。 5. **显示在线人数**:你可以创建一个Servlet或JSP页面,实时显示当前在线人数。这可以通过访问一个全局维护的...

    在线人数统计程序(JSP)

    在线人数统计程序是Web开发中一个常见的功能,用于实时显示网站当前在线用户的数量。这个程序通常基于服务器端的技术实现,例如JavaServer Pages (JSP)。JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java...

    判断用户是否在线和实时统计在线人数

    在IT行业中,尤其是在Web开发领域,判断用户是否在线和实时统计在线人数是常见的需求,这有助于提供更好的用户体验和服务。这两个概念通常与Java Web和JSP技术密切相关,涉及到HTTP会话管理和数据结构的运用。 首先...

    springboot 用监听器统计在线人数案例分析

    总结来说,使用HttpSessionListener来统计在线人数是一种有效的方法,但在实现时需要注意细节,如确保session数量的准确更新以及处理session生命周期事件。这样,我们就可以通过访问ServletContext来获取当前在线...

    如果统计在线人数应用程序

    根据提供的文件信息,我们可以深入探讨如何在Web应用中实现在线用户人数统计这一功能。此功能在许多场景下都非常实用,比如在线教育平台、直播系统、社区论坛等,它可以帮助管理员实时了解系统的负载情况,同时也为...

    JSP 在线人数统计的实现

    - 除了基于Session的统计,还可以结合Cookie、数据库或其他分布式数据存储方案来实现更准确的在线人数统计。 - 可以通过异步更新或者定时任务,定期将统计信息持久化,避免因服务器重启导致数据丢失。 以上就是...

    记录同时在线人数 jsp

    在开发Java Web应用程序时...总之,通过JSP、Servlet和session监听器,我们可以有效地统计和展示Java Web应用的实时在线人数。然而,实际应用中还需要考虑更多因素,如性能优化、用户体验以及更准确的在线状态判断等。

    jsp实现在线人数及在线用户统计

    ### JSP实现在线人数及在线用户统计 #### 知识点概述 在现代Web开发中,统计在线人数和在线用户是十分重要的功能之一,尤其是在构建社区、论坛等交互性强的网站时。通过JSP(JavaServer Pages)可以方便地实现这一...

    Javaweb监听器实例之统计在线人数

    1. 当用户登录时(即会话创建时),记录在线人数加一,并将当前的用户信息(包括sessionID、IP地址和第一次登录时间)存储起来。这通常需要实现HttpSessionListener接口中的sessionCreated方法。 2. 当用户登出时...

    JSP中的在线人数统计

    本文将详细介绍如何在JSP(JavaServer Pages)环境中实现在线人数统计的功能。此功能主要依赖于J2EE平台提供的`HttpSession`机制以及`HttpSessionListener`监听器来完成。 #### 二、背景知识 1. **JSP与Servlet**...

Global site tag (gtag.js) - Google Analytics