1. 程式人生 > >【監聽器篇】1.監聽request、ServletContext 、session物件的建立和銷燬

【監聽器篇】1.監聽request、ServletContext 、session物件的建立和銷燬

1.監聽器知識點

  簡單來說,監聽器是監聽一個物件發生的什麼事,然後監聽器做出相應的反應。這就是我們的監聽器,用我們專業的話來說:監聽器負責監聽事件源的事件。

  事件源:發生事件的源頭,監聽器需要監聽的物件。

  事件:事件源上發生的動作,監聽器監聽的內容。

  監聽器:負責監聽事件源的物件。

  在我們的javaweb中,監聽器主要負責監聽這三個物件:request,session,ServletContext,接下來就是根據監聽這三個物件所承擔的責任不同而對監聽器進行的一個分類。

2.監聽器的分類

 a.監聽request、ServletContext 、session物件的建立和銷燬

        ServletRequestListener、ServletContextListener、HttpSessionListener
 b.監聽request、session、ServletContext 物件存放的資料變化情況
        ServletContextAttributeListener 、HttpSessionAttributeListener 、ServletRequestAttributeListener
 c.監聽session中儲存的JavaBean的狀態
        HttpSessionBindingListener

3.工程說明

  本次工程的目標是學習監聽器,掌握監聽三個物件的建立和銷燬方法。

  三個物件:rquest,session,ServletContext

  實現的介面:ServletRequestListener,HttpSessionListener,ServletContextListener

工程的大致步驟:

1.自定義實現三個監聽器的類
2.使用註解的方法註冊監聽器

3.部署工程並執行,在控制檯會輸出相應的資訊

4.自定義實現三個監聽器的類

4.1 MyServletRequestListener

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

/*
 * 2018.5.15 
 * @author Dragon
 * 監聽request物件的建立和銷燬的監聽器
 */
@WebListener
public class MyServletRequestListener implements ServletRequestListener {

	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {
		System.out.println("MyServletRequestListener--------requestDestroyed");

	}

	@Override
	public void requestInitialized(ServletRequestEvent arg0) {
		System.out.println("MyServletRequestListener--------requestInitialized");

	}

}

4.2 MyHttpSessionListener

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/*
 * 2018.5.15 
 * @author Dragon
 * 監聽session物件的建立和銷燬的監聽器
 */
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		System.out.println("MyHttpSessionListener--------sessionCreated");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("MyHttpSessionListener--------sessionDestroyed");
	}

}

4.3 MyServletContextListener

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

/*
 * 2018.5.15 
 * @author Dragon
 * 監聽application物件的建立和銷燬的監聽器
 */
@WebListener
public class MyServletContextListener implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("MyServletContextListener--------contextDestroyed");

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("MyServletContextListener--------contextInitialized");
	}

}

以上三個自定義的類都實現了相應的介面,然後在對應的方法中向控制檯列印相應的資訊。除此之外,上面的監聽器中採用註解的方式進行了註冊!  

@WebListener
所以監聽器的建立和註冊的任務都完成了,接下來就是部署工程跑一跑偶看我們的執行結果進行分析。

5.結果分析

1.在我們啟動伺服器的時候,可以找到控制檯輸出了:MyServletContextListener--------contextInitialized
    可以知道,我們的ServletContext物件是application,僅此一個,隨著伺服器的生而生,伺服器亡而亡
2.然後訪問我們的工程,可以看到這樣的資訊輸出:
  MyServletRequestListener--------requestInitialized
  MyHttpSessionListener--------sessionCreated
  MyServletRequestListener--------requestDestroyed
  從上面的輸出可以看出來request物件先是被建立了,然後接著是session物件被建立,
  最後讓我們的request物件又銷燬了,但是session物件沒有被銷燬。
  這是因為,request是使用者的請求,請求就是一瞬間的過程
  而session表示的是我們的會話視窗,就像開啟一個淘寶網頁一樣,你沒有完全關閉它,它是不會結束的
  session的結束取決於session的生命週期

6.下一階段的學習

ok!很完美的走了一次監聽器是如何監聽我們這三個物件的建立和銷燬的過程。
接下來繼續向前學習~

下一階段:監聽request、session、ServletContext 物件存放的資料變化情況