Java EE基礎知識學習(七)

當Web應用在Web容器中運行時,Web應用內部會不斷髮生各種事件:如Web應用被啓動、Web應用被停止、用戶Session開始、用戶Session結束、用戶請求到達等,通常來說這些Web事件對於開發者是透明的。Servlet API提供了大量的監聽器來監聽Web應用的內部事件,從而允許當Web內部事件發生時回調事件監聽器內的方法。這些監聽器就是我們這一節要介紹的Listener。


Listener

實現Listener的步驟:

我們在使用Listener的過程中,只需要兩個步驟:

  1. 定義Listener實現類。
  2. 通過註解或者在web.xml文件中配置Listener。

常用的Web事件監聽器:

  • ServletContextListener:用於監聽Web應用的啓動和關閉。
  • ServletContextAttributeListener:用於監聽ServletContext範圍(application)內屬性的改變。
  • ServletRequestListener:用於監聽用戶請求。
  • ServletRequestAttributeListener:用於監聽ServletRequest範圍(request)內屬性的改變。
  • HttpSessionListener:用於監聽用戶Session的開始和結束。
  • HttpSessionAttributeListener:用於監聽HttpSession範圍(session)內屬性的改變。

Listener配置:

配置Listener只要向Web應用註冊Listener實現類就可以了,無需配置參數之類的東西,所以配置過程非常簡單,並且它的配置和Servlet一樣,有兩種配置的方式:

  1. 使用@WebListener修飾Listener實現類即可。
  2. 在web.xml文檔中使用
<listener>
    <listener-class>com.example.TestListener</listener-class>
</listener>

Listener使用舉例:

在這裏我們使用ServletContextListener來實例使用Listener,在使用的時候我們只需要在我們的類中實現ServletContextListener接口,然後將我們要做的工作寫在相應的方法中就可以了,代碼如下:

package com.example;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * Application Lifecycle Listener implementation class TestListener
 *
 */
@WebListener
public class TestListener implements ServletContextListener {

    /**
     * Default constructor. 
     */
    public TestListener() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0)  { 
         // TODO Auto-generated method stub
        System.out.println("Web應用啓動");
    }

    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent arg0)  { 
         // TODO Auto-generated method stub
        System.out.println("Web應用關閉");
    }

}

在上面的代碼中,我們在contextInitialized方法中輸出了“Web應用啓動”,在contextDestroyed方法中輸出了“Web應用關閉”,這樣當Web應用啓動的時候,我們可以在控制檯中看到“Web應用啓動”的字段,而在Web應用關閉的時候看到“Web應用關閉”的字段,這樣說明我們的Listener已經成功監聽到了Web應用的啓動和關閉,而我們也可以在這裏讓監聽器做更多的工作,例如可以在Web應用啓動的時候連接數據庫並且獲取到數據庫的連接,然後在Web應用關閉的時候斷開數據庫的連接。

其他的Web Listener類就不在一一舉例,它們的使用都和上述例子中的使用類似,只是不同的Listener實現類中方法也不同,我們在使用這些Listener類的時候要注意識別每個方法是在什麼時候被調用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章