【Listener机制】ServletContextListener

来源:互联网 发布:淘宝卖家店铺已过期 编辑:程序博客网 时间:2024/05/16 15:38

       ServletContextListener是对ServeltContext的一个监听,主要监听关于ServletContext的两个事件,即初始化和销毁。

【原理】

        ServletContextListener对应的是application范围。Servlet一旦被创建,ServletContext也同时被创建了,同时ServletContextListener也监听到了,随即将自己要监听的相关信息设置在ServletContext中,所以listener的执行时间比servlet更早。    

        Web容器先解析web.xml,获取listener的值。通过反射生成对象放进缓存,然后创建ServletContext对象和servletContextEvent对象,然后再调用ServletContextListenercontextInitialized方法,在方法里面调用event.getServletContext()可以获取ServletContext,ServeltContext是全局对象,其中的数据供所有的应用程序共享,进行一些业务的初始化。

PS: JSP,使用application.getAttribute();Servlet,使用 getServletContext().getAttribute())

       Web容器关闭,ServeltContextListener就会调用contextDestroyed。

 【代码实现】

1.新建一个类,实现servletCOntextListener接口,以及它的两个函数。

2.在web.xml配置文件中配置监听器

Web.xml配置:

<listener><listener-class>com.bjpowernode.drp.util.listener.InitListener</listener-class></listener> 

监听类代码:

import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import com.bjpowernode.drp.util.BeanFactory;import com.bjpowernode.drp.util.Constants;/** * 采用ServletContextListener完成初始化 *  * @author Administrator *  */public class InitListener implements ServletContextListener {/** * 从tomcat中移除 */public void contextDestroyed(ServletContextEvent sce) {}public void contextInitialized(ServletContextEvent sce) {System.out.println("InitListener.init()");System.out.println("创建系统的BeanFactory...");// 将抽象工厂放到ServletContext中BeanFactory beanFactory = BeanFactory.getInstance();sce.getServletContext().setAttribute("beanFactory", beanFactory);// 加入常量,根据业务进行的初始化处理sce.getServletContext().setAttribute("add", Constants.ADD);sce.getServletContext().setAttribute("del", Constants.DEL);sce.getServletContext().setAttribute("modify", Constants.MODIFY);sce.getServletContext().setAttribute("showAdd", Constants.SHOW_ADD);sce.getServletContext().setAttribute("audit", Constants.AUDIT);}}


0 0
原创粉丝点击