/**
* 此類實現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) {
}
}