监听器
四个范围对象:PageContext、request、session、application
监听器监听的对象主要是后三个:request、session、application
三个监听对象有各自的一个初始化销毁操作监听器接口:
request:ServletRequestListener
session:HttpSessionListener
application:ServletContextListener
监听对象的创建和销毁
每个监听器各自提供了两个方法:监听开始和监听结束
public class ContextSessionRequestListner implements ServletRequestListener,HttpSessionListener,ServletContextListener{
public void contextDestroyed(ServletContextEvent sce) { //方法参数即监听对象
//application(ServletContext)-创建(创建完毕后触发)
System.out.println("销毁-application:"+sce);
}
public void contextInitialized(ServletContextEvent sce) {
//application(ServletContext)-销毁
System.out.println("创建-application:"+sce);
}
public void sessionCreated(HttpSessionEvent se) {
//session
System.out.println("创建-session:"+se);
}
public void sessionDestroyed(HttpSessionEvent se) {
//session
System.out.println("销毁-session:"+se);
}
public void requestDestroyed(ServletRequestEvent sre) {
//request
System.out.println("销毁-request:"+sre);
}
public void requestInitialized(ServletRequestEvent sre) {
//request
System.out.println("创建-request:"+sre);
}
监听器配置
<!--配置监听器路径-->
<listener>
<listener-class>my.student.listner.ContextSessionRequestListner</listener-class>
</listener>
ServletContextListener在servlet容器启动时自动创建,在容器关闭时自动销毁
监听对象中属性的变更
监听属性变更的接口:
request:ServletRequestAttributeListener
session:HTTPSessionAttributeListener
application:ServletContextAttributListener
编写接口
public class ContextSessionRequestAttributeListener implements ServletContextAttributeListener,
HttpSessionAttributeListener,ServletRequestAttributeListener{
public void attributeAdded(ServletRequestAttributeEvent arg0) {
String attrName=arg0.getName(); //目前正在操作的属性名
String attrValue=(String)arg0.getServletRequest().getAttribute(attrName);
System.out.println("request【增加】属性:属性名="+attrName+"\t"+"属性值="+attrValue);
}
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("request【删除】属性:属性名="+arg0.getName());
}
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
//替换:第一次对某属性进行操作为新增,第二次成为替换
String attrName=arg0.getName();
Object attrvalue=arg0.getServletRequest().getAttribute(attrName);
System.out.println("request【替换】属性:"+attrName+"\t"+"属性值="+attrvalue);
}
public void attributeAdded(HttpSessionBindingEvent se) {
String attrName=se.getName(); //目前正在操作的属性名
String attrValue=(String)se.getSession().getAttribute(attrName);
System.out.println("session【增加】属性:属性名="+attrName+"\t"+"属性值="+attrValue);
}
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session【删除】属性:属性名="+se.getName());
}
public void attributeReplaced(HttpSessionBindingEvent se) {
String attrName=se.getName();
Object attrvalue=se.getSession().getAttribute(attrName);
System.out.println("request【替换】属性:属性名="+attrName+"\t"+"属性值="+attrvalue);
}
public void attributeAdded(ServletContextAttributeEvent scab) {
String attrName=scab.getName(); //目前正在操作的属性名
String attrValue=(String)scab.getServletContext().getAttribute(attrName);
System.out.println("application【增加】属性:属性名="+attrName+"\t"+"属性值="+attrValue);
}
public void attributeRemoved(ServletContextAttributeEvent scab) {
System.out.println("application【删除】属性:属性名="+scab.getName());
}
public void attributeReplaced(ServletContextAttributeEvent scab) {
String attrName=scab.getName();
Object attrvalue=scab.getServletContext().getAttribute(attrName);
System.out.println("application【替换】属性:"+attrName+"\t"+"属性值="+attrvalue);
}
}
测试jsp
<%
//ServletContext=application
application.setAttribute("name","ZhangSan"); //增加application属性
application.setAttribute("name","LiSi"); //替换application属性
application.removeAttribute("name"); //移除
session.setAttribute("user","user01");
application.setAttribute("user","user02");
session.removeAttribute("user");
request.setAttribute("pwd", "123456");
request.setAttribute("pwd", "abcdef");
request.removeAttribute("pwd");
%>
配置监听器
<listener>
<listener-class>my.student.listner.ContextSessionRequestAttributeListener</listener-class>
</listener>
监听器配置步骤总结
1、添加初始化销毁监听器类,配置初始化销毁监听器接口,重写方法
2、添加属性变更监听器类,配置属性变更监听器接口,重写方法
3、在web.xml中对配置两个监听器