1. 程式人生 > >web的監聽器,你需要知道這些...

web的監聽器,你需要知道這些...

Listener是Servlet規範的另一個高階特性,它用於監聽java web程式的事件,例如建立、修改、刪除session,request,context等,並觸發相應的處理事件,這個處理事件是由web容器回掉的。

學過安卓開發的同學一定很熟悉view.setonClickLister();這樣的對安卓控制元件的監聽。java web也是這樣的 ,根據不同的listner 和不同的event,可以完成相應的處理事件。

Listerner分為八種,前三種是用於監聽物件的建立和銷燬,中間三種用於監聽物件屬性的變化,後兩種用於監聽Session內物件。

  • httpSessionListner: 監聽session的建立與銷燬,用於收集線上使用者資訊。

  • servletContextListener:監聽context的建立與銷燬,context代表當前web應用,該listener可用於啟動時獲取web.xml的初始化引數。

  • servletRequestListener: 監聽request 的建立與銷燬。

  • httpSessionAttributeListener 監聽session的種屬性變化

  • ServletContextAttributeListener

  • ServletRequestAttributeListener

  • HttpSessionBindingListener,監聽物件存入或者移除 session

  • httpSessionActivationListener,鈍化和重新載入 session的監聽

直接上程式碼,下面監聽了這三個物件建立銷燬。

 
 

需要在web.xml中配置:

 
 
  • httpSessionAttributeListener 監聽session的種屬性變化
  • ServletContextAttributeListener
  • ServletRequestAttributeListener

以上三種方法用於監聽session ,context,request的屬性發生變化,雅思培訓一般多少錢例如新增、更新、移除。
下面以session的屬性變化為例子:

 
 

web.xml配置,此處省略。

  • HttpSessionBindingListener,當物件被放到session裡執行valueBond();當物件被移除,執行valueUnbond();
  • httpSessionActivationListener,伺服器關閉,會將session的內容儲存在硬盤裡,這個過程叫鈍化;伺服器重啟,會將session的內容從硬碟中重新載入。鈍化時執行sesionWillPassivate(),重新載入sessionDidActivate();

舉個例子:

 
 

init.jsp

 
 

destroy.jsp

 
 

當訪問init.jsp,再訪問destroy.jsp;再訪問init,jsp,再關閉伺服器,重啟;log日誌如下:

valueBound Name:currentUser

valueUnbound Name:currentUser

sessionWillPassivate [email protected]

sessionDidActivate
[email protected]

 
 

jsp中顯示:

 
 

這是一個簡答的統計線上人數的方法,如果你需要知道這些人來自哪裡,需要配合httpRequestListener配合,也可以實現單登陸,在這裡不寫程式碼了。