如何实现需求:写一个sevlet,该功能是对web应用的session对象每天凌晨零点自动清空
假设任务类我已经写好了,如何写servlet调用??
任务类代码如下:
Java code
public class SessionHandleTime extends TimerTask {
private HttpSession session=null;
//间隔为24小时
private long periord=24*60*60*1000;
//任务开始执行的第一时间
private Date startDateTime = "假设这个值是此类运行的当天晚上12点钟";
private static SessionHandleTime instance = null;
public static SessionHandleTime getInstance() {
if (instance == null)
instance = new SessionHandleTime();
return instance;
}
public void setSession(HttpSession session) {
this.session = session;
}
public void run() {
session.invalidate();
}
public void startTimer() {
new Timer().schedule(SessionHandleTime.getInstance(),startDateTime,this.periord);
}
}
------解决方案--------------------给你个思路:
1. 用 HttpSessionListener 监听 Session 创建和销毁,创建时将 Session 放入一列表,销毁时将 Session 从列表中移除(此步骤必须作,否则 Session 占用的资源回收不了)。
2. 在你的 TimerTask 里到设定时间就访问上面的列表,将里面的 Session 逐个 invalidate(); 然后移除之。
3. 注意线程同步。
------解决方案--------------------
------解决方案-------------------- private long periord=24*60*60*1000这样写如果服务器启动不在0点那么那清除的时间也就不一样了,如果要最简单的实现我认为直接使用spring的任务调度,设定0点执行销毁操作比较好,再者可以用普通的thread检查是否到12点如果到12点清除session这样要和servlet写在一起
spring的任务调度使用也很方便网上到处都是资料
------解决方案--------------------
每天凌晨零点自动清空
这个应该用 quartz 之类的调用,参考这个
http://www.java2000.net/viewthread.jsp?tid=1643
------解决方案--------------------3楼的是正解,继承HttpSessionListener ,然后注意在web.xml中配置就可以了。这个问题不麻烦。
------解决方案--------------------
------解决方案--------------------Hashtable 是同步的即线程安全的,将错误信息贴出来。
------解决方案--------------------给你一个简单的例子,供参考
你可能没有在web.xml里配置
MyListener:
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
private Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
//设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), 0, 86400000);
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
}
MyTask:
import java.util.TimerTask;