博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat启动时自动加载Servlet
阅读量:5323 次
发布时间:2019-06-14

本文共 2762 字,大约阅读时间需要 9 分钟。

1、想做一个服务启动时自动启动一不停止的获取订阅功能

2、之前是做一个Jsp页面请求servlet来触发方法

3、现在实现Tomcat启动时自动加载Servlet

1、Tomcat中启动Servlet时,只需要在Servlet所在的工程的配置文件web.xml中写成如下即可

TimeServlet
servlet.TimeServlet
1
TimeServlet
/servlet/TimeServlet

所以最主要的是加一句:<load-on-startup>1</load-on-startup>

 2、在Servlet中写一个初始化方法,servlet名字要根据配置的一致。TimeServlet

package servlet;import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import javax.servlet.http.HttpServlet;import log.LogTimerTask;import topic.TmallTopic;/** * 服务器启动时自动启动线程 * @author chenv 2016-9-13 * */public class TimeServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    public TimeServlet() {         super();     }     public void init(){        //线程一,启动天猫订阅        Thread t1=new Thread(){            public void run(){                TmallTopic topic = new TmallTopic();                topic.openTopic();                //System.out.println("异步启动天猫订阅");           }        };        t1.start();                //线程二,启动日志记录        Thread t2 = new Thread(){            public void run(){                TimerTask task = new LogTimerTask();                Calendar calendar= Calendar.getInstance();                            Date firstTime = calendar.getTime();                //间隔:1小时                long period = 1000*60*60;                    Timer timer = new Timer();                        timer.schedule(task, firstTime, period);            }        };        t2.start();    } }

Tomcat启动时自动加载Servlet就可以了。

 

扩展:

servlet定时输出

package servlet;import java.io.IOException;import java.util.Timer;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;public class TimeServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    public TimeServlet() {         super();     }     public void init() throws ServletException {        Timer timer = new Timer();         timer.schedule(new MyTask(), 1000, 2000);// 在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.          // 这个是用来停止此任务的,否则就一直循环执行此任务了         while (true){             try {                 int ch = System.in.read(); //输入字符“c”,回车即停止执行                 if (ch - 'c' == 0){                     timer.cancel();// 使用这个方法退出任务                 }             } catch (IOException e) {                 e.printStackTrace();             }         }     }      //具体执行的任务     class MyTask extends java.util.TimerTask{         public void run() {            System.out.println("____ok____");         }     }          public void destroy() {         super.destroy();      }  }

 

转载于:https://www.cnblogs.com/chenv/p/5869422.html

你可能感兴趣的文章
MySQL基础3
查看>>
RxJS & Angular
查看>>
面向对象(多异常的声明与处理)
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>