假设任务类我已经写好了,如何写servlet调用??
任务类代码如下:
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);
}
}
任务类代码如下:
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);
}
}
楼主【renwangxing】截止到2008-07-04 12:53:38的历史汇总数据(不包括此帖):
发帖的总数量:54 发帖的总分数:2780
结贴的总数量:34 结贴的总分数:2380
无满意结贴数:0 无满意结贴分:0
未结的帖子数:20 未结的总分数:400
结贴的百分比:62.96 % 结分的百分比:85.61 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
1. 用 HttpSessionListener 监听 Session 创建和销毁,创建时将 Session 放入一列表,销毁时将 Session 从列表中移除(此步骤必须作,否则 Session 占用的资源回收不了)。
2. 在你的 TimerTask 里到设定时间就访问上面的列表,将里面的 Session 逐个 invalidate(); 然后移除之。
3. 注意线程同步。
public void sessionCreated(HttpSessionEvent event) { HttpSession session = event.getSession(); hashtable.put(session.getId(), session );
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
hashtable.remove(session.getId());
} public static Iterator getAllSession( ){ return hashtable.values().iterator(); }然后在SessionHandleTime 类中的run方法这样写:
public void run() {
Iterator it=mySessionListener.getAllSession();
while(it.hasNext()){
HttpSession session=(HttpSession)it.next();
session.invalidate();
}
}
没错儿,不过要仔细地实际测试一下,你 Hashtable 用的挺好,改成泛型用法能更方便些:
private static Hashtable<String, HttpSession> hashtable = new Hashtable<String, HttpSession>();
另外得注意 Hashtable 访问的线程同步。
spring的任务调度使用也很方便网上到处都是资料
http://www.java2000.net/viewthread.jsp?tid=1643
人物类:
public class SessionAutoDestoryTask extends TimerTask {
public void run() {
Iterator it=mySessionListener.getAllSession();
while(it.hasNext()){
HttpSession session=(HttpSession)it.next();
session.invalidate();
System.out.println("注销用户会话--"+session.getId());
}
} public void startTimer() {
new Timer().schedule(SessionAutoDestoryTask.getInstance(),
今晚十二点钟,
24小时);
}
}监听器:
public class mySessionListener implements HttpSessionListener { private static Hashtable hashtable = new Hashtable();
public void sessionCreated(HttpSessionEvent event) { HttpSession session = event.getSession(); hashtable.put(session.getId(), session );
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
hashtable.remove(session.getId());
} public static Iterator getAllSession( ){ return hashtable.values().iterator(); }
SessionAutoDestoryTask sessionAutoDestoryTask=new SessionAutoDestoryTask();
sessionAutoDestoryTask.startTimer();
sce.getServletContext().log(new java.util.Date()+"SessionAutoDestoryTask start up!"); }
public void contextDestroyed(ServletContextEvent sce) {
sessionAutoDestoryTask=null;
sce.getServletContext().log(new java.util.Date()+"SessionAutoDestoryTask destroyed!");
}
你可能没有在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;public class MyTask extends TimerTask { public void run() {
// System.out.println("call at " + (new Date()));
// TODO 此处添加具体任务代码
}}
web.xml配置:
<listener>
<listener-class>com.fastunit.samples.listener.MyListener</listener-class>
</listener>