之前一直对监听知识有个概念,最近业务需要用到了才真正有点了解了监听器的好处。

web项目的监听事件与监听器:

ServletAPI中的6个事件类:
ServletContextEvent:该类表示上下文(ServletContext)事件,当应用上下文对象发生变化,如创建或销毁上下文对象时,将触发上下文事件
ServletContextAttributeEvent:该类表示上下文(ServletContext)属性事件,当应用上下文属性改变,例如增加、删除、覆盖上下文中的属性时,将触发上下文属性事件
ServletRequestEvent:该类表示请求(ServletRequest)事件,当请求对象发生改变,例如创建或者销毁请求对象,将触发此事件
ServletRequestAttributeEvent:该类表示请求(ServletRequest)属性事件,当请求中的属性发生改变,触发该事件
HttpSessionEvent:该类表示会话(HttpSession)事件,当会话对象发生改变,例如创建或者销毁会话对象,活化或者钝化会话对象,将触发此事件
HttpSessionBindingEvent:该类表示会话(HttpSession)绑定事件,当会话中的属性发生变化,例如增加删除覆盖会话中 Servlet API针对每种事件类型,都定义了至少一种借口来处理该事件,这些接口都以Listener结尾,成为监听器接口,共有如下8种接口。
ServletConetxListener:上下文监听器,监听ServletContextEvent事件
ServletContextaAttributeListener:上下文属性监听器,用来监听ServletRequestAttributeEvent事件
ServletRequestListener:请求监听器,监听ServletRequestEvent事件。
ServletRequestAttributeListener:请求属性监听器,用来监听ServletRequestAttributeEvent事件
HttpSessionListener:会话监听器,监听HttpSessionEvent事件
HttpSessionActivationListener:会话活化监听器,监听HttpSessionEvent事件
HttpSessionAttributeListener:会话属性监听器,监听HttpSessionBindingEvent事件
HttpSessionBindingListener:会话绑定监听器,监听HttpSessionBindingEvent事件。

我这里是要求定时任务,我不知道如何让他实现程序开始自动启动。刚开始使用的是java程序。然后发现java程序不会定时,百度发现使用web程序,容器启动后让容器自动调用即可。

这个时候看到了别人写法使用了监听器,豁然开朗,于是也使用ServletContextListener实现了定时任务的功能:

public class AliRepayHistoryTask {

    public void task(){
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
fetchAliRepayHistory();
}
};
timer.schedule(timerTask, new Date(2017 - 1900, 7, 14, 14, 2), 60*60*24);
} public void fetchAliRepayHistory(){
JdbcUtil jdbcUtil = new JdbcUtil();
String sql = " select bill_seq_no , to_char(to_date(last_update_date, 'yyyyMMddHH24miss'), 'yyyy-MM-dd HH24:mi:ss') " +
" from acl.pay_order " +
" where " +
" status = 'S' " +
" and gate_id = '1003' " +
" and last_update_date >= ? " +
" and last_update_date <= ? " +
" order by last_update_date asc"; String yesterday = DateUtil.getDateString(DateUtil.addDay(new Date(), -1), "yyyyMMdd");
String yesterdayBegin = yesterday + "000000";
String yesterdayEnd = yesterday + "235959";
Object[] params = new Object[]{yesterdayBegin, yesterdayEnd};
List<Order> orders = jdbcUtil.query(sql, params, new ResultHandler<List<Order>>() {
public List<Order> handler(ResultSet rs) throws SQLException {
List<Order> list = new ArrayList<Order>();
while(rs.next()){
Order order = new Order();
order.setBillSeqNo((String)rs.getObject(1));
order.setCreateDate((String)rs.getObject(2));
list.add(order);
}
return list;
}
});
try {
FileOutputStream outputStream = new FileOutputStream(new File("C:/Users/zhen/Desktop/每日支付宝付款报表.txt"), true);
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter((outputStream)));
bufferedWriter.newLine();
bufferedWriter.write(yesterday.substring(0, 4) + "-" + yesterday.substring(4, 6) + "-" + yesterday.substring(6, 8) + ":");
bufferedWriter.newLine();
for(Order order : orders){
bufferedWriter.write("billSeqNo=" + order.getBillSeqNo() + ", createDate=" + order.getCreateDate());
bufferedWriter.newLine();
}
bufferedWriter.close();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } } public class AliRepayHistoryTaskListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent servletContextEvent) {
new AliRepayHistoryTask().task();
} public void contextDestroyed(ServletContextEvent servletContextEvent) { }
} <listener>
<listener-class>com.listener.AliRepayHistoryTaskListener</listener-class>
</listener>

参考链接:http://blog.csdn.net/l1028386804/article/details/52727297

监听器的使用例子 ServletContextListener的更多相关文章

  1. Servlet监听器——实现在线登录人数统计小例子

    一.概念 servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序. 二.监听器的类型 1.根据监听对象的类型和范围,分为3类 ...

  2. 监听器Listener

    监听器 6个事件类,均以event结尾 *某些操作,如启动/关闭容器,创建/销毁会话,都将触发一种事件发生,当发生了某种事件,容器将创建对应的事件类对象 8个监听接口,均以Listener结尾 监听器 ...

  3. 【JSP&Servlet学习笔记】5.Servlet进阶AIP、过滤器与监听器

    Servlet接口上,与生命周期及请求服务相关的三个方法是init().service()与destory()方法.当Web容器加载Servlet类并实例化之后,会生成ServletConfig对象并 ...

  4. javaWeb学习总结(11)- 监听器(Listener)学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其 实就是一个实现特定接口的普 ...

  5. 05).30分钟学会Servlet+过滤器+监听器+实际案例

    一.Servlet简介: Servlet程序处理流程 二.Servlet程序实现 实现要求 Servlet属于java ee范畴,而java和javac属于java se范畴,要想编译servlet必 ...

  6. 【转】监听器(Listener)学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监听的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通 ...

  7. Spring依赖注入servlet会话监听器

    Spring提供了一个 “ContextLoaderListener” 监听器,以使 Spring 依赖注入到会话监听器. 在本教程中,通过添加一个 Spring 依赖注入一个bean 到会话监听器修 ...

  8. 监听器(Listener)学习(一)

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通 ...

  9. JavaWeb学习笔记(二十一)—— 监听器Listener

    一.监听器概述 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对 ...

随机推荐

  1. 【Python】读取各种文档(txt、csv、excel、pdf)方法

    1.读取txt文件 注意事项: 1..txt文件同下方脚本所在的.py文件需要在同一个文件夹下 # coding=utf-8 txt读取 with open("1233.txt") ...

  2. spark2.1.1创建Pipeline

    Pipeline 为流程,是Spark创建机器学习的一个流程控制的类 下面直接贴出创建的代码,以及整个流程 第一种: import org.apache.spark.ml.{Pipeline, Pip ...

  3. 远程终端登录软件MobaXterm

    提到SSH.Telnet等远程终端登录,我相信很多人想到的都是PuTTY[注A]. PuTTY足够成熟.小巧.专注核心任务,并且对编码等常见坑的处理并不缺乏,这其实都是优点.但PuTTY在额外功能上就 ...

  4. Python Missing parentheses in call to 'print'

    原来是因为Python2.X和Python3.X不兼容. 我安装的是Python3.X,但是我试图运行的却是Python2.X 的代码. 所以上面的语法在python3中是错误的.在python3中, ...

  5. 在Qt中如何编写插件,加载插件和卸载插件(转)

    Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoader来加载和卸载这些库.由于在开发项目的过程中,要开发一套插件 ...

  6. Object-C开发之instancetype和id关键字

    一.什么是instancetypeinstancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以用 ...

  7. AVAudioFoundation(1):使用 AVAsset

    本文转自:AVAudioFoundation(1):使用 AVAsset | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 要了 ...

  8. Mindoc搭建流程

    1,安装MySql 2,官网下载:https://github.com/lifei6671/mindoc/releases mindoc_windows_amd64.7z 3,如果下载的压缩包中不存在 ...

  9. JavaScript 预编译(变量提升和函数提升的原理)

    本文部分内容转自https://www.cnblogs.com/CBDoctor/p/3745246.html 1.变量提升 console.log(global); // undefined var ...

  10. Sublime Text 3图标更改

    Sublime Text 3图标更改 步骤: 1.下载ico图标 2.然后更改图标 注意:重点讲解下,如何将png文件转换为ico图标: 网络上单独找sublime text 3的ico图标比较不好找 ...