首页 > 代码库 > 监听器的小示例:利用HttpSessionListener和HttpServletContextListener实现定时销毁HttpSession

监听器的小示例:利用HttpSessionListener和HttpServletContextListener实现定时销毁HttpSession

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文件

 

监听器的小示例:利用HttpSessionListener和HttpServletContextListener实现定时销毁HttpSession