026-JavaWeb Listener 監聽器

Listener:監聽器

概念 : web的三大組件之一,監聽web服務的一些事件

事件監聽機制

  • 事件    :一件事情
  • 事件源 :事件發生的地方
  • 監聽器 :一個對象
  • 註冊監聽:將事件、事件源、監聽器綁定在一起。 當事件源上發生某個事件後,執行監聽器代碼

常見的ServletContextListener:監聽ServletContext對象的創建和銷燬
方法:

  • void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷燬之前會調用該方法
  • void contextInitialized(ServletContextEvent sce) :ServletContext對象創建後會調用該方法

用法:
1. 定義一個類,實現ServletContextListener接口
2. 複寫方法
3. 配置
                方式一: web.xml  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

       <!-- 配置監聽器,如果用了註解,可以不加這行配置 -->     
   <listener>
      <listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
   </listener>
   <!-- 指定初始化參數 -->
   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
   </context-param>
   
</web-app>

                方式二:
                    註解:@WebListener

demo

@WebListener
public class ContextLoaderListener implements ServletContextListener {

    /**
     * 監聽ServletContext對象創建的。ServletContext對象服務器啓動後自動創建。
     *
     * 在服務器啓動後自動調用
     * @param servletContextEvent
     */
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //加載資源文件
        //1.獲取ServletContext對象
        ServletContext servletContext = servletContextEvent.getServletContext();
        //2.加載資源文件
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        //3.獲取真實路徑
        String realPath = servletContext.getRealPath(contextConfigLocation);
        //4.加載進內存
        try{
            FileInputStream fis = new FileInputStream(realPath);
            System.out.println(fis);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("ServletContext對象被創建了。。。");
    }

    /**
     * 在服務器關閉後,ServletContext對象被銷燬。當服務器正常關閉後該方法被調用
     * @param servletContextEvent
     */
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext對象被銷燬了。。。");
    }
}

這樣,當服務器啓動完成後,就會自動回調ContextLoaderListener 的contextInitialized方法,因爲這個監聽器是全局的,所以可以做一些全局資源的初始化工作。

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