ServletContext
启动web容器流程:
<context-param>
<param-name>key</param-name>
<param-value>value123</param-value>
</context-param>
<listener>
<listener-class>com.brolanda.contextlistener.listener.ContextListenerTest</listener-class>
</listener>
- 读取配置文件web.xml
- 创建ServletContext
- 将配置文件中的参数设置到ServletContext上下文中
- 创建监听器执行初始化方法或销毁方法
web项目并没有启动完,配置的监听器或者Servlet会可以继续创建子容器
package com.brolanda.contextlistener.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextListenerTest implements ServletContextListener {
public void contextDestroyed(ServletContextEvent event) {
System.out.println("*************destroy ContextListener*************");
}
@SuppressWarnings("unused")
public void contextInitialized(ServletContextEvent event) {
System.out.println("*************init ContextListener*************");
ServletContext servletContext = event.getServletContext();
System.out.println("key:"+servletContext.getInitParameter("key"));
}
}
Spring web上下文配置
Spring通过ContextLoaderListener初始化WebApplicationContext上下文,并将参数设置到ServletContext中
- ContextLoaderListener
这个监听器通过读取容器配置文件初始化并创建容器;指定配置文件的的地址和文件名称如下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-INF/jason-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
监听器默认读取WEB-INF下面的appilicationContext.xml,也可以通过contextParam配置文件修改路径.ContextLoaderListener便会创建WebAppllicationContext,并设置参数到ServletContext.
总结:
Servlet启动, 创建ServletContext;
容器创建web.xml中的Listener的实例,ServletContextListener实现类—ContextLoaderListener,初始化WebApplicationContext上下文环境(IoC容器),将context-param中的参数设置到ServletContext;
容器创建web.xml中配置的Servlet(比如SprinMvc的DispatchServlet),为其创建自己的ServletContext,并将WebApplicationContext设置为父容器(可以配置多个Servlet);