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

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

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

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

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

  1. public class AliRepayHistoryTask {
  2.  
  3. public void task(){
  4. Timer timer = new Timer();
  5. TimerTask timerTask = new TimerTask() {
  6. @Override
  7. public void run() {
  8. fetchAliRepayHistory();
  9. }
  10. };
  11. timer.schedule(timerTask, new Date(2017 - 1900, 7, 14, 14, 2), 60*60*24);
  12. }
  13.  
  14. public void fetchAliRepayHistory(){
  15. JdbcUtil jdbcUtil = new JdbcUtil();
  16. String sql = " select bill_seq_no , to_char(to_date(last_update_date, 'yyyyMMddHH24miss'), 'yyyy-MM-dd HH24:mi:ss') " +
  17. " from acl.pay_order " +
  18. " where " +
  19. " status = 'S' " +
  20. " and gate_id = '1003' " +
  21. " and last_update_date >= ? " +
  22. " and last_update_date <= ? " +
  23. " order by last_update_date asc";
  24.  
  25. String yesterday = DateUtil.getDateString(DateUtil.addDay(new Date(), -1), "yyyyMMdd");
  26. String yesterdayBegin = yesterday + "000000";
  27. String yesterdayEnd = yesterday + "235959";
  28. Object[] params = new Object[]{yesterdayBegin, yesterdayEnd};
  29. List<Order> orders = jdbcUtil.query(sql, params, new ResultHandler<List<Order>>() {
  30. public List<Order> handler(ResultSet rs) throws SQLException {
  31. List<Order> list = new ArrayList<Order>();
  32. while(rs.next()){
  33. Order order = new Order();
  34. order.setBillSeqNo((String)rs.getObject(1));
  35. order.setCreateDate((String)rs.getObject(2));
  36. list.add(order);
  37. }
  38. return list;
  39. }
  40. });
  41. try {
  42. FileOutputStream outputStream = new FileOutputStream(new File("C:/Users/zhen/Desktop/每日支付宝付款报表.txt"), true);
  43. BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter((outputStream)));
  44. bufferedWriter.newLine();
  45. bufferedWriter.write(yesterday.substring(0, 4) + "-" + yesterday.substring(4, 6) + "-" + yesterday.substring(6, 8) + ":");
  46. bufferedWriter.newLine();
  47. for(Order order : orders){
  48. bufferedWriter.write("billSeqNo=" + order.getBillSeqNo() + ", createDate=" + order.getCreateDate());
  49. bufferedWriter.newLine();
  50. }
  51. bufferedWriter.close();
  52. outputStream.close();
  53. } catch (FileNotFoundException e) {
  54. e.printStackTrace();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58.  
  59. }
  60.  
  61. }
  62.  
  63. public class AliRepayHistoryTaskListener implements ServletContextListener{
  64. public void contextInitialized(ServletContextEvent servletContextEvent) {
  65. new AliRepayHistoryTask().task();
  66. }
  67.  
  68. public void contextDestroyed(ServletContextEvent servletContextEvent) {
  69.  
  70. }
  71. }
  72.  
  73. <listener>
  74. <listener-class>com.listener.AliRepayHistoryTaskListener</listener-class>
  75. </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. Java char 和 String 的区别: 字符编码及其存储

    一. ASCII码 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定.这被称为ASCII码,一直沿用至今.一个字节(8bit)一共 可以用来表示256种不同的状态 ...

  2. java 字节流和字符流转换类InputStreamReader,OutPutStreamReader

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2pjMjExMzIy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  3. 一个Spark job的生命历程

    一个job的生命历程 dagScheduler.runJob //(1) --> submitJob ( eventProcessLoop.post(JobSubmitted,***) //(2 ...

  4. http-从域名到页面

    目录 1. 网络基础 TCP/IP HTTP DNS URI, URL, and URN URI的格式 2. HTTP简单概括 通过实例看HTTP HTTP报文组成 3. 使用Firefox修改请求首 ...

  5. 常用linux shell脚本记录

    遍历目录下所有的文件是目录还是文件 for file in ./* do if test -f $file then echo $file 是文件 fi if test -d $file then e ...

  6. What do you think the coming adidas NMD Singapore

    adidas NMD Singapore is surprising everybody with a lot of completely new NMD choices combined with ...

  7. html 音频

    <!DOCTYPE html><meta charset="utf-8"><video src="movie.webm" cont ...

  8. (转)SSIS_数据流转换(Union All&合并联接&合并)

    Union All : 与sql语言 Union All 一样,不用排序,上下合并多个表.Union All转换替代合并转换:输入输出无需排序,合并超过两个表 合并联接 : 有左连接.内连接.完全连接 ...

  9. 【深入理解JVM】:类加载器与双亲委派模型

    类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字 ...

  10. Hopper Disassembler v4 ( The macOS Disassembler, Decompiler and Debugger)

    Hopper Disassembler v4 ( The macOS Disassembler, Decompiler and Debugger) Reveal13 (UI) 两个好东西..不知道的自 ...