Java中用Servlet Listener实现定时监听 (Timer、TimerTask)

标签: java servlet listener | 发表时间:2012-05-11 16:42 | 作者:杨粼波
出处:http://www.cppblog.com/tx7do/
转载自: http://www.zjsyc.com/blog/article/J2EE/318.html

分两步走:

    (1)实现 javax.servlet.ServletContextListener 接口的两个方法:contextInitialized()和contextDestroyed()

    contextInitialized():当Servlet容器启动时会执行contextDestroyed():当Servlet容器停止时会执行

    (2)在contextInitialized()中加入需要监听的程序,并由 java.util.Timer 的 schedule() 方法来控制监听程序执行的频率

    DEMO(这是我的一个短信回复监听的程序原型,精简了一下)

----------------------------------------------------------------

ReplyListener.java

----------------------------------------------------------------

package com.hanweb.jcms;

import javax.servlet.*;

public class ReplyListener implements ServletContextListener  {
private ReplyTimer rt = null;
public void contextInitialized(ServletContextEvent event)  {
String status = "[SYS] SMS reply listener start .";
event.getServletContext().log(status);
System.out.println(status);

rt = new ReplyTimer(1);
rt.start();
}

public void contextDestroyed(ServletContextEvent event)  {
String status = "[SYS] SMS reply listener stop .";
event.getServletContext().log(status);
System.out.println(status);

if (rt != null)  {
rt.stop();
}
}
}


----------------------------------------------------------------
ReplyTimer.java
----------------------------------------------------------------
package com.hanweb.jcms;

import java.util.*;

public class ReplyTimer {
private final Timer timer = new Timer();
private final int min;

public ReplyTimer(int minutes) {
min = minutes;
}

public void start() {
Date date = new Date();
timer.schedule(new ReplyTask(), date, min * 60 * 1000);
}

public void stop() {
timer.cancel();
}
}


----------------------------------------------------------------
ReplyTask.java
----------------------------------------------------------------
package com.hanweb.jcms;

import java.util.*;

public class ReplyTask extends TimerTask {
public void doSomething() {
System.out.println("[SYS] SMS reply listener running ");
}

public void run() {
doSomething();
}
}


 将编译好的class文件放入WEB-INF/classes中,最后别忘记了在Servlet容器中当前WEB应用的web.xml中加入监听语句:
<listener>
<listener-class>com.hanweb.jcms.ReplyListener</listener-class>
</listener>


杨粼波 2012-05-11 16:42 发表评论

相关 [java servlet listener] 推荐:

Servlet、Filter和Listener

- - Web前端 - ITeye博客
Java Servlet是与平台无关的服务器端组件,运行于Servlet容器中(如Tomcat),Servlet容器负责Servlet和客户端的通信以及调用Servlet的方法,Servlet和客户端的通信采用“请求/响应”的模式. Servlet可完成以下功能:. 1、创建并返回基于客户请求的动态HTML页面.

Java中用Servlet Listener实现定时监听 (Timer、TimerTask)

- - C++博客-牵着老婆满街逛
    (1)实现 javax.servlet.ServletContextListener 接口的两个方法:contextInitialized()和contextDestroyed().     contextInitialized():当Servlet容器启动时会执行contextDestroyed():当Servlet容器停止时会执行.

web.xml 中的listener、 filter、servlet 加载顺序及其详解

- - 企业架构 - ITeye博客
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰.         首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关. 即不会因为 filter 写在 listener 的前面而会先加载 filter.

Java Servlet工作原理问答

- - ImportNew
本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化、共享变量和多线程处理. 问题:Servlet是如何工作的. Servlet 如何实例化、共享变量、并进行多线程处理. 假设我有一个运行了大量 Servlet 的 web 服务器. 通过 Servlet 之间传输信息得到 Servlet 上下文,并设置 session 变量.

oracle listener troubleshooting 小结

- - CSDN博客数据库推荐文章
1.tnsping的作用及适用场景:. 检查tnsnames.ora文件中的连接串是否配置,或者配置是否符合语法. 根据执行tnsping命令所消耗的时间来诊断数据库的性能问题. 检查服务器端的监听是否启动. tnsping主要检查的是远程监听是否启动在相应的IP地址和端口上,并不检查监听中的实例服务和句柄(handle).

Servlet Filter 学习

- - CSDN博客架构设计推荐文章
最近在研究CAS , CAS 中的Servlet Filter 不太熟悉, 所以花了点时间学下了下这部分的知识, 分成以下几部分 学习. Servlet Filter  的功能和用法. Servlet Filter 顺序的注意事项. A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.

Servlet – 会话跟踪

- - ImportNew
HTTP本身是 “无状态”协议,它不保存连接交互信息,一次响应完成之后即连接断开,下一次请求需要重新建立连接,服务器不记录上次连接的内容.因此如果判断两次连接是否是同一用户, 就需要使用 会话跟踪技术来解决.常见的会话跟踪技术有如下几种:. URL重写: 在URL结尾附加. 会话ID标识,服务器通过会话ID识别不同用户..

servlet的四种响应

- - CSDN博客推荐文章
        在一个servlet的请求中,响应的方式的通常有四式,response.getWriter(),response.getOutputStream(),. request.getRequestDispatcher("ajax.jsp").forward(request, response) 和 response.sendRedirect("ajax.jsp").

Servlet是否线程安全

- - 研发管理 - ITeye博客
Servlet是线程安全吗. 要解决这个问题,首先要知道什么是线程安全:.   如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码. 如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题.

Servlet 3.0的檔案上傳寫法

- - 簡睿隨筆
Servlet 3.0已經大幅簡化網頁檔案上傳的程式寫法,以下是撰寫的幾個重點.
的enctype要是"multipart/form-data". 是主要使用的檔案瀏覽元素. 後端接收的Servlet寫在action屬性裡. 以@MultipartConfig(location = “c:/www/xxx/data/")指定寫檔路徑.