Servlet监听器

Servlet监听器

Servlet监听器主要目的是给web应用增加事件处理机制,以便更好地监视和控制web应用的状态变化

监听器事件类型

  1. 全局事件 / ServletContext (在服务器启动后创建,在服务器关闭或者重启时销毁)

  2. 生命周期

    1. 属性变化

  3. 会话事件 / HttpSession

    1. 生命周期

    2. 属性变化

    3. 回话迁移

    4. 对象绑定事件

  4. 请求事件 / ServletRequest

    1. 生命周期

    2. 属性变化

监听器的接口中方法 / 全局事件

//创建一个监听器
//实现接口ServletContextListener 监听生命周期
    //方法有contextInitialized,contextDestroyed
//实现接口ServletContextAttributeListener 监听属性变化
    //方法有attributeAdded,attributeRemoved,attributeReplaced
public class MyServletContextListener implements ServletContextListener, ServletContextAttributeListener {

    //全局对象创建时调用
    @Override
    public void contextInitialized(ServletContextEvent event) {}

    //全局对象销毁时调用
    @Override
    public void contextDestroyed(ServletContextEvent event) {}

    
     //监视 添加属性的时候
    @Override
    public void attributeAdded(ServletContextAttributeEvent event) {
        //获得添加属性的键名
        String key =  event.getName();
        //获得添加属性的值
        String value = (String) event.getValue();
        //以上方法在监听属性方法中都适用
    }

    //监视 属性被删除的时候
    @Override
    public void attributeRemoved(ServletContextAttributeEvent event) {}

    //监视属性被修改的事件
    @Override
    public void attributeReplaced(ServletContextAttributeEvent event) {
        //获得新的值
        String new_value = (String) event.getServletContext().getAttribute(key);
        //event.getValue()该方法无法获得修改后的新值
        //获得新值需要通过event获取全局对象
    }
}
         

监听器的注册 / web.xml中

<!--注册监听器-->
    <listener>
        <listener-class>监听器的全路径</listener-class>
    </listener>

<!--或者在实现接口的类上添加注释 @WebListene-->

定时任务

//定时任务
    //jdk 自带Timer java.util包
    //quarz 框架


//Timer的应用
    //创建定时任务类
        public class MyJob extends TimerTask {
            //定时任务主要需要继承TimerTask类
            @Override
               public void run() {
                //然后重写父类的run方法
                //该方法中书写需要执行的代码
            }
        }

    //1.创建一个定时器
        Timer timer = new Timer();
    
    //2.创建一个定时任务
        MyJob myJob = new MyJob();
    
    //3.使用定时器去调用定时任务
        //延时执行 -> 一次
            timer.schedule(myJob,5);
            // schedule : 调度的意思
            //参数 -> 任务 延时执行时间.s

        //延时执行 -> 循环
            timer.schedule(job,10*1000,3*1000);
            //参数 -> 任务  延时执行时间.ms  多久执行一次.ms

其他

  1. IDEA重写方法的快捷键 / ctrl + i

  2. LocalDateTime.now() -> 获得当前时间

posted @ 2020-04-24 00:52  是非_大道克己  阅读(205)  评论(0编辑  收藏  举报