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

Posted 第九种格调的人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听器的小示例:利用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的主要内容,如果未能解决你的问题,请参考以下文章

unity,ugui如何实现button长按,就是如何监听按下和抬起,求一个完整的小例子谢谢。

iOS - 月总结开发中遇到的小知识点(2020.04)

监听网络改变, 实时获取网络连通性,ping/发请求

laravel 利用监听器进行sql语句记录

小部件 ImageButton 侦听器并不总是被调用

Flutter 原生插件:事件监听器示例