监听器的小示例:利用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的主要内容,如果未能解决你的问题,请参考以下文章