1 监听器
所谓监听器实际就是一个Java程序,功能是监听另一个Java对象的变化(如对象创建、方法调用、属性变化等)。在JavaWeb中,一共有8个监听器,分别用来监听ServletContext、HttpSession、ServletRequest和JavaBean,下面我们依次来介绍这些监听器。
2 ServletContext的监听器
ServletContext作用域有两个监听器,一个是ServletContextListener,用来监听ServletContext对象的创建和销毁,另一个是ServletContextAttributeListener,用来监听ServletContext中属性的增加、删除和替换。
2.1 ServletContextListener的使用
1、实现ServletContextListener接口
/**
* 用来监听ServletContext对象创建和销毁的监听器
*/
public class MyServletContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent sce) {
// 服务器启动,web应用加载后立即创建代表当前web应用的ServletContext对象
System.out.println("ServletContext对象被销毁了...." + sce.getServletContext());
}
public void contextInitialized(ServletContextEvent sce) {
// 服务器关闭或web应用被移除出容器时,ServletContext随着web应用的销毁而销毁
System.out.println("ServletContext对象被创建出来了...." + sce.getServletContext());
}
}
2、在web.xml中注册这个监听器
<listener>
<listener-class>com.duiyi.listener.MyServletContextListener</listener-class>
</listener>
2.2 ServletContextAttributeListener的使用
1、实现ServletContextAttributeListener接口
public class MyServletContextAttrListener implements ServletContextAttributeListener {
public void attributeAdded(ServletContextAttributeEvent scab) {
System.out.println("属性被加入到了ServletContext域中" + scab.getName() + ":" + scab.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent scab) {
System.out.println("属性被移除出了ServletContext域中" + scab.getName() + ":" + scab.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent scab) {
// scab获取到的是修改前的原值,要获取最新值只能通过ServletContext域获取
System.out.println("属性被替换在ServletContext域中" + scab.getName() + ":" + scab.getValue() + ":" + scab.getServletContext().getAttribute(scab.getName()));
}
}
2、在web.xml中注册这个监听器
<listener>
<listener-class>com.duiyi.listener.MyServletContextAttrListener </listener-class>
</listener>
3 HttpSession和ServletRequest监听器
与ServletContext一样,HttpSession和ServletRequest也分别有对象创建和销毁监听器以及属性监听器。HttpSession的两个监听器分别是HttpSessionListener和HttpSessionAttributeListener,而ServletRequest的两个监听器分别是ServletRequestListener和ServletRequestAttributeListener,使用方法和ServletContext的两个监听器一样,都需要在web.xml中注册。
4 JavaBean监听器
JavaBean监听器的作用是使JavaBean自己感知自己在Session中的状态变化,这个监听器不需要在web.xml中注册,只需要对应的JavaBean实现这个监听器即可。JavaBean监听器包括两个:HttpSessionBindingListener和HttpSessionActivationListener;下面就来介绍一下这两个监听器。
public class Person implements Serializable, HttpSessionBindingListener, HttpSessionActivationListener{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// HttpSessionBindingListener接口的方法
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("当前JavaBean对象被绑定到session域中时,JavaBean自己感知到自己被绑定到了session中,从而触发此方法...");
}
// HttpSessionBindingListener接口的方法
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("当前JavaBean对象被移除出session时,JavaBean自己感知到自己被移除出session从而触发此方法...");
}
// HttpSessionActivationListener接口的方法
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("JavaBean感知到自己随着session被活化了..触发此方法...");
}
// HttpSessionActivationListener接口的方法
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("JavaBean感知到自己随着session被钝化了..触发此方法..");
}
}