假设任务类我已经写好了,如何写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;