怎样写一个定时自动运行的servlet?
我需要定时地往数据库里面插入记录。请问这个servlet应该怎样写呢? 问题点数:100、回复次数:17Top
1 楼sunshine5246(阳光)回复于 2005-05-01 20:30:11 得分 0
sofa
顶Top
2 楼edward0716(雲威龍)回复于 2005-05-01 20:31:48 得分 0
TimerTop
3 楼sun8087(.Net@ChangZhou)回复于 2005-05-01 21:06:52 得分 0
servlet 能实现??
在数据库中吧?
关注Top
4 楼TsungLee(Lee)回复于 2005-05-02 14:17:42 得分 0
upTop
5 楼liuquanyi(大狗)回复于 2005-05-02 15:09:15 得分 40
<servlet>
<servlet-name>hehe</servlet-name>
<servlet-class>heheServlet</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/hehe.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
如果你的servlet名字叫heheServlet,那么:
servletConfig.getInitParameterNames()取得所有参数
取得WEB-INF/hehe.properties
注意用isAbsolute()来判断是否是绝对路径,否则用:
String appDir = servletConfig.getServletContext().getRealPath("/");
appDir + File.separator+servletConfig.getInitParameter("propertyFile");
至于楼主的问题就是:
<load-on-startup>1</load-on-startup>
load-on-startup表示加载的优先级,必须为整数,1为最早,依次累推!Top
6 楼liuquanyi(大狗)回复于 2005-05-02 15:10:59 得分 0
哦。
我理解错误了,抱歉!
可以用Timer类来定时执行一个插入类!Top
7 楼rui0263(锐)回复于 2005-05-02 16:15:55 得分 0
作一个线程,来监视。应该可以把。Top
8 楼TsungLee(Lee)回复于 2005-05-03 10:42:02 得分 0
能具体说一下Timer在Servlet里面的用法吗?谢谢Top
9 楼TsungLee(Lee)回复于 2005-05-04 09:05:08 得分 0
upTop
10 楼TsungLee(Lee)回复于 2005-06-21 17:28:56 得分 0
有谁能具体说一下Timer的用法吗?Top
11 楼108041217(josso)回复于 2005-06-21 17:54:41 得分 0
<load-on-startup>1</load-on-startup>
load-on-startup表示加载的优先级,必须为整数,1为最早,依次累推!
????
我看有問題吧
我看資料說<load-on-startup/>是立即加載,難道1为最早??Top
12 楼108041217(josso)回复于 2005-06-21 17:55:30 得分 0
to 回复人: liuquanyi(大狗) ( ) 信誉:100
<load-on-startup>1</load-on-startup>
load-on-startup表示加载的优先级,必须为整数,1为最早,依次累推!
????
我看有問題吧?
我看資料說<load-on-startup/>是立即加載,難道1为最早??
Top
13 楼blackdreamzg(基本靠手)回复于 2005-06-21 18:06:40 得分 0
帮你upTop
14 楼Jolestar(叶明)回复于 2005-06-21 18:41:17 得分 40
<load-on-startup>1</load-on-startup>
应该是让这个servlet在服务器启动时自动运行.
你干吗要servlet定时运行呢?
用Timer类,让一个操作数据库的javabean定时运行也可以实现这个功能啊.
Timer类的具体用法
http://www.hackhome.com/2005/1-21/09492254499.shtmlTop
15 楼jianan(楠)回复于 2005-06-21 18:46:17 得分 0
我以前写过一个线程他监视文件有没有变化,有的话就把他里面的内容存到数据库中.Top
16 楼shuiruhan1981905(水若寒)回复于 2005-06-21 19:03:40 得分 20
首先有一个控制类(servlet):
package com.sysnet.app;
import javax.servlet.*;
public class Settle_HourServlet
extends javax.servlet.http.HttpServlet {
/**
* Tomcat 启动时,自动执行,并启用相关线程监听是否为用户选定时间
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws
javax.servlet.ServletException, java.io.IOException {
}
/**
* Process incoming HTTP POST requests
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void doPost(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws
javax.servlet.ServletException, java.io.IOException {
}
public String getServletInfo() {
return super.getServletInfo();
}
/**
* Initializes the servlet.
*/
public void init() {
ServletContext application = getServletContext();
//GrAlarmTask pt1 = new GrAlarmTask(20,00, 0);
GrAlarmTask pt1 = new GrAlarmTask(14,55, 0);
pt1.setTrcode("100010");//B2B接收成员行
pt1.start();
application.setAttribute("Settlept1",pt1);
}
/**
* 此处插入方法描述。
* 创建日期:(2002-11-14 15:18:47)
*/
}
然后调用逻辑处理类:
Top
17 楼shuiruhan1981905(水若寒)回复于 2005-06-21 19:05:57 得分 0
package com.sysnet.app;
import java.sql.SQLException;
import org.tiling.scheduling.Scheduler;
import org.tiling.scheduling.SchedulerTask;
import org.tiling.scheduling.examples.iterators.DailyIterator;
import system.pub.Gr_Exception.Gr_Exception;
public class GrAlarmTask {
private final Scheduler scheduler = new Scheduler();
private final int hourOfDay, minute, second;
private String tr_code = "";
public GrAlarmTask(int hourOfDay, int minute, int second) {
//System.out.println("init........................................");
this.hourOfDay = hourOfDay;
this.minute = minute;
this.second = second;
}
public void start() {
scheduler.schedule(new SchedulerTask() {
public void run() {
runAssignment();
}
private void runAssignment() {
//System.out.println("trcode=="+tr_code);
TimerTrade timerTrade = new TimerTrade();//这个是你操作数据库的类
if(tr_code.equals("100012")){//B2B从总行接收
//System.out.println("1000012.........");
try {
timerTrade.recT();
} catch (Gr_Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//下面的你自已写
}
}, new DailyIterator(hourOfDay, minute, second));
}
public void end(){
System.out.println(".end...");
try{scheduler.cancel();}catch(Exception e){
System.out.println("end1....");
}
}
public void setTrcode(String tr_code){
//System.out.println("setTrcode..."+tr_code);
this.tr_code = tr_code;
}
}
只要到了servlet里面设定的时间就会自动执行数据库操作,把servlet加到web.xml:
<servlet>
<servlet-name>Settle_HourServlet</servlet-name>
<servlet-class>com.sysnet.app.Settle_HourServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
他的生命周期和tomcat一样,ok!
Top





