WebApplicationContext

在Web应用中,我们会用到WebApplicationContext  用它来保存上下文信息

那么它set到ServletContext的过程是怎么样呢

1)通过WEB.XML中监听类

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco }
span.s1 { color: #009193 }
span.s2 { color: #4e9192 }

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco }

触发contextInitialized方法

再来看


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

    public WebApplicationContext initWebApplicationContext(ServletContext servletContext) {

        if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {

            throw new IllegalStateException(

                    "Cannot initialize context because there is already a root application context present - " +

                    "check whether you have multiple ContextLoader* definitions in your web.xml!");

        }

        Log logger = LogFactory.getLog(ContextLoader.class);

        servletContext.log("Initializing Spring root WebApplicationContext");

        if (logger.isInfoEnabled()) {

            logger.info("Root WebApplicationContext: initialization started");

        }

        long startTime = System.currentTimeMillis();

        try {

            // Store context in local instance variable, to guarantee that

            // it is available on ServletContext shutdown.

            if (this.context == null) {

                this.context = createWebApplicationContext(servletContext);

            }

最后一行,又调用了createWebApplicationContext方法,我们再来看一下这个方法的代码:


1

2

3

4

5

6

7

8

    protected WebApplicationContext createWebApplicationContext(ServletContext sc) {

        Class<?> contextClass = determineContextClass(sc);

        if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {

            throw new ApplicationContextException("Custom context class [" + contextClass.getName() +

                    "] is not of type [" + ConfigurableWebApplicationContext.class.getName() + "]");

        }

        return (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass);

    }

通过代码可知,在这里返回了一个ConfigurableWebApplicationContext,再来看一下contextLoader的initWebApplicationContext方法中最关键的代码:


1

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

在这里把context存入servletContext中,所以以后要用到WebApplicationContext的时候可以从servletContext取出。

时间: 2024-12-28 13:55:37

WebApplicationContext的相关文章

springMVC加载webApplicationContext源码解析

web.xml的节点listener配置了ContextLoaderListener类,这个类继承了ServeltContextListener,所以这个类是随容器的启动而调用方法contextInitialized public void contextInitialized(ServletContextEvent event) { this.contextLoader = createContextLoader(); if (this.contextLoader == null) { thi

扯谈spring mvc之WebApplicationContext的继承关系

spring mvc里的root/child WebApplicationContext的继承关系 在传统的spring mvc程序里会有两个WebApplicationContext,一个是parent,从applicationContext.xml里加载的,一个是child,从servlet-context.xml里加载的. 两者是继承关系,child WebApplicationContext 可以通过getParent()函数获取到root WebApplicationContext.

有关webapplicationcontext的初始化

ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应用的容器”了:在Web应用中,我们会用到WebApplicationContext,WebApplicationContext继承自ApplicationContext:WebApplicationContext的初始化方式和BeanFactory.ApplicationContext有所区别,因为WebApplica

Spring学习笔记2——web项目初始化webapplicationcontext

1.新建web项目来加载spring webapplicationcontext是专门为web应用准备,它允许从相对于web根目录的路径中装载配置文件,完成初始化操作.从webapplicationcontext中可以获得servletcontext的引用. 2.webapplicationcontext的初始化 通过配置自启动的servlet或web容器监听器 方式一:配置自启动的servlet <!-- 声明自动启动的servlet --> <servlet> <serv

No WebApplicationContext found: no ContextLoaderLi

记录一下自己解决tomcat部署遇得到问题的全过程 首先,在tomcat部署上面部署项目时,报如下错误: 严重: Error listenerStart 2014-7-24 14:25:44 org.apache.catalina.core.StandardContext start 严重: Context [/filemanager] startup failed due to previous errors 查了查说是版本问题,将WEB-INF下的web.xml中的 <listener>

No WebApplicationContext found: no ContextLoaderListener registered?报错解决

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">   今天跑了下新搭的一个SSI框架.报如下错误:</span> <span style="font-size:18px;">严重: Exception sending context initialized event to listener

tomcat启动停止在 Initializing Spring root WebApplicationContext,就不运行了

启动项目的时候,项目一直运行到 Initializing Spring root WebApplicationContext,就停止不运行了,也不报错,开始真的很苦恼,后来把log日志的模式改为 debugg模式,就可以看到报错的原因, 在网上百度了一些信息,大多看不懂,好多是大数据的错误,后来自己琢磨,发现是zookeeper注册中心没有开启,汗(⊙﹏⊙)b,开启zookeeper,就可以完美运行啦. tomcat启动停止,卡死,大概是连接不上一些服务,比如数据库啊,服务器啊,什么的,

Spring中WebApplicationContext的研究

ApplicationContext是Spring的核 心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应用的容器” 了:P,Spring把Bean放在这个容器中,在需要的时候,用getBean方法取出,虽然我没有看过这一部分的源代码,但我想它应该是一个类似 Map的结构.在Web应用中,我们会用到WebApplicationContext,WebApplicationContext继承自 ApplicationCont

上下文——webApplicationContext 与servletContext

1.WebApplicationContext的研究 ApplicationContext是spring的核心,Context通常解释为上下文环境,用"容器"来表述更容易理解一些,ApplicationContext则是"应用的容器了"了. spring把bean放在这个容器中,在需要的时候,用getBean()方法取出,在web应用中,会用到webApplicationContext,继承自ApplicationContext 在web.xml初始化WebAppl