jsp中如何實現逾期通知功能﹐

xjhego 2004-08-29 02:56:45
jsp如何做一個逾期通知,即在數據中記錄了某一信息的包括記錄的創建時間等﹐當一個月后這筆記錄沒有被處理時就自動發送一封mail提醒處理﹐謝謝﹗
...全文
150 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wenming168 2004-09-02
同意 yaray(雅睿,生活在别处,工作在别墅)
你也可以写一servlet , 在servlet中启动一个线程用表发email
回复
xiangbo520 2004-08-30
收藏!!!!!!!!!
回复
yaray 2004-08-30
上面这几个程序共同完成一个在Web工程中定时执行指定任务的功能。更具体的说明可以参看程序中的说明。
回复
yaray 2004-08-30
用ServletContextListener吧。
代码附上:
===========
package com.yaray.autotask;

public class ProjectServletContextListner implements javax.servlet.ServletContextListener{

private static java.util.Timer timer = null; // 定时器

// 此方法仅在起动Web容器(或服务器)时被调用一次
public void contextInitialized(javax.servlet.ServletContextEvent event) {
timer = new java.util.Timer(true);
javax.servlet.ServletContext ctx = event.getServletContext();
ctx.log("定时器已启动,任务开始执行");
/*
//如果是用web.xml文件配置参数,则用下面的方式读取参数设置值
long period = Long.valueOf((String)ctx.getInitParameter("period")).longValue();
*/

timer.schedule(new NewTask(), // 所需要执行的任务
0, // 延迟时间 ( 0 --- 表示起动Web容器(或服务器)就立即执行此任务 )
5*1000 // 任务的执行间隔时间[单位:毫秒] (此处的间隔时间是5秒)
);

}// End method: contextInitialized(javax.servlet.ServletContextEvent event)

// 此方法仅在关闭Web容器(或服务器)时被调用一次
public void contextDestroyed(javax.servlet.ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器已销毁,任务执行结束");
}// End method: contextDestroyed(javax.servlet.ServletContextEvent event)

}///:~

/*

在工程的WEB-INF\web.xml配置文件中加入如下三行,所计划的任务就会在Web容器(或服务器)启动时自动开始执行了:
<listener>
<listener-class>com.yaray.autotask.ProjectServletContextListner</listener-class>
</listener>

*/

/**
* 在无特殊要求的情况下这个类无需修改;
* 只需要与ProjectServletContextListner类保存在同一个.java文件中即可(或同一个文件夹中,需定义与其相同的包名)
*/
class NewTask extends java.util.TimerTask{

private static boolean isRunning = false; // 运行标志(表示是否正在运行计划的任务)
private static int t = 3; //
private CustomTask ct = TaskFactory.getTask();

public NewTask(){
}

public void run(){
if(!isRunning){ // 当未执行此任务时则开始执行
if(ct != null){
isRunning = true; // 将任务执行标志设置为正在执行
ct.execute(); // 执行任务
isRunning = false; // 将任务执行标志设置为执行完毕
}else{
if(t == 0) return;
t--;
System.out.println();
System.out.println(" [Error] [com.yaray.autotask.NewTask] [Method: run] The task is null.");
System.out.println(" [Error] [com.yaray.autotask.NewTask] [Method: run] The task is null.");
System.out.println(" [Error] [com.yaray.autotask.NewTask] [Method: run] The task is null.");
}
}else{
System.out.println("The task is running.");
}
}// End method: run()

}///:~

///////////////////////////////////////////////////////////////////////////////////////////////////////
/* 单独保存为CustomTask.java文件 */
package com.yaray.autotask;

public interface CustomTask{

/**
* 用于实现自定义的任务
*/
public void execute();

}///:~
///////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////
/* 单独保存为TaskFactory.java文件 */
package com.yaray.autotask;

public class TaskFactory {

/**
* 功能:返回实现了CustomTask接口的类的实例对象
*
*
* 例: 如果实现了CustomTask接口的类名是MyTask,
* return new MyTask();
* 如上这样就可以了.
*/
public static CustomTask getTask(){
return null; // 此处仅返回null,用户应根据实际情况作出修改
}

}///:~
///////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////
package com.yaray.autotask;
public MyTask implements com.yaray.task.CustomTask{

/* 任务执行主体(此处为实验代码,仅用来执行简单的信息输出语句) */
public void execute(){
System.out.println("在此方法中实现任务的主体");
}

}///:~
///////////////////////////////////////////////////////////////////////////////////////////////////////
回复
LiGun 2004-08-30
tyrone98(林林) 同意
回复
zhushizu 2004-08-30
呵呵,上面帖子介绍的多线程这里用不上吧!

在数据库里加一个触发器来触发这个事件,不过数据库能不能发邮件,那就要看楼主自已找答案了!
回复
xiangbo520 2004-08-30
http://community.csdn.net/Expert/topic/2974/2974781.xml?temp=.4880945
你可以参考一下这个帖子
回复
majar 2004-08-30
up
回复
jiankou2001 2004-08-29
代码???
回复
jiankou2001 2004-08-29
up
回复
tyrone98 2004-08-29
写一个JAVA的服务程序,每过一定的时间读表记录,发送email就可以了.
回复
xjhego 2004-08-29
我想過在數據庫做﹐可在數據庫做如何能發送mail啊,
如果在頁面做的話﹐只能在打開面時才能執行﹐在頁面沒有打時就不能觸發了
還有什么更好的方法呢
回复
makejack 2004-08-29
我也碰到该问题,我的问题是当数据正式插入表中后,满六个月后将触发其它的表格申请要求前面处理,我想是不是可以用数据库的触发器来处理,虽然还没有直接找到,但我相信应该能做,另外实在不行,我想这样做:即在页面中做,在打开页面时,自动执行一个bean,该bean来处理这个问题,做完后,置当天执行标志,即每天只执行一次。
回复
passren 2004-08-29
应该让数据库作这个动作,可以建立一个job定期run
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-08-29 02:56
社区公告
暂无公告