zoukankan      html  css  js  c++  java
  • 监听器的使用例子 ServletContextListener

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

    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>
    View Code

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

  • 相关阅读:
    [ARC 102D]All Your Paths are Different Lengths
    [NOI 2016] 优秀的拆分
    [TJOI 2015] 线性代数
    [LUOGU 4717] 快速沃尔什变换
    [NOI 2006] 最大获利
    Javascript继承机制的设计
    必应输入法产品分析
    你不得不知道的HTML5的新型标签
    Mobile Web
    10行代码爬取网页
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/7357724.html
Copyright © 2011-2022 走看看