一、三种监听器
1.在WEB中可以对application、session、request三种操作进行监听
Servlet监听器分为三种:
1).ServletContext监听器(容器监听器);
2).HttpSession监听器(会话监听器);
3).ServletRequest(请求监听器)
2.Servlet监听器的配置方式
方式一:在监听器类上进行注解配置:@WebListener ;
方式二:web.xml中配置:
<listener>
<listener-class>监听器路径</listener-class>
</listener>
3.ServletContext监听器
1).对Web容器状态(生命周期)的监听
实现ServletContextListener接口,覆写相关方法。 注:ServletContextEvent代表容器状态的事件,里面有个getServletContext()方法;
举个例子如下:
//写一个容器监听器监听application对象在JSP页面创建属性时是否能成功检测到属性的创建,这里只给出监听器部分的代码,application属性的设置只在JSP页面中
package com.afanti.application;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ContextAttributeListener implements ServletContextAttributeListener{
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
String name=event.getName(); //获取属性名
Object value=(Object)event.getValue(); //获取属性值
System.out.println("属性值(add)添加了属性值name值为:"+name+"value值为:"+value);
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
String name=event.getName();
Object value=(Object)event.getValue();
System.out.println("属性值(remove)添加了属性值name值为:"+name+"value值为:"+value);
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
String name=event.getName();
Object value=(Object)event.getValue();
System.out.println("属性值(replace)添加了属性值name值为:"+name+"value值为:"+value);
}
}
先访问设置属性的页面,该监听器能成功监听到设置属性了并能获取属性名及属性值,再次访问就是替换属性,访问移除属性值也能监听到,后台打印结果如下: