1.創建MyServletContextListener實現HttpServletContextListener接口
@Override public void contextDestroyed(ServletContextEvent sce) { } @Override public void contextInitialized(ServletContextEvent sce) { //創建一個list集合來存放所有的httpSession,必須要為這個集合加鎖(多線程訪問) final List<HttpSession> list=Collections.synchronizedList(new ArrayList<HttpSession>()); //servletContext添加這個集合 sce.getServletContext().setAttribute("list", list); Timer timer=new Timer();//時間調度的類 timer.schedule(new TimerTask() { //調度的任務 @Override public void run() { System.out.println("開始掃描了。。。"); for (Iterator iterator = list.iterator(); iterator.hasNext();) { HttpSession httpSession = (HttpSession) iterator.next(); //計算session已存在的時間(當前的系統時間-httpSession最后一次訪問的時間) long l=System.currentTimeMillis()-httpSession.getLastAccessedTime(); //存活時間大於10秒 則移除session if (l>10000) { //失效,從集合中刪除httpSesion System.out.println("session失效了:"+httpSession.getId()); httpSession.invalidate(); iterator.remove(); } } } //delay: 幾秒后開始執行(秒) //period: 執行的間隔時間(秒) }, 2000, 5000); }
2.創建MyHttpSessionListener實現HttpSessionListener接口
@Override public void sessionCreated(HttpSessionEvent arg0) { //服務器一創建httpSession,就向list集合中添加HttpSession HttpSession httpSession = arg0.getSession(); ServletContext application = httpSession.getServletContext(); List<HttpSession> list = (List<HttpSession>) application.getAttribute("list"); System.out.println("session創建添加了"+httpSession.getId()); list.add(httpSession); }
注意:實現listener接口 ,一定要配置web.xml文件