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);