javaweb基本组件之listener的使用

  1. listener顾名思义就是监听的意思,主要是用来监听web容器中所产生的事件,按照监听对象自顶向下的范围划分,javaweb中主要有以下种类的监听器:
    ①ServletContextListener 监听容器对象的初始化与销毁事件
    ②ServletContextAttributeListener 监听容器对象的属性的添加,删除和覆盖事件
    ③HttpSessionListener 监听容器中session对象的创建和销毁的事件
    ④HttpSessionAttributeListener 监听session对象中属性的添加,删除和覆盖事件
    ⑤ServletRequestListener 监听容器中request对象的创建和销毁的事件
    ⑥ServletRequestAttributeListener 监听request对象中属性的添加,删除和覆盖事件

  2. 挑选两个作为使用示例

package com.demo.listener;

import java.util.Date;
import java.text.SimpleDateFormat;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TestServletContextListener implements ServletContextListener{

    private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub
        System.out.println(df.format(new Date()) + "----  " + "ServletContext Destroyed." );
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // TODO Auto-generated method stub
        System.out.println(df.format(new Date()) + "----  " + "ServletContext Initialized.");
        ServletContext sc = sce.getServletContext();
        sc.setAttribute("df", df);
        sc.setAttribute("appname", "demo");
        new Runnable(){
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println(df.format(new Date()) + "----  " + "I am a new Thread be created when servletcontext initialized.");
            }
        }.run();
    }

}
package com.demo.listener;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class TestServletContextAttributeListener implements ServletContextAttributeListener{

    @Override
    public void attributeAdded(ServletContextAttributeEvent scav) {
        // TODO Auto-generated method stub
        ServletContext sc = scav.getServletContext();
        SimpleDateFormat df = (SimpleDateFormat) sc.getAttribute("df");
        System.out.println(df.format(new Date()) + "----  " + "ServletContext Added An Attribute.");
        try{
            String scattr = scav.getName();
            String scattr_value = scav.getValue().toString();
            System.out.println(df.format(new Date()) + "----  " + scattr + ": " + scattr_value);
        }catch(Exception e){
            e.printStackTrace();
        }

    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scav) {
        // TODO Auto-generated method stub
        ServletContext sc = scav.getServletContext();
        SimpleDateFormat df = (SimpleDateFormat) sc.getAttribute("df");
        System.out.println(df.format(new Date()) + "----  " + "ServletContext Removed An Attribute.");
        try{
            String scattr = scav.getName();
            String scattr_value = scav.getValue().toString();
            System.out.println(df.format(new Date()) + "----  " + scattr + ": " + scattr_value);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scav) {
        // TODO Auto-generated method stub
        ServletContext sc = scav.getServletContext();
        SimpleDateFormat df = (SimpleDateFormat) sc.getAttribute("df");
        System.out.println( df.format(new Date()) + "----  " + "ServletContext Replaced An Attribute.");
        try{
            String scattr = scav.getName();
            String scattr_value = scav.getValue().toString();
            System.out.println(df.format(new Date()) + "----  " + scattr + ": " + scattr_value);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

以上两个test类分别实现了ServletContextListener和ServletContextAttributeListener两个接口,第一个test实现了容器的启动与销毁的事件监听,第二个test实现了容器中属性的添加,删除和覆盖的事件监听

3.部署到容器中

 <listener>
    <description>Listener ServletContext Start Or Destory</description>
    <listener-class>com.demo.listener.TestServletContextListener</listener-class>
  </listener>

  <listener>
    <description>Listener ServletContext Add, Remove Or Replace An Attribute</description>
    <listener-class>com.demo.listener.TestServletContextAttributeListener</listener-class>
  </listener>

当我们启动web服务器的时候,可以看到相应的日志的输出,表明监听器已成功添加,并随着服务器的启动开始工作了

发布了34 篇原创文章 · 获赞 1 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章