contextloaderlistener
ServletcontextListener 生命周期
昨用:
监听 ServletContext 对象被创建或销毁的 Servlet 监听器,
在当前 WEB 应用被加载时对当前 WEB 应用的相关资源进行初始化操作:
配置:
在web.xml中进行配置:
<listener>
<listener-class>com.java.javaweb.test.HelloServletContextListener</listener-class>
</listener>
生命周期:
contextInitialized: 在容器启动时被调用(在servlet被实例化前执行)
contextDestroyed: 在容器销毁时调用(在servlet被销毁后执行)
首先contextloaderlistener接口是一个ServletContextListener
ContextLoaderListener
接口定义如下
public class ContextLoaderListener extends ContextLoader implements ServletContextListener {
public ContextLoaderListener(WebAPPlicationContext context) {
super(context);
}
@Override
public void contextInitialized(ServletContextEvent event) {
initwebapplicationContext(event.getServletContext());
}
@Override
public void contextDestroyed(ServletContextEvent event) {
closeWebApplicationContext(event.getServletContext());
ContextCleanupListener.cleanupAttributes(event.getServletContext());
}
}
名词解释:
1.serveltContext:
存储当前Web程序的上下文信息, 每个Engine有多个war包, 每个war包就是一个web应用程序, 每个web应用程序只有一个Context上下文,这就是servletContext.
每个servletcontext下可以有多个servlet, 每个servlet需要有配置url映射. 每个servlet需要被包装为
Standardwrapper
类, 存储到servletcontext容器中.ServletContext 对象是一个为整个 web 应用提供共享的内存,多个servlet实例见可以通过context进行通信.
ServletContext
在tomcat中对应的类是ApplicationContext
.
2.serveltConfig:
在tomcat中, ApplicationContext的装饰类
ApplicationContextFacade
即为config,
3.XmlWebApplicationContextSpring
在Spring 中,
ContextLoaderListener
监听器初始化的时候被创建, 并存入其静态属性ContextLoaderListener.currentContext属性中. 其是整个spring框架执行的基础, 内部包含IOC容器, 关联Servlet上线文等信息
4.DefaultListableBeanFactory
Spring的核心模块,其就是IOC容器.
5.StandardContext
存在于Tomcat中, 是Host的子容器,是Web程序运行的所有servlet的容器, 管理整个web程序的生命周期.
ContextLoaderListener的启动过程:
ContextLoaderListener实现了ServletContextListener接口,ServletContextListener是Java EE标准接口之一,
类似tomcat,jetty的java容器启动时便会触发该接口的contextInitialized。
下面以Tomcat容器为例:
Tomcat最后一级容器为StandardContext, 在此容器中完成Listener监视器的实例化和初始化, 然后完成filter的初始化, 接着是所有配置load on start标签的servlet的实例化和初始化.
在ContextLoaderListener监视器初始化时首先调用方法.contextInitialized(), 该方法的参数是ServletContextEvent类型,该类包含真是的ServletContext对象.
1 所以第一步是启动方法 org.springframework.web.context.ContextLoaderListener#contextInitialized
,注意传递进来的事件ServletContextEvent,
2.调用org.springframework.web.context.ContextLoader#initWebApplicationContext
初始化监听器
3.org.springframework.web.context.ContextLoader#createWebApplicationContext(javax.servlet.ServletContext)
实例化XmlWebApplicationContext, 并赋值给ContextLoaderListener.context属性
4.调用configureAndRefreshWebApplicationContext方法
4.1 将SevletContext对象赋值给xmlWebApplication.servletContext属性
5.调用XmlWebApplicationContext.refresh方法, 重新载入所有bean
6.挡圈创建的webapplication保存到serletContext属性中,键值名为:.ROOT
6.记录XmlWebApplicationContext到静态属性 ContextLoaderListener.currentContext属性中, 这样全局webapplicationcontext就被永久记录下来了
7.xmlwebApplicationContext被以键值”org.springframework.web.context.WebApplicationContext.ROOT”存储在servletCotext属性中.
时间轴:
相关阅读
1、开启php.ini 配置文件中的:extension=php_curl.dll2、如果开启扩展后仍然无法初始化找到php目录下:libeay32.dllssleay32.dllphp
关于模块的初始化网上讲解的有很多,但是有些讲的不是特别全面,有些讲的不是特别的深入,所以我在博客上找了一些可以供参考的,给大家同
1.静态初始化 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。 例
在给新同事培训Spring MVC时,有人问:可以不配置ContextLoaderListener吗所谓ContextLoaderListener,就是在web部署描述符即web.xml里
初始化 ManagementObjectSearcher 类的一个新实例,它用
using System; using System.Management; public class Sample { public static void Main(string[] args) {