張老師對Servlet事件監聽器的三個接口做了詳細的說明,並舉例用
ServletContextListener事件監聽器對象的contextInitialized()方法和contextDestoryed方法來控制數據庫的連接和關閉來形象的說明了Servlet事件處理器的用處,有助於理解其原理。
ServletContextListener接口
它用於監聽代表Web應用程序的ServletContext對象的創建和銷燬的事件,當在Web應用程序中註冊一個或多個實現了ServletContextListener接口的事件監聽器後,Web容器在創建和銷燬ServletContext對象時就會產生一個ServletContextEvent事件對象,接着依次調用每個ServletContext事件監聽器中相應的處理方法,並將ServletContextEvent事件對象傳遞給這些方法。在
ServletContextListener接口中定義了兩個事件處理方法,contextInitialized()和contextDestroyed()方法,他們分別用於處理ServletContext對象的創建事件和銷燬事件。
contextInitialized()方法
public void contextInitialized(ServletContextEvent sce)
當ServletContext對象創建時,web容器會調用ServletContextListener的
contextInitialized方法,contextInitialized方法接受到一個ServletContextEvent對象的參數,通過這個參數可以獲得當前被創建的
ServletContext對象。
contextDestroyed方法
public void contextDestroyed(ServletContextEvent sce)
當ServletContext對象銷燬時,web容器會調用ServletContextListener的
contextDestoryed方法,並將ServletContextEvent對象傳遞給contextDestoryed方法。
可以利用ServletContextListener事件監聽器的編寫一些實現特殊功能的程序,例如創建全局共享的數據庫鏈接。
1.當Web應用程序被加載時,其對應的ServletContext對象被創建,Web服務器將調用ServletContextListener事件監聽器對象的contextInitialized()方法,在此方法中編寫獲得數據庫鏈接的代碼,並把這個獲得連接的對象保存到ServletContext對象中,所有的Servlet程序和JSP頁面中就可以直接從ServletContext對象中取出被保存的鏈接對象來訪問數據庫,避免每個Servlet程序和JSP頁面都去創建新的數據庫鏈接,提高了程序運行效率。
2.當Web應用程序被卸載時,其對應的ServletContext對象被銷燬,Web服務器將調用web容器會調用ServletContextListener監聽器對象的contextDestoryed方法,在此方法中編寫關閉數據庫連接的代碼,這樣就可以確保數據庫鏈接對象在Web應用程序卸載時被銷燬,從而避免浪費數據庫鏈接資源的現象。
HttpSessionListener接口
它用於監聽Web應用程序中的用戶會話對象HttpSession的創建和銷燬事件,當在Web應用程序中註冊一個或多個實現了HttpSessionListener接口的事件監聽器後,Web容器在創建或銷燬每個HttpSession對象時就會產生一個HttpSessionEvent對象,然後依次調用每個HttpSession事件監聽器中的相應處理方法,並將HttpSessionEvent對象傳遞給這些方法,在HttpSessionListener接口中定義了兩個事件處理方法:sessionCreated()和sessionDestroy(),他們分別在HttpSession對象被創建和銷燬時被調用。
HttpRequestListener接口
它用於監聽Web應用程序中的ServletRequest對象的創建和銷燬事件,其原理類似月前兩個接口。HttpRequestListener接口中定義了兩個方法,requestInitialized()和requestDestroy()方法,他們分別用於處理ServletRequest對象的創建事件和銷燬事件。