關於J2EE中的Listener監聽器

來源:互聯網
上載者:User

Listener是基於觀察者模式設計的,Listener為Servlet應用程式提供一種控製程序和資料的手段。 Listener的註冊

Java Web的listener註冊比較簡單,因為其監聽的對象及事件都是Servlet容器建立的,如果需要它們的監聽器的話,只需要在web.xml中配置即可:

[java]  view plain copy <!-- web.xml-->   <listener>       <listener-class>... ...實現特定介面的自訂監聽器1</listener-class>       <listener-class>... ...實現特定介面的自訂監聽器2</listener-class>       ... ...   </listener>  


對於多個實現相同介面的listener,在執行時按照在web.xml中註冊的順序來決定


listener也可以在應用程式中動態添加。


Listener相關介面

Servlet規範中定義了多種類型的listener,它們用於監聽的事件來源分別為ServletContext,HttpSession和ServletRequest這三個域對象

Servlet規範針對這三個對象上的操作,又把這寫監聽器分為三種類型:

監聽三個域對象的建立和銷毀的事件監聽器

Listener類

含有的介面

介面說明

ServletContextListener

contextInitialized(ServletContextEvent sce);


contextDestroyed(ServletContextEvent sce);

Context容器初始化時觸發,在所有的Filter和Servlet的init方法調用之前contextInitialized介面先被調用;


Context容器銷毀,在所有的Filter和Servlet的destroy方法調用之後contextDestroyed介面被調用;

HttpSessionListener

SessionCreated(HttpSessionEvent se);
SessionDestroyed(HtppSessionEvent se);

當一個session對象被建立時觸發;
當一個session對象被失效時觸發;

ServletRequestListener

requestInitialized(ServletRequestEvent sre);
requestDestroyed(ServletRequestEvent sre);

當HttpServletRequest對象被傳遞到使用者的Servlet的service方法之前該方法被觸發;

當HttpServletRequest對象在調用完使用者的Servlet的service方法之後該方法被觸發;


注意:ServletContextListener在容器啟動之後就不能再添加新的了,因為它所監聽的事件已經不會再出現了。


監聽三個域對象中屬性的增,刪,改的事件監聽器

Listener類

含有的介面

介面說明

ServletContextAttributeListener

AttributeAdded(ServletContextAttributeEvent scab);


AttributeRemoved(ServletContextAttributeEvent scab);


AttributeReplaced(ServletContextAttributeEvent scab);

當調用servletContext.setAttribute方法時觸發這個方法;


當調用servletContext.removeAttribute方法時觸發這個方法;


如果在調用servletContext.setAttribute之前該attribute已經存在,則替換這個attribute時,這個方法被觸發

HttpSessionAttributeListener

attributeAdded(HttpSessionBindingEvent se);


attributeRemoved(HttpSessionBindingEvent se);


attributeReplaced(HttpSessionBindingEvent se);

session.setAttribute方法被調用時該方法被觸發;


session.removeAttribute方法被調用時該方法被觸發;


如果在調用session.setAttribute之前該attribute已經存在,則替換這個attribute時這個方法被觸發;

ServletRequestAttributeListener

AttributeAdded(ServletRequestAttributeEvent srae);


AttributeRemoved(ServletRequestAttributeEvent srae);


AttributeReplaced(ServletRequestAttributeEvent srae);

當調用request.setAttribute方法時觸發這個方法;


當調用request.removeAttribute方法時觸發這個方法;


如果在調用request.setAttribute之前該attribute已經存在,則替換attribute時這個方法被觸發;


感知型監聽器

這種監聽器不需要註冊。

某個java bean實現這個介面後就可以監聽何時被綁定,解除綁定或被啟用或鈍化。

HttpSessionBindingListener:實現該介面的類,能檢測自己何時被HttpSession綁定,解除綁定;

HttpSessionActivationListener:實現該介面的類,能檢測自己何時隨著HttpSession一起啟用和鈍化;


Listener的應用樣本

比如:

應用的初始化工作 —— 在自訂繼承的ServletContextListener監聽器的contextInitialized方法中,進行應用級的資源初始化以便提高效率,在contextDestroyed方法中對應用級的資源進行釋放

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.