监听器:javaweb中监听器比较常用, 将它与事件源头绑定在一起就可以通过事件对象在事件源和监听器之间传递信息了。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
javaweb中的有三种不同的监听类,分别对应三个不同的域:
下面三个接口是各个域创建销毁的时候将调用其对应的方法
ServletContext域:ServletContextListener接口
ServletRequet域:ServletRequestListener接口
session域: httpSessionListener接口
当三个域中的属性发生变化时,可以实现下面三个接口监听:
ServletContextAttributeListener接口
ServletRerquestAttributeListener接口
HttpSessionAttributeListener接口
只需要根据需求实现上述不同接口,让后在web.xml文件中配置监听器就可以是实现不同的监听器了
另外,对于session域有点不同,它还有 HttpSessionActivationListener 和 HttpSessionBindingListener 接口
这两个接口也叫session感知型接口,
HttpSessionBindingListener 接口:任何类实现了此接口,不仅可以感知自己本身是否被加入了session域中,还可以感知自己在session中的状态(是否被置换,是否被移除).
httpSessionActivaction 接口: 此接口是当被活化和钝化的时候被执行(活化:从硬盘加载到内存中,钝化:从内存移到硬盘中)。
看实例:
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/*
* 编写ServletContext域的监听器需要实现ServletContextListener接口
*
*/
public class MyServletContextListener implements ServletContextListener,ServletContextAttributeListener{
//当servletcontext对象被清除的时候,此方法会被执行
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("监听初始化事件:"+arg0);
System.out.println("ServletContext对象被销毁了");
}
//当servletContext对象被服务器创建的时候,此方法会被执行
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("监听初始化事件:"+arg0);
System.out.println("ServletContext对象被创建了");
}
/*
*
* 实现ServletContextAttributeListener接口,可以监听当ServletContext对象中的属性改变时引起相应方法的调用
*
*/
@Override
public void attributeAdded(ServletContextAttributeEvent arg0) {