使用ServletContextAttributeListener
当调用如下操作时,就会自动执行监听。
application.setAttribute("username","tom");
application.removeAttribute("username");
ServletContextAttributeListener用于监听ServletContext(application)范围内属性的变化,实现该接口的监听器需要实现如下三个方法。
attributeAdded(ServletContextAttributeEvent event):当程序把一个属性存入application范围时触发该方法。
attributeRemoved(ServletContextAttributeEvent event):当程序把一个属性从application范围删除时触发该方法。
attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法。
下面是一个监听ServletContext范围内属性改变的Listener。
@WebListener
public class MyServletContextAttributeListener
implements ServletContextAttributeListener
{
//当程序向application范围添加属性时触发该方法
public void attributeAdded(ServletContextAttributeEvent event)
{
ServletContext application = event.
getServletContext();
//获取添加的属性名和属性值
String name = event.getName();
Object value = event.getValue();
System.out.println(application + "范围内添加了名为"
+ name + ",值为" + value + "的属性!");
}
//当程序从application范围删除属性时触发该方法
public void attributeRemoved
(ServletContextAttributeEvent event)
{
ServletContext application = event.getServletContext();
//获取被删除的属性名和属性值
String name = event.getName();
Object value = event.getValue();
System.out.println(application + "范围内名为"
+ name + ",值为" + value + "的属性被删除了!");
}
//当application范围的属性被替换时触发该方法
public void attributeReplaced
(ServletContextAttributeEvent event)
{
ServletContext application = event.getServletContext();
//获取被替换的属性名和属性值
String name = event.getName();
Object value = event.getValue();
System.out.println(application + "范围内名为"
+ name + ",值为" + value + "的属性被替换了!");
}
}
上面的ServletContextAttributeListener使用了@WebListener Annotation修饰,这就是向Web应用中注册了该Listener,该Listener实现了attributeAdded、 attributeRemoved、attributeReplaced方法,因此当application范围内的属性被添加、删除、替换时,这些对应 的监听器方法将会被触发。