Servlet监听在线用户

<!-- 在线用户监听器 -->
	<listener>
		<listener-class>com.yingjun.sharing.web.SessionListener</listener-class>
	</listener>
package com.yingjun.sharing.web;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.yingjun.sharing.dto.SessionInfo;
import com.yingjun.sharing.model.Online;

public class SessionListener implements ServletContextListener, HttpSessionListener,HttpSessionAttributeListener {
	 
	 private ServletContext application = null ;   
	
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		//初始化一个application对象 
		application=sce.getServletContext();
		//设置一个列表属性,用于保存在线用户信息   
	    this.application.setAttribute("onlineList", new ArrayList<Online>()) ;
		
		
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		
	}
	
	
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		
	}

	@Override
	@SuppressWarnings("unchecked")
	public void sessionDestroyed(HttpSessionEvent se) {
		   System.out.println("@@@@@sessionDestroyed@@@@@");
		    //获取当前在线用户列表
			List<Online> ols=(ArrayList<Online>) application.getAttribute("onlineList");
			SessionInfo sf =(SessionInfo) se.getSession().getAttribute("SessionInfo");
			if(sf!=null){
				Online ol=new Online(sf.getUsername(), sf.getIp());
				ols.remove(ol);
				System.out.println("向ServletContext中移除用户:"+sf.getUsername());
				//将删除后的列表重新设置到application属性中    
				this.application.setAttribute("online", ols) ; 
			}
			
	}
		
	

	@Override
	@SuppressWarnings("unchecked")
	public void attributeAdded(HttpSessionBindingEvent se) {
		System.out.println("@@@@@attributeAdded@@@@@");
		//获取当前在线用户列表
		List<Online> ols=(ArrayList<Online>) application.getAttribute("onlineList");
		if("SessionInfo".equals(se.getName())){
			SessionInfo sf =(SessionInfo) se.getValue();
			if (sf != null) {
				Online ol=new Online(sf.getUsername(), sf.getIp());
				ols.add(ol);
				System.out.println("向ServletContext中存入用户:"+sf.getUsername());
				//将添加后的列表重新设置到application属性中  
				application.setAttribute("onlineList", ols);
			}
		}
		
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent se) {
	
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent se) {
	}

	

	
}
package com.yingjun.sharing.model;

public class Online {

	
	private String name;
	private String ip;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	
	public Online() {
		super();
	}
	public Online(String name, String ip) {
		super();
		this.name = name;
		this.ip = ip;
	}
}

猜你喜欢

转载自wosyingjun.iteye.com/blog/1922880