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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章