歌者悦

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.在线用户,包括登录用户和未登录用户。

后台java

public class OnlineUser   implements HttpSessionListener{ 

private static int sessionCount = 0;//在线用户数

//session创建,用户数加1
public void sessionCreated(HttpSessionEvent event) {
        System.out.println("==================sessionCreated");
        HttpSession session = event.getSession();
        ServletContext application = session.getServletContext();
        sessionCount++;
        application.setAttribute("onlineCount", sessionCount);

}

//session销毁,用户数减1
public void sessionDestroyed(HttpSessionEvent event) {
        System.out.println("==================sessionDestroyed");
        HttpSession session = event.getSession();
        ServletContext application = session.getServletContext();
        if (sessionCount >= 1) {
            sessionCount = sessionCount - 1;
        }
        application.setAttribute("onlineCount", sessionCount);

}

}

前台jsp

当前在线用户数:<s:property value="#application.onlineCount"/>人

2.登录用户统计

后台java

import javax.servlet.http.*;

import com.qkj.entity.User;

import java.util.*;

public class OnLineUser implements HttpSessionBindingListener {
    private String userName;

    public OnLineUser() {
        System.out.println("请求:::::OnLineUser::::::");
    }

    private static Vector users = new Vector();
    //获得在线用户数
    public int getCount() {
        users.trimToSize();// 调整Vector users的容量为Vector users的大小
        return users.capacity();// 返回users的容量
    }
    //用户是否已经在线
    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;
    }
    //删除用户
    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;
    }
    
    public Vector getOnLineUser() {
        return users;
    }

    public void valueBound(HttpSessionBindingEvent e) {
        users.trimToSize();
        if (!existUser(e.getName())) {
            users.add(e.getName());
            System.out.print(e.getName() + "    登入到系统 " + (new Date()));
            System.out.println("      在线用户数为:" + getCount());
        } else {
            System.out.println(e.getName() + "已经存在");
        }
    }

    public void valueUnbound(HttpSessionBindingEvent e) {
        users.trimToSize();
        String userName = e.getName();
        deleteUser(userName);
        System.out.print(userName + "    退出系统 " + (new Date()));
        System.out.println("      在线用户数为:" + getCount());
    }
}

注册和登录成功时,开始计数

  HttpServletRequest request = ServletActionContext.getRequest();

  //监听在线用户
  request.getSession().setAttribute(userNew.getUserName(), new OnLineUser());

注销或者session超时,sesssion-1

session.invalidate();

posted on 2015-12-28 14:35  歌者悦  阅读(689)  评论(0)    收藏  举报