web容器ServletContext

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>

  1. 讀取配置文件web.xml
  2. 創建ServletContext
  3. 將配置文件中的參數設置到ServletContext上下文中
  4. 創建監聽器執行初始化方法或銷燬方法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章