用java listener統計在線人數,並獲取session中對應的ip

/**
 * 此類實現ServletRequestListener接口是關鍵,因爲此接口中的方法可以實現對request的監聽,這樣我們就可以從參數ServletRequestEvent中獲取request了
 * @author vivi
 *
 */
public class OlineListener implements HttpSessionListener,HttpSessionAttributeListener,ServletContextListener,ServletRequestListener{
	//用Map來存儲session,sessionid作爲key session作爲value
	private static Map sessionMap = new HashMap<String,HttpSession>();
	
	HttpServletRequest request;
	
	public void sessionCreated(HttpSessionEvent se) {
		//當session 創建的時候,例如我要監聽統計在線人數 並且獲取當前session的ip
		HttpSession session = se.getSession();
		String ip = request.getRemoteAddr();//獲取客戶端ip
		session.setAttribute("ip", ip);
		String sid = session.getId();//獲取sessionId
		sessionMap.put(sid, session);
	}
	
	public static int getOline(){
		return sessionMap.size();//獲取在線人數,獲取到session 就可以拿到ip了
	}

	public void requestDestroyed(ServletRequestEvent arg0) {
		
	}

	public void requestInitialized(ServletRequestEvent sre) {
		request = (HttpServletRequest)sre.getServletRequest();//獲取request
	}
	
	public void sessionDestroyed(HttpSessionEvent arg0) {
		// 銷燬session或者session超時時
	}

	public void attributeAdded(HttpSessionBindingEvent arg0) {
		//這裏是監聽當session調用setAtrribute()方法時,例如用戶登錄,將用戶信息設置進session
		
	}

	public void attributeRemoved(HttpSessionBindingEvent arg0) {
		//這裏監聽當session調用removeAttribute()方法時
		
	}

	public void attributeReplaced(HttpSessionBindingEvent arg0) {
		
	}

	public void contextDestroyed(ServletContextEvent arg0) {
		
	}

	public void contextInitialized(ServletContextEvent arg0) {
		
	}

}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章