一丶 启动Web容器创建ServletContext
在ServletAPI中, 有一个ServletContextListener接口, 这个接口能够监控ServletContext的声明周期, 实际就是监控整个Web容器的生命周期,当Servlet容器启动或者终止Web应用程序的时候,都会触发一个ServletContextEvent事件(该事件中包含一个ServletContext), 事件会被Servlet-ContextListener处理, 涉及到的两个方法:
1.contextInitialized(ServletContextEvent event)当Servlet容器启动Web应用时会调用该方法,调用完该方法后会进行
Filter初始化, 然后对Servlet进行初始化
2.contextDestroyed(ServletContextEvent event) 当Servlet容器关闭Web应用是会调用该方法,并销毁之前创建的Filter和Servlet
1. Servlet容器启动时会将读取到context-param 然后以键值对的形式存储到ServletContext中
2.然后触发ContextLoaderListener中的initWebApplicationContext方法并传入一个ServletContextEvent事件
然后从传入的事件中获取到ServletContext,调用initWebApplicationContext方法初始化WebApplicationContext, 相信到这里
就很熟悉了吧.
1. 当Servlet容器启动Web应用时, 会首先去查看web.xml中的两个节点<context-param>和<listener>public void contextInitialized(ServletContextEvent event) { initWebApplicationContext(event.getServletContext()); }
总结一下上述流程:
2.紧接着, Servlet容器会创建一个ServletContext, 在该应用内全局共享.
3. 然后Servlet容器会将<context-param>以键值对的形式存放到ServletContext中
4.Servlet容器会创建<listener>中的实例对象, 该类必须继承ServletContextListener接口.
5.调用Listener实例对象中的contextInitialized方法, 并从传入的Event中获取到ServletContext.从此开始, 才进入到Spring上下文创建.
二丶 Spring上下文创建
<!--Spring引用上下文, 理解层次化的ApplicationContext(设置跟上下文配置文件位置)-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/configs/spring/applicationContext*.xml</param-value>
</context-param>
<!--
注册一个ContextLoaderListener
当Web容器启动时自动装配ApplicationContext中的配置信息
-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>