package org.leeyohn.listener; import java.util.HashMap; import javax.servlet.ServletContextListener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import org.leeyohn.DbDao; import org.leeyohn.dao.DataSourcePool; import org.leeyohn.OnLineUser; public class BBSListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { try { ServletContext application = sce.getServletContext(); String driver = application.getInitParameter("driver"); String url = application.getInitParameter("url"); String user = application.getInitParameter("user"); String pass = application.getInitParameter("pass"); DataSourcePool dsp = DataSourcePool.instance(driver, url, user, pass); java.util.HashMap<String, OnLineUser> userMap = new java.util.HashMap<String, OnLineUser>(); java.util.HashMap<String, OnLineUser> visitorMap = new java.util.HashMap<String, OnLineUser>(); application.setAttribute("usermap", userMap); application.setAttribute("visitormap", visitorMap); application.setAttribute("dsp", dsp); System.out.println("fddddddddd"); } catch (Exception e) { System.out.println("fdfdfdfd"); e.printStackTrace(); } listenUserState(sce); } @Override public void contextDestroyed(ServletContextEvent sce) { ServletContext application = sce.getServletContext(); DataSourcePool dsp = (DataSourcePool)application.getAttribute("dsp"); //释放数据资源 dsp.closeRs(); } //监听用户离线方法,5分钟后自动离线 private void listenUserState(ServletContextEvent sce) { final ServletContext application = sce.getServletContext(); final int dur = Integer.parseInt(application.getInitParameter("dur")); final HashMap<String, OnLineUser> userMap = (HashMap<String, OnLineUser>)application.getAttribute("usermap"); final HashMap<String, OnLineUser> visitorMap = (HashMap<String, OnLineUser>)application.getAttribute("visitormap"); //5秒执行一次 new javax.swing.Timer(1000 * 5, new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { if (userMap != null) { for (String key : userMap.keySet()) { OnLineUser onLineUser = (OnLineUser)userMap.get(key); if (System.currentTimeMillis() - onLineUser.getTime() > dur * 60 * 1000) { userMap.remove(key); application.setAttribute("userCount", userMap.size()); System.out.println("在线注册用户人数=" + userMap.size()); } } } if (visitorMap != null) { for (String key : visitorMap.keySet()) { OnLineUser onLineUser = (OnLineUser)visitorMap.get(key); if (System.currentTimeMillis() - onLineUser.getTime() > dur * 60 * 1000) { visitorMap.remove(key); application.setAttribute("visitorCount", visitorMap.size()); System.out.println("游客人数=" + visitorMap.size()); } } } application.setAttribute("onLineUserCount", visitorMap.size() + userMap.size()); System.out.println("总在线人数=" + (visitorMap.size() + userMap.size()) + "在线注册用户=" + userMap.size() + "游客人数=" + visitorMap.size()); } }).start(); } }