Java实现在线用户显示

 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 users = new HashMap();

	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 users = new HashMap();

	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配置


     
		 
             com.estone.www.aqjgws.util.bean.OnlineUserListener
		 
    



 

你可能感兴趣的:(java)