Session监听器处理代码学习

 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.jms.Session;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.transaction.Synchronization;


/*
 * 需求是每隔多少秒去扫描session,自定义一个session让她能够真正的自动移除过期session
 */

public class SessionScanner implements ServletContextListener,
		HttpSessionListener {
	//定义一个集合来装下session,为了解决线程安全问题,采用Collections.synchronizedList
	private List<HttpSession> list=Collections.synchronizedList(new LinkedList<HttpSession>());
	private Object locket=new Object();
	@Override
	public void sessionCreated(HttpSessionEvent httpSessionEvent) {
		System.out.println("session创建了");
		//创建的时候就得到session
		HttpSession session=httpSessionEvent.getSession();
		synchronized (locket) {
			list.add(session);
			}
	}
	@Override
	public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {

		System.out.println("Session摧毁了!");
	}
	@Override
	public void contextDestroyed(ServletContextEvent servletContextEvent) {

	}

	@Override
	public void contextInitialized(ServletContextEvent ServletContextEvent) {
//		private List list;
		//启动就是执行
		//扫描session
		//创建计时器
		//task是表示要干什么操作
		Timer timer=new Timer();
		timer.schedule(new MyTask(list,locket), 0 ,60*1000);
		//这里面在解决线程安全的时候,采用锁的概念
		
		
	}
	
}
class MyTask extends TimerTask{

	private List list;
	private Object locket;
	public MyTask(List list,Object locket){//实例化一个,冲上面带list值来
		this.list=list;
		this.locket=locket;
	}
	
	@Override
	public void run() {
		//这里面要做的是扫描程序
		//采用迭代的方法对list程序进行扫描
		synchronized (locket) {
		Iterator it=list.iterator();
		while (it.hasNext()) {
			HttpSession session=(HttpSession) it.next();
			//假如当前时间值,减去session值小于60时,调用移除session
		     if (System.currentTimeMillis()-session.getLastAccessedTime()>=60*1000){
		    	 session.invalidate();
		    	 it.remove();
			}
		}
		}
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很遗憾,因为篇幅限制和涉及知识面广泛,无法在此回答全部代码。但是,我可以为您提供以下参考和指导: 1. Servlet/GenericServlet/HttpServlet/ServletRequest/ServletResponse接口机制详解 这里需要详细讲解Servlet API中各个接口的作用和用法,包括Servlet、GenericServlet、HttpServlet、ServletRequest和ServletResponse等。需要掌握Servlet生命周期、Servlet容器、Servlet配置等相关内容。 2. Servlet注解增强、Servlet3.0异步新特性、Servlet文件上传下载机制Part接口机制详解web服务器容器动态注册Servlet 这里需要详细讲解Servlet 3.0中新增的注解、异步处理、文件上传下载机制、Part接口等内容,同时还需要理解Web服务器容器动态注册Servlet的原理和实现。 3. Filter过滤器HttpFilter增强实现全站编码统一 这里需要详细讲解Filter的作用以及HttpFilter的增强功能,同时还需要掌握如何通过Filter实现全站编码统一。 4. web组件9大监听器使用及原理、Session纯化活化机制、及企业生产环境使用场景 这里需要详细讲解Web组件中9大监听器的作用原理、Session纯化活化机制的实现和使用场景,同时还需要掌握在企业生产环境中如何使用这些组件。 5. 完成用户登录功能模块的开发 这里需要实现一个用户登录功能模块,包括前端登录界面、LoginServlet程序和LoginFilter程序。需要掌握如何通过Servlet和Filter实现用户登录功能,同时还需要掌握前端页面的实现和数据传输的方法。 总之,对于Web开发中的这些基础概念和技术,需要掌握其作用原理、用法和实现方法,才能够熟练地进行开发和调试。建议多查阅相关文档和教程,不断学习和实践,才能够提高自己的技能水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值