日期:2014-05-18  浏览次数:20791 次

[300分]在jsp页面中如何有效的统计在线用户(只要浏览该网站,而且把登陆的用户的用户名显示出来,如果没有登入显示游客,当然有多
急等有一个有效的例子!!
3个100分的帖子有效的!

------解决方案--------------------
另一帖!
http://community.csdn.net/Expert/topic/5509/5509437.xml?temp=.8490564
------解决方案--------------------
/**
* 实现在线注册用户数量和用户名字监听
* 从而查询到在线用户的名字列表.
* 此类实例的作用域应为application
* @author lichuxiong
*/
package arch.listener;

import javax.servlet.http.*;
import javax.servlet.*;
import java.util.Vector;

public class OnLineUser implements HttpSessionBindingListener{
private static Vector users=new Vector();
public OnLineUser(){}

/**
* 加入session时处理
*/
public void valueBound(HttpSessionBindingEvent e){
users.trimToSize();
if(!existUser(e.getName()))
users.add(e.getName());
}
/**
* 从session中移除时处理
*/
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
}
/**
* 返回注册登陆的用户数量
* @return
*/
public int getCount(){
users.trimToSize();
return users.capacity();
}
/**
* 判断用户是否已经登陆
* @param userName
* @return
*/
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for(int i=0;i <users.capacity();i++){
if(userName.equals((String)users.get(i))){
existUser=true;
break;
}
}
return existUser;
}
/**
* 退出时删除用户
* @param userName
* @return
*/
public boolean deleteUser(String userName){
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i <users.capacity();i++)
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
if(currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
/**
* 获得用户向量,实现在线用户昵称查询
* @return
*/
public Vector getOnLineUser(){
return users;
}
/* public static void main(String[] args){
OnLineUser users=new OnLineUser();
System.out.println(users.getCount());
}*/
}

------解决方案--------------------
/**
* @author lichuxiong
* 记录用户在线人数类(游客和登陆系统的用户全部统计)
*/
package arch.listener;

import javax.servlet.*;
import javax.servlet.http.*;

public class UserListener implements HttpSessionListener,ServletContextListener {
private static int count=0;
private ServletContext context=null;
public UserListener(){
count=0;
}
/**
* session创建时运行
* @param se
*/
public void sessionCreated(HttpSessionEvent se){
count++;
setContext(se);
}
/**
* session销毁时执行
* @param se
*/
public void sessionDestroyed(HttpSessionEvent se){
count--;
if(count <0)count=0;
setContext(se);
}
/**
* 把用户数保存到对所有用户共享的ServletContext中
* @param se
*/
public void setContext(HttpSessionEvent se){
se.getSession().getServletContext().setAttribute( "onLine ", new Integer(count));
}
/**
* context销毁时激发
*/
public void contextDestroyed(ServletContextEvent even