在我們的web容器中,一直不斷的觸發(fā)著各種事件,例如:web應(yīng)用啟動(dòng)和關(guān)閉,request請(qǐng)求到達(dá)和結(jié)束等。但是這些事件通常對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是透明的,我們可以根據(jù)這些接口開(kāi)發(fā)符合我們自身需求的功能。在web中常見(jiàn)的的幾個(gè)監(jiān)聽(tīng)事件如下:

  • ServletContextListener:用于監(jiān)聽(tīng)web應(yīng)用的啟動(dòng)和關(guān)閉

  • ServletContextAttributeListener:用于監(jiān)聽(tīng)在application范圍內(nèi)的數(shù)據(jù)的變動(dòng)

  • ServletRequestListener:用于監(jiān)聽(tīng)用戶請(qǐng)求的細(xì)節(jié)

  • ServletRequestAttributeListener:用于監(jiān)聽(tīng)request范圍內(nèi)的數(shù)據(jù)的變動(dòng)

  • HttpSessionListener:用于監(jiān)聽(tīng)某次會(huì)話的開(kāi)始和結(jié)束

  • HttpSessionAttributeListener:用于監(jiān)聽(tīng)session范圍內(nèi)的屬性數(shù)據(jù)的變動(dòng)

一、使用ServletContextListener監(jiān)聽(tīng)web應(yīng)用的啟動(dòng)和關(guān)閉
我們想要實(shí)現(xiàn)一個(gè)自定義的Listener,需要兩個(gè)步驟,第一個(gè)是根據(jù)自己的需求繼承相應(yīng)的上述的監(jiān)聽(tīng)事件的接口,并實(shí)現(xiàn)其中的相應(yīng)的方法。第二個(gè)步驟就是,在web.xml中配置此Listener監(jiān)聽(tīng)器的處理類或者使用注解配置。下面我們通過(guò)繼承自ServletContextListener接口來(lái)實(shí)現(xiàn)對(duì)web應(yīng)用的啟動(dòng)和關(guān)閉實(shí)時(shí)監(jiān)控。

public class MyListener implements ServletContextListener {    @Override//web應(yīng)用啟動(dòng)時(shí)候觸發(fā)此事件
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("web應(yīng)用啟動(dòng)了。。。");
    }    @Override//web應(yīng)用關(guān)閉的時(shí)候觸發(fā)事件
    public void contextDestroyed(ServletContextEvent sce) {

        System.out.println("web應(yīng)用被關(guān)閉了。。。");
    }

}
<?xml version="1.0" encoding="UTF-