什么是监听器
监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件,它还可以监听域对象的属性发生修改的事件,可以在事件发生前或者发生后做一些必要的处理。
在Servlet中要创建监听器类首先需要新建一个类并继承相应的监听器接口,实现接口中定义的方法,然后在web.xml文件中注册相应的监听器即可。如果一个web.xml文件中注册了多个监听器,则监听器的启动顺序按照在web.xml中的注册顺序启动。如果一个web.xml文件中同时定义了监听器、过滤器和Servlet,那么web容器会先加载监听器、再加载过滤器最后加载Servlet。
对WEB中的操作进行监听(在web中可以对application、session和request三种操作进行监听)
1. 对 application 进行监听 ( 修改的时候不要直接拿值,通过 servletContext 去拿值)
n 创建监听类 (注意介绍一下 ServletContextEvent )
@WebListener
public class ListenerDemo implements ServletContextListener {
public void contextDestroyed ( ServletContextEvent arg0) {
System. out .println ("application 挂了!!! ");
}
public void contextInitialized ( ServletContextEvent arg0) {
System. out .println ("application 初始化了!!! ");
}
}
)
注册:
<listener>
<listener-class> cn.web.listener.ListenerDemo </listener-class>
</listener>
监听application的属性
创建监听类
public class ListenerAbttriDemo implements ServletContextAttributeListener {
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("增加属性:"+arg0.getName()+"="+arg0.getValue());
//System.out.println("增加属性:");
}
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("删除属性:"+arg0.getName()+"="+arg0.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("修改属性:"+arg0.getName()+"="+arg0.getValue());
}
}
注册:
<listener>
<listener-class>cn.web.listener.ListenerAbttriDemo</listener-class>
</listener>
修改增加、修改和删除属性的操作:
<%
this.getServletContext().setAttribute("name","haoren");
this.getServletContext().setAttribute("name","haoren");
this.getServletContext().removeAttribute("name");
%>
对session的监听
HttpSessionListener
HttpSessionAttributeListener
HttpSessionBindingListener (不用注册)
对request的监听
ServletRequestAttributeListener
ServletRequestListener
Web.xml的书写的顺序:过滤器、监听器、servlet