JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JSP技术--开发工具  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
如何在Web应用中启动后台任务
作者:     文章来源:
访问次数:16次     加入时间:2007年04月19日
摘要
  我们常常在Web应用中需要启动一个自己写的服务,本文的目的是给你提供一个解决方案。
原理
  本方案的原理是写一个实现了ServletContextListener接口的类,该类中有两个方法:public void contextInitialized(ServletContextEvent sce),它是在应用启动时调用;另一个方法是:public void contextDestroyed(ServletContextEvent sce),该方法是在应用结束时调用。把我们要启动的后台应用逻辑放在contextInitialized方法中实现;把释放后台应用占用资源的工作放在contextDestroyed来处理。但我们启动的后台任务常常是有要求的,比如时间,频率等,我在这里使用了一个开源组件:quartz。
步骤
1.写业务调用类:
// DumbJob.java
import org.quartz.*;
import java.util.*;
  public class DumbJob implements Job {
    public DumbJob() {
    }
    public void execute(JobExecutionContext context)
      throws JobExecutionException
    {
     //在这里写业务处理代码。什么,你不知道?那你别问我!!:-<
    }
  }
本类的主要功能是由quartz中调度类按照指定的规则进行调用执行必要的业务逻辑。
2.写调度类
// TestShedule.java
import org.quartz.*;
import java.util.*;

public class TestShedule{
    static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
    static Scheduler sched;
    
    public static void run()throws Exception{        
        sched = schedFact.getScheduler();    //获取调度管理器
          JobDetail jobDetail = new JobDetail("myJob",
                                      sched.DEFAULT_GROUP,
                                      DumbJob.class);//创建工作
        CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//创建触发器
        sched.scheduleJob(jobDetail, trigger);    //添加到调度管理器中
        sched.start();//启动调度管理器
    }
    
    public static void     stop()throws Exception{
        sched.shutdown();
    }
}
本类的目的是设置调用规则,在这里我用了“0/10 * * * * ?”表示每10秒钟就执行一次,有关表达式的说明请参阅quartz的api文档。
3.编写服务启动类:
//ServiceLoader.java
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServiceLoader implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        try{
            TestShedule.run();
        }catch(Exception ex){
            System.out.println(ex.getMessage());
        }
    }
    
    public void contextDestroyed(ServletContextEvent sce) {
        try{
            TestShedule.stop();
        }catch(Exception ex){
            System.out.println(ex.getMessage());
        }
    }
}
在contextInitialized中调用TestShedule.run()启动后台任务;在contextDestroyed中调用TestShedule.stop()停止后台任务。
4.部署服务启动类
在web.xml文件中增加如下一行配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp">
    <display-name>root</display-name>
<!--下边的listener部分就是配置信息-->
    <listener>
        <listener-class>ServiceLoader </listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>
5.启动web服务即可。

总结
  其实实现这个功能的方法很多,我在这里是应用了ServletContextListener接口和开源api quartz,希望能对你的开发有所帮助。 
资源
quartz:  http://www.opensymphony.com/quartz
ServletContextListener在javax.servlet包中

作者
  郭建东    Email:gagaghost@gmail.com    msn:gagaghost@hotmail.com

JSP虚拟主机 | JSP空间 | JSP主机 | JSP双线虚拟主机 | JAVA空间 | JAVA虚拟主机 | 虚拟服务器 | JSP 虚拟服务器 | VPS
Virtual Private Server | JAVA虚拟服务器 | VM服务器 | VHOST | 虚拟操作系统 | JSP论坛 | JAVA论坛 | JSP站点论坛
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号