2.10.3 使用ServletContextAttributeListener

2.10.3 使用ServletContextAttributeListener

ServletContextAttributeListener

ServletContextAttributeListener用于监听ServletContext (application)`范围内属性的变化,实现该接口的监听器需要实现如下三个方法。

  • attributeAdded(ServletContextAttributeEvent event):当程序把一个属性存入application范围时触发该方法。
  • attributeRemoved(ServletContextAttributeEvent event):当程序把一个属性从application范围删除时触发该方法。
  • attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法。

MyServletContextAttributeListener.java

下面是一个监听ServletContext范围内属性改变的Listener

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package lee;

import javax.servlet.*;
import javax.servlet.annotation.*;

@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 + "的属性被替换了!");
}
}

@WebListener注解 注册Listener

上面的ServletcontextListener使用了@WebListener注解修饰,这就是向Web应用中注册了该Listener,该Listener实现了attributeAddedattributeRemovedattributeReplaced方法,因此当application范围内的属性被添加、删除、替换时,这些对应的监听器方法将会被触发。