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 對象存放的資料變化情況