用來監(jiān)聽特定對象的創(chuàng)建或銷毀、屬性的變化的!
是一個(gè)實(shí)現(xiàn)特定接口的普通java類!
Servlet中哪些對象需要監(jiān)聽?
- request / session / servletContext
- 分別對應(yīng)的是request監(jiān)聽器、session相關(guān)監(jiān)聽器、servletContext監(jiān)聽器
監(jiān)聽器(listener)
監(jiān)聽器接口:
-
監(jiān)聽對象創(chuàng)建/銷毀的監(jiān)聽器接口
- Interface ServletRequestListener 監(jiān)聽request對象的創(chuàng)建或銷毀
- Interface HttpSessionListener 監(jiān)聽session對象的創(chuàng)建或銷毀
- Interface ServletContextListener 監(jiān)聽servletContext對象的創(chuàng)建或銷毀
-
監(jiān)聽對象屬性的變化
- Interface ServletRequestAttributeListener 監(jiān)聽request對象屬性變化: 添加、移除、修改
- Interface HttpSessionAttributeListener 監(jiān)聽session對象屬性變化: 添加、移除、修改
- Interface ServletContextAttributeListener 監(jiān)聽servletContext對象屬性變化
-
session相關(guān)監(jiān)聽器
- Interface HttpSessionBindingListener 監(jiān)聽對象綁定到session上的事件
- Interface HttpSessionActivationListener(了解) 監(jiān)聽session序列化及反序列化的事件
生命周期監(jiān)聽器
聲明周期監(jiān)聽器: 監(jiān)聽對象的創(chuàng)建、銷毀的過程!
監(jiān)聽器開發(fā)步驟:
- 寫一個(gè)普通java類,實(shí)現(xiàn)相關(guān)接口;
- 配置(web.xml)
ServletRequestListener
監(jiān)聽request對象的創(chuàng)建或銷毀
public class MyRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent){
System.out.println("MyRequestListener.requestDestroyed()");
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent){
System.out.println("MyRequestListener.requestInitialized()");
}
}
<listener>
<listener-class>com.flynn.MyRequestListener</listener-class>
</listener>
HttpSessionListener
監(jiān)聽session對象的創(chuàng)建或銷毀。
ServletContextListener
監(jiān)聽servletContext對象的創(chuàng)建或銷毀
屬性監(jiān)聽器
監(jiān)聽:request/session/servletContext對象屬性的變化!
ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener
與前文的request對象監(jiān)聽一樣的實(shí)現(xiàn)