Java实现在线用户显示

27 篇文章 0 订阅

 iLife's 博客http://blog.csdn.net/fei1502816 


OnlineUser

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 在线用户统计
 */
public class OnlineUsers implements HttpSessionBindingListener {

	private Map<String, OnlineUser> users = new HashMap<String, OnlineUser>();

	private static OnlineUsers onlineUsers = new OnlineUsers();

	public static OnlineUsers getInstance() {
		return onlineUsers;
	}
	
	/**
	 * @return
	 */
	public Collection getUsers() {
		return users.values();
	}

	public void addUser(OnlineUser user) {
		users.put(user.getId(), user);
	}

	public void removeUser(String userId) {
		users.remove(userId);
	}

	/**
	 * 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
	 * 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置
	 * 
	 * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
	 */
	public void valueBound(HttpSessionBindingEvent event) {
		// 现在暂时不需要额外处理,你可以在这里记录日志等
	}

	/**
	 * 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中
	 * 
	 * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
	 */
	public void valueUnbound(HttpSessionBindingEvent event) {
		try {
			HttpSession session = event.getSession();
			OnlineUser u = (OnlineUser) session.getAttribute("currentUser");
			System.out.println("删除用户:"+u.getName());
			this.removeUser(u.getId());
		} catch (RuntimeException e) {
			 e.printStackTrace();
//			throw e;
		}
	}

}

OnlineUserListener

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 在线用户监听
 */
public class OnlineUserListener implements HttpSessionListener {

	public void sessionCreated(HttpSessionEvent event) {
		OnlineUser u = new OnlineUser();
		System.out.println("你登录网站========="+u.getId());
		u.setName("---");
		u.setId(event.getSession().getId());
		event.getSession().setAttribute("currentUser",u);
		OnlineUsers.getInstance().addUser(u);
	}

	public void sessionDestroyed(HttpSessionEvent event) {
		System.out.println("删除用户:"+event.getSession().getAttribute("currentUser"));
		OnlineUsers.getInstance().removeUser(event.getSession().getId());
	}
}


OnlineUsers


 

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 在线用户统计
 * author:
 */
public class OnlineUsers implements HttpSessionBindingListener {

	private Map<String, OnlineUser> users = new HashMap<String, OnlineUser>();

	private static OnlineUsers onlineUsers = new OnlineUsers();

	public static OnlineUsers getInstance() {
		return onlineUsers;
	}
	
	/**
	 * @return
	 */
	public Collection getUsers() {
		return users.values();
	}

	public void addUser(OnlineUser user) {
		users.put(user.getId(), user);
	}

	public void removeUser(String userId) {
		users.remove(userId);
	}

	/**
	 * 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
	 * 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置
	 * 
	 * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
	 */
	public void valueBound(HttpSessionBindingEvent event) {
		// 现在暂时不需要额外处理,你可以在这里记录日志等
	}

	/**
	 * 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中
	 * 
	 * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
	 */
	public void valueUnbound(HttpSessionBindingEvent event) {
		try {
			HttpSession session = event.getSession();
			OnlineUser u = (OnlineUser) session.getAttribute("currentUser");
			System.out.println("删除用户:"+u.getName());
			this.removeUser(u.getId());
		} catch (RuntimeException e) {
			 e.printStackTrace();
//			throw e;
		}
	}

}

web.xml配置

<!-- 设置网站访问监听器 -->
    <listener> 
		<listener-class> 
             com.estone.www.aqjgws.util.bean.OnlineUserListener
		</listener-class> 
    </listener>



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值