javaWeb三大組件之監聽器(Listener)

介紹

監聽器(Listener)的作用

監聽某一個事件的發生,狀態的改變等。

原理

接口回調:

  • A在執行循環,當循環到5的時候, 通知B。
  • 事先先把一個接口對象傳遞給 A , 當A執行到5的時候,通過這個接口對象,來調用B中的方法。 但是注意,不是直接傳遞B的實例,而是傳遞一個接口的實例過去,而B是這個接口的實現。
    在這裏插入圖片描述

javaWeb中的8個Listener

監聽servlet 三個作用域的創建與銷燬(3)

此類監聽器用來監聽servlet三大作用域的創建和銷燬:

作用域 實例對象 監聽器Listener
application ServletContext ServletContextListener
session HttpSession HttpSessionListener
request HttpServletRequest ServletRequestListener

ServletContextListener

ServletContextListener

servletcontext創建:

  • 啓動服務器的時候

servletContext銷燬:

  • 關閉服務器.
  • 從服務器移除項目

demo:

@WebListener
public class MyServletContextListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext 被創建了、、、");
    }

    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext 被銷燬了、、、");
    }
}

項目啓動時(Tomcat啓動):
在這裏插入圖片描述
關閉項目:
在這裏插入圖片描述

HttpSessionListener

HttpSessionListener

session的創建:只要調用getSession

  • html: 不會
  • jsp: 會 getSession();
  • servlet: 會

session的銷燬

  • 超時 30分鐘
  • 非正常關閉 銷燬
  • 正常關閉服務器(序列化)

demo:

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session 創建了、、、");
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session 銷燬了、、、");
    }
}

訪問資源/test01
在這裏插入圖片描述關閉項目服務
在這裏插入圖片描述

ServletRequestListener

ServletRequestListener

request創建:訪問服務器上的任意資源都會有請求出現。

  • 訪問 html: 會
  • 訪問 jsp: 會
  • 訪問 servlet : 會

request銷燬:服務器已經對這次請求作出了響應。

demo:

@WebListener
public class MyServletRequestListener implements ServletRequestListener {

    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("request 創建了、、、");
    }

    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("request 銷燬了、、、");
    }
}

訪問資源/test01:
在這裏插入圖片描述

監聽servlet 三個作用域屬性變更(3)

可以監聽在作用域中值的 添加 | 替換 | 移除 的動作。

  • servletContext — ServletContextAttributeListener
  • session — HttpSessionAttributeListener
  • request — ServletRequestAttributeListener

demo:

@WebServlet(urlPatterns = "/test03")
public class MyServlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("111","111");
        System.out.println("MyServlet03: set 111:111");

        req.setAttribute("222","222");
        System.out.println("MyServlet03: set 222:222");

        req.removeAttribute("111");
        System.out.println("MyServlet03: remove 222");

        req.setAttribute("111","222");
        System.out.println("MyServlet03: set 111:222");
    }
}
@WebListener
public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {

    public void attributeAdded(ServletRequestAttributeEvent srae) {
        System.out.println("添加數據:"+srae.getName()+"-"+srae.getValue());
    }

    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        System.out.println("刪除數據:"+srae.getName()+"-"+srae.getValue());
    }

    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        System.out.println("替換數據:"+srae.getName()+"-"+srae.getValue());
    }
}

請求/test03
在這裏插入圖片描述

監聽httpSession裏面存值的狀態變更

這一類監聽器不用註冊。

HttpSessionBindingListener

監聽對象與session 綁定和解除綁定 的動作

 讓javaBean 實現該接口即可

		@Override
		public void valueBound(HttpSessionBindingEvent event) {
			System.out.println("對象被綁定進來了");
		}
	
		@Override
		public void valueUnbound(HttpSessionBindingEvent event) {
			System.out.println("對象被解除綁定");
		}

HttpSessionActivationListener

用於監聽現在session的值 是 鈍化 (序列化)還是活化 (反序列化)的動作

  • 鈍化 (序列化)

把內存中的數據 存儲到硬盤上

  • 活化 (反序列化)

把硬盤中的數據讀取到內存中。

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