JavaWeb開發中,有時會遇到統計或管理用戶登錄數或者當前在線多少用戶,分別都是誰的情況。當然,實現途徑多種多樣。下面列舉一下通過session實現的一種統計。
public class MySessionListener implements HttpSessionListener { /** * 創建session */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void sessionCreated(HttpSessionEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); // 在application范圍由一個HashSet集保存所有的session HashSet sessions = (HashSet) application.getAttribute("sessions"); if (sessions == null) { sessions = new HashSet(); application.setAttribute("sessions", sessions); } // 新創建的session均添加到HashSet集中 sessions.add(session); // 可以在別處從application范圍中取出sessions集合 // 然后使用sessions.size()獲取當前活動的session數,即為“在線人數” } /** * 銷毀session */ @SuppressWarnings("rawtypes") public void sessionDestroyed(HttpSessionEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); HashSet sessions = (HashSet) application.getAttribute("sessions"); // 銷毀的session均從HashSet集中移除 sessions.remove(session); } /** * 獲取系統在線用戶數及登錄用戶數 * @param request 當前請求對象 * @param flag=1當前在線用戶數 flag=2當前登錄用戶數 * @return */ @SuppressWarnings("rawtypes") public static int getMaxUser(HttpServletRequest request,int flag){ HttpSession session = request.getSession(); ServletContext application = session.getServletContext(); HashSet sessions=(HashSet)application.getAttribute("sessions"); int countUser = sessions.size(); // System.out.println("###################當前在線人數:"+sessions.size()); // String onlineuser = ""; int countOnlineUser = 0; for(Iterator it = (Iterator) sessions.iterator(); it.hasNext();){ HttpSession se = (HttpSession) it.next(); if(se!=null){ UserInfo ui = (UserInfo) se.getAttribute("USER_INFO"); if(ui!=null){ // onlineuser += "___"+ui.getName(); countOnlineUser++; } } } // System.out.println("###################當前登錄用戶:"+onlineuser); return flag==1?countUser:countOnlineUser; }