1、Listener
- 是由Java编写的WEB组件,主要完成对内置对象状态的变化 (创建、销毁)和属性的变化 进行监听,做进一步的处理
- 作用:主要对session和application内置对象监听。
2、对application监听
package cn.mldn.lxh.listener ;
import javax.servlet.* ;public class ServletContextDemoimplements ServletContextListener,ServletContextAttributeListener
{private ServletContext application = null ;// 实现方法public void contextInitialized(ServletContextEvent sce){this.application = sce.getServletContext() ;System.out.println("** 上下文初始化 ...") ;System.out.println("** 当前虚拟目录的绝对路径:"+this.application.getRealPath("/")) ;}public void contextDestroyed(ServletContextEvent sce){System.out.println("** 上下文销毁 ...") ;}public void attributeAdded(ServletContextAttributeEvent scab){System.out.println("** 增加属性:"+scab.getName()+" --> "+scab.getValue()) ;}public void attributeRemoved(ServletContextAttributeEvent scab){System.out.println("** 删除属性:"+scab.getName()+" --> "+scab.getValue()) ;}public void attributeReplaced(ServletContextAttributeEvent scab){System.out.println("** 替换属性:"+scab.getName()+" --> "+scab.getValue()) ;}
};/*<listener><listener-class>cn.mldn.lxh.listener.ServletContextDemo</listener-class></listener>
*/
1、语法 :
- 是WEB组件,一定要有包声明 package cn.mldn.lxh.listener ;
- 包导入 javax.servlet
- 实现接口 ServletContextListener ,ServletContextAttributeListener
- 实现接口的方法
2、实现方法
实现的两个接口,一个是为了实现对application状态监听的方法,一个是为了实现对applciation属性的变化监听的方法。如下:
- 对applicaiton的状态做监听 implements ServletContextListener ,实现两个方法:
public void contextInitialized(ServletContextEvent sce);
tomcat一启动,先创建出监听器,对application的创建和销毁做监听。当application一创建,被监听器监听到,就调用contextInitialized()方法;
public void contextDestroyed(ServletContextEvent sce);
当application一销毁,监听器就会监听到applicaiton销毁,调用contextDestoryed();
- 对applicaiton里属性的变化做监听 , implements ServletContextAttributeListener
public void attributeAdded(ServletContextAttributeEvent scab)public void attributeRemoved(ServletContextAttributeEvent scab)public void attributeReplaced(ServletContextAttributeEvent scab)
通过实现ServletContextAttributeListener 的三个方法,对applcation的属性变化做监听。注意:监听到的都是已经完成的变化 。比如往application里设值属性、删除属性、替换属性值等,这些都会被监听器监听到。可以通过方法获得增加的属性名和属性值,获得删除的属性名和属性值,获得替换的属性名和替换前的属性值(是被替换的,而不是替换后的值)
3、Tomcat一启动,创建了哪些内置对象?
- tomcat一启动,首先会创建监听器,去监听内置对象的状态和属性变化。
- 然后会创建Config对象,来收集配置文件中的初始参数,一共有会创建两个Config对象,分别是封装Servlet初始参数的ServletConfig,封装Filter初始参数的FilterConfig。
- 然后会创建applicaiton对象
- 然后创建Filter
- 如果配了loadonstartup,就再创建servlet。
3、对session做监听
package cn.mldn.lxh.listener ;import javax.servlet.http.* ;public class HttpSessionDemo implements HttpSessionListener,HttpSessionAttributeListener
{private HttpSession session ;// 实现方法public void sessionCreated(HttpSessionEvent se){this.session = se.getSession() ;System.out.println("** Session 创建 ....") ;System.out.println("** SessionID --> "+this.session.getId()) ;}public void sessionDestroyed(HttpSessionEvent se){System.out.println("** Session 销毁 ....") ;}public void attributeAdded(HttpSessionBindingEvent se){System.out.println("** Session 增加属性:"+se.getName()+" --> "+se.getValue()) ;System.out.println("** 获得Session "+se.getSession().getId()) ;}public void attributeRemoved(HttpSessionBindingEvent se){System.out.println("** Session 删除属性:"+se.getName()+" --> "+se.getValue()) ;}public void attributeReplaced(HttpSessionBindingEvent se){System.out.println("** Session 替换属性:"+se.getName()+" --> "+se.getValue()) ;}
};
/*<listener><listener-class>cn.mldn.lxh.listener.HttpSessionDemo</listener-class></listener>
*/
- 包声明
- 包导入
- 类声明,实现 HttpSessionListener接口,实现对状态监听的方法
- 实现HttpSessionAttributeListener接口,实现对属性变化监听的方法
什么时候创建session?
我们可以通过public void sessionCreated(HttpSessionEvent se) 来监听session的创建
- 访问服务器不会
- 访问静态组件不会(html)
- 只有访问动态组件(jsp),才会创建请求—第一次发送请求