统计论坛在线人数
jsp做的论坛,怎样统计论坛的在线人数
------解决方案--------------------如果有新的用户登录进来。也就是新开辟了session,那么在application中就做+1的操作,session销毁-1
这个比较简单
------解决方案--------------------首先,编写一个简单的计数器,代码如下:
package gongfei.cmc.articles.onlinecounter;
public class OnlineCounter {
private static long online = 0;
public static long getOnline() {
return online;
}
public static void raise(){
online++;
}
public static void reduce(){
online--;
}
}
然后,编写HttpSessionListener实现类,在这个实现类的sessionCreated方法中调用OnlineCounter的raise方法,在sessionDestroyed方法中调用OnlineCounter的reduce方法,代码如下:
package gongfei.cmc.articles.onlinecounter;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineCounterListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent hse) {
OnlineCounter.raise();
}
public void sessionDestroyed(HttpSessionEvent hse) {
OnlineCounter.reduce();
}
}
再然后,把这个HttpSessionListener实现类注册到网站应用中,也就是在网站应用的web.xml中加入如下内容:
<web-app>
……
<listener>
<listener-class>
gongfei.cmc.articles.example.OnlineCounterListener
</listener-class>
</listener>
……
</web-app>
OK,在线人数统计功能已经实现,只要在JSP页面中加入下面这样的脚本就能显示但前在线人数了:
<%@ page language="java" pageEncoding="GB2312" %>
<%@ page import="gongfei.cmc.articles.onlinecounter.OnlineCounter" %>
<html>
<head><title>On Line Counert</title></head>
<body bgcolor="#FFFFFF">
On line:<%=OnlineCounter.getOnline()%>
</body>
</html>
------解决方案--------------------如果不是要求特别精确的话可以通过统计session来判断。因为浏览器访问的话你无法解决客户端突然断电之类的一些特殊情况。所以不可能有太精确的统计
------解决方案--------------------session监听器2楼很详细
------解决方案--------------------在application中声明一变量。当一个用户登录时就加一。并且要保证线程安全用synchronized关键字控制
------解决方案--------------------http://topic.csdn.net/u/20120313/09/5f1403a5-26ea-43f3-865b-cd9ca0fdd383.html
看我回复的
------解决方案--------------------这个问题,论坛里面多的是。搜一下就行啦。
------解决方案--------------------google下不就是有很多吗?楼主是需要思路吗?还是代码?
------解决方案--------------------2楼给出答案了,,
------解决方案--------------------下面为我的测试例子,首先建个web工程,例子中程序包括:OnLineUser.java ,login.jsp ,logout.jsp,onLineUser.jsp,closePage.jsp五个文件
OnLineUser.java 内容如下:
package org.cai.servlet ;
import java.util.* ;
import javax.servlet.http.* ;
import javax.servlet.* ;
public class OnLineUser implements HttpSessionBindingListener{
public OnLineUser(){
}
private Vector users = new Vector() ;
public int getCount(){
users.trimToSize() ;
return users.capacity() ;
}
public boolean existUser(String userName){