监听器
JavaWeb监听器概述
在JavaWeb被监听的事件源为:ServletContext、HttpSession、ServletRequest,即三大域对象。
l 监听域对象“创建”与“销毁”的监听器;
l 监听域对象“操作域属性”的监听器;
l 监听HttpSession的监听器。
创建与销毁监听器
创建与销毁监听器一共有三个:
l ServletContextListener:Tomcat启动和关闭时调用下面两个方法
public void contextInitialized(ServletContextEvent evt):ServletContext对象被创建后调用;
public void contextDestroyed(ServletContextEvent evt):ServletContext对象被销毁前调用;
l HttpSessionListener:开始会话和结束会话时调用下面两个方法
public void sessionCreated(HttpSessionEvent evt):HttpSession对象被创建后调用;
public void sessionDestroyed(HttpSessionEvent evt):HttpSession对象被销毁前调用;
l ServletRequestListener:开始请求和结束请求时调用下面两个方法
public void requestInitiallized(ServletRequestEvent evt):ServletRequest对象被创建后调用;
public void requestDestroyed(ServletRequestEvent evt):ServletRequest对象被销毁前调用。
实例:
写一个监听器类:要求必须去实现某个监听器接口;
注册,是在web.xml中配置来完成注册!
/* * ServletContextListener实现类 * contextDestroyed() -- 在ServletContext对象被销毁前调用 * contextInitialized() -- -- 在ServletContext对象被创建后调用 * ServletContextEvent -- 事件类对象 * 该类有getServletContext(),用来获取ServletContext对象,即获取事件源对象 */ public class MyServletContextListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent evt) { System.out.println("销毁ServletContext对象"); } public void contextInitialized(ServletContextEvent evt) { System.out.println("创建ServletContext对象"); } } /* * HttpSessionListener实现类 * sessionCreated() -- 在HttpSession对象被创建后被调用 * sessionDestroyed() -- -- 在HttpSession对象被销毁前调用 * HttpSessionEvent -- 事件类对象 * 该类有getSession(),用来获取当前HttpSession对象,即获取事件源对象 */ public class MyHttpSessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent evt) { System.out.println("创建session对象"); } public void sessionDestroyed(HttpSessionEvent evt) { System.out.println("销毁session对象"); } } /* * ServletRequestListener实现类 * requestDestroyed() -- 在ServletRequest对象被销毁前调用 * requestInitialized() -- 在ServletRequest对象被创建后调用 * ServletRequestEvent -- 事件类对象 * 该类有getServletContext(),用来获取ServletContext对象 * 该类有getServletRequest(),用来获取当前ServletRequest对象,即事件源对象 */ public class MyServletRequestListener implements ServletRequestListener { public void requestDestroyed(ServletRequestEvent evt) { System.out.println("销毁request对象"); } public void requestInitialized(ServletRequestEvent evt) { System.out.println("创建request对象"); } }
注册监听器
<listener> <listener-class>cn.itcast.listener.MyServletContextListener</listener-class> </listener> <listener> <listener-class>cn.itcast.listener.MyHttpSessionListener</listener-class> </listener> <listener> <listener-class>cn.itcast.listener.MyServletRequestListener</listener-class> </listener> <session-config> <session-timeout>1</session-timeout> </session-config>
操作域属性的监听器
当对域属性进行增、删、改时,执行的监听器一共有三个:
l ServletContextAttributeListener:在ServletContext域进行增、删、改属性时调用下面方法。
public void attributeAdded(ServletContextAttributeEvent evt)
public void attributeRemoved(ServletContextAttributeEvent evt)
public void attributeReplaced(ServletContextAttributeEvent evt)
l HttpSessionAttributeListener:在HttpSession域进行增、删、改属性时调用下面方法
public void attributeAdded(HttpSessionBindingEvent evt)
public void attributeRemoved (HttpSessionBindingEvent evt)
public void attributeReplaced (HttpSessionBindingEvent evt)
l ServletRequestAttributeListener:在ServletRequest域进行增、删、改属性时调用下面方法
public void attributeAdded(ServletRequestAttributeEvent evt)
public void attributeRemoved (ServletRequestAttributeEvent evt)
public void attributeReplaced (ServletRequestAttributeEvent evt)
事件对象
l ServletContextEvent:ServletContext getServletContext();
l HttpSeessionEvent:HttpSession getSession();
l ServletRequestEvent:
ServletRequest getServletRequest()
ServletContext getServletContext()
下面对这三个监听器的事件对象功能进行介绍:
l ServletContextAttributeEvent
String getName():获取当前操作的属性名;
Object getValue():获取当前操作的属性值;
ServletContext getServletContext():获取ServletContext对象。
l HttpSessionBindingEvent
String getName():获取当前操作的属性名;
Object getValue():获取当前操作的属性值;
HttpSession getSession():获取当前操作的session对象。
l ServletRequestAttributeEvent
String getName():获取当前操作的属性名;
Object getValue():获取当前操作的属性值;
ServletContext getServletContext():获取ServletContext对象;
ServletRequest getServletRequest():获取当前操作的ServletRequest对象。
public class MyListener implements ServletContextAttributeListener, ServletRequestAttributeListener, HttpSessionAttributeListener { public void attributeAdded(HttpSessionBindingEvent evt) { System.out.println("向session中添加属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeRemoved(HttpSessionBindingEvent evt) { System.out.println("从session中移除属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeReplaced(HttpSessionBindingEvent evt) { System.out.println("修改session中的属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeAdded(ServletRequestAttributeEvent evt) { System.out.println("向request中添加属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeRemoved(ServletRequestAttributeEvent evt) { System.out.println("从request中移除属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeReplaced(ServletRequestAttributeEvent evt) { System.out.println("修改request中的属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeAdded(ServletContextAttributeEvent evt) { System.out.println("向context中添加属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeRemoved(ServletContextAttributeEvent evt) { System.out.println("从context中移除属性:" + evt.getName() + "=" + evt.getValue()); } public void attributeReplaced(ServletContextAttributeEvent evt) { System.out.println("修改context中的属性:" + evt.getName() + "=" + evt.getValue()); } }
总结:
JavaWeb中的监听器
l 事件源:三大域!
ServletContext
¨ 生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
void contextInitialized(ServletContextEvent sce):创建SErvletcontext时
void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时
¨ 属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。
void attributeAdded(ServletContextAttributeEvent event):添加属性时;
void attributeReplaced(ServletContextAttributeEvent event):替换属性时;
void attributeRemoved(ServletContextAttributeEvent event):移除属性时;
HttpSession
¨ 生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
void sessionCreated(HttpSessionEvent se):创建session时
void sessionDestroyed(HttpSessionEvent se):销毁session时
¨ 属性监听:HttpSessioniAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。
void attributeAdded(HttpSessionBindingEvent event):添加属性时;
void attributeReplaced(HttpSessionBindingEvent event):替换属性时
void attributeRemoved(HttpSessionBindingEvent event):移除属性时
Ø ServletRequest
¨ 生命周期监听:ServletRequestListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
void requestInitialized(ServletRequestEvent sre):创建request时
void requestDestroyed(ServletRequestEvent sre):销毁request时
¨ 属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用。
void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时
l javaWeb中完成编写监听器:
写一个监听器类:要求必须去实现某个监听器接口;
注册,是在web.xml中配置来完成注册!
l 事件对象:
ServletContextEvent:ServletContext getServletContext()
HttpSessionEvent:HttpSession getSession()
ServletRequest:
ServletContext getServletContext();
ServletReques getServletRequest();
ServletContextAttributeEvent:
ServletContext getServletContext();
String getName():获取属性名
Object getValue():获取属性值
ServletRequestAttributeEvent :略