`

ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

 
阅读更多

 spring通过在web.xml 中配置ContextLoaderListener 来加载context配置文件,在DispatcherServlet中也可以来加载spring context配置文件,那么这两个有什么区别呢。

ContextLoaderListener中加载的context成功后,spring 将 applicationContext存放在ServletContext中key值为"org.springframework.web.context.WebApplicationContext.ROOT"的attribute中。(servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context));可以通过WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)或WebApplicationContextUtils.getWebApplicationContext(servletContext)方法来获取对应的applicationContext。

DispatcherServlet加载的context成功后,如果 publishContext属性的值设置为true的话(缺省为true) 会将applicationContext存放在org.springframework.web.servlet.FrameworkServlet.CONTEXT. + (servletName)的attribute中。

 

	<servlet>
		<servlet-name>mvcServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:/spring/config/applicationContextMVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

 

则对应的applicationContext的attribute key值为org.springframework.web.servlet.FrameworkServlet.CONTEXT.mvcServlet。

  在每次request请求时,DispatcherServlet会将此applicationContext存放在request中attribute值为 org.springframework.web.servlet.DispatcherServlet.CONTEXT中(request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE,getWebApplicationContext());)。可以通过 RequestContextUtils.getWebApplicationContext 或 WebApplicationContextUtils.getWebApplicationContext(servletContext,attrname)方法 来获取对应的applicationContext。

  从上面的分析可以看出,DispatcherServlet所加载的applicationContext可以认为是mvc私有的context,由于保存在servletContext中的key值与通过ContextLoaderListener加载进来的applicationContext使用的key值不相同,因此如果只使用DispatcherServlet加载context的话,如果程序中有地方使用WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext) 来试图获取applicationContext时,就会抛出"No WebApplicationContext found: no ContextLoaderListener registered?"的exception。

分享到:
评论

相关推荐

    DispatcherServlet 和 ContextLoaderListener 区别

    当Web应用启动时,ContextLoaderListener会读取Web-INF下的applicationContext.xml配置文件,创建并加载Spring容器。这个容器包含了所有的bean定义,包括服务层、数据访问层等组件。通过这种方式,...

    web.xml中ContextLoaderListener的运行过程解析

    `ContextLoaderListener`与`DispatcherServlet`的区别 `ContextLoaderListener`创建的是全局ApplicationContext,用于处理全局范围的Bean,而`DispatcherServlet`创建的是Servlet相关的ApplicationContext,主要...

    Spring-5.1.5源码

    4. **Spring MVC**:`ContextLoaderListener`初始化的ApplicationContext与Spring MVC的DispatcherServlet所使用的ApplicationContext不同。前者是全局的父上下文,而后者是用于处理HTTP请求的子上下文。两者之间...

    spring、springmvc、mybatis相结合的ssm框架整合实战及项目文件和原理解析

    - ContextLoaderListener会先加载`applicationContext.xml`,初始化Spring的ApplicationContext。 - 接着,DispatcherServlet加载`servlet-context.xml`,启动SpringMVC的配置。 - 当接收到HTTP请求时,...

    ssm框架基础配置文件web.xml模板springmvc.xml模板applicationContext.xml模板拿来即用

    在SSM框架中,web.xml主要配置DispatcherServlet(SpringMVC的前端控制器)、ContextLoaderListener(加载Spring的根应用上下文)和Filter(如字符编码过滤器)。 - DispatcherServlet配置:用于映射请求,一般...

    44 Spring控制器Controller如何设置AOP?慕课专栏1

    `ContextLoaderListener`负责创建全局的ApplicationContext,它作为应用的根上下文,通常用于存放与Web应用相关的全局配置和服务。而`DispatcherServlet`则创建自己的WebApplicationContext,主要用来管理控制器...

    配置DispatcherServlet的方法介绍

    "配置DispatcherServlet的方法介绍" DispatcherServlet是Spring MVC的前端控制器,是一个核心组件,负责处理HTTP请求和响应。在Spring MVC中,DispatcherServlet是一个centralized servlet,它处理所有的HTTP请求,...

    spring mvc 在 intellij 的 helloworld 基本配置

    ContextLoaderListener负责加载Spring配置文件,初始化Spring容器;DispatcherServlet负责请求分发。 - 配置DispatcherServlet:DispatcherServlet是Spring MVC的核心,需要在web.xml中指定Servlet名称和类路径,并...

    SpringMVC的配置以及一个简单的案列.doc

    - **Spring MVC配置**:这个文件是DispatcherServlet的特定ApplicationContext配置,包含关于Controller、ViewResolver、HandlerMapping等的配置。例如,定义Bean来处理HTTP请求,配置视图解析器以决定如何渲染结果...

    简单的SpringMVC+mybatis整合

    DispatcherServlet负责处理HTTP请求,而ContextLoaderListener则初始化Spring的ApplicationContext。 3. **配置Spring上下文**:创建Spring的配置文件(如`applicationContext.xml`),在此文件中定义Bean,包括...

    spring4的所有jar包+applicationContext.xml+web.xml

    此外,还可以配置Spring的ContextLoaderListener,该监听器会加载`applicationContext.xml`,使得Spring的IoC容器能够在Web应用启动时初始化。 4. **Spring4的新特性**: - **Java配置**:Spring4增强了对Java配置...

    Spring MVC 入门教程

    在这个文件中,我们配置了ContextLoaderListener来加载`applicationContext.xml`,CharacterEncodingFilter确保请求的字符编码为UTF-8,以及DispatcherServlet作为主要的请求处理器。 - **ContextLoaderListener**...

    Spring与Web环境集成1

    Spring提供了一个名为`ContextLoaderListener`的监听器,它自动加载配置文件,创建ApplicationContext,并将其存储到Servlet上下文(ServletContext)中。这样,我们可以通过`WebApplicationContextUtils`工具类的...

    spring mvc

    这是Spring MVC应用程序的入口点,用于配置Spring的ContextLoaderListener和DispatcherServlet。 1. `&lt;context-param&gt;` 和 `&lt;listener&gt;` 部分: - `&lt;context-param&gt;` 用于定义应用程序上下文的初始化参数,这里...

    maven+(springmvc,mybatis,struts2,hibernate)两两整合

    - 配置Web.xml:设置过滤器和监听器,例如Spring的ContextLoaderListener和DispatcherServlet。 - 配置Spring的ApplicationContext.xml:定义bean,包括数据源、事务管理器、DAO接口的实现类等。 - 配置MyBatis的...

    SpringMVC DispatcherServlet组件实现解析

    在 web.xml 文件中,我们可以使用 ContextLoaderListener 来初始化 Root WebApplicationContext,然后使用 DispatcherServlet 来初始化 Servlet WebApplicationContext。代码示例: ```xml &lt;listener-class&gt;org....

    SpringMVC+Mybatis+Maven项目搭建

    5. **配置web.xml**:这是Web应用的部署描述符,需要配置DispatcherServlet和监听器,例如ContextLoaderListener用于加载Spring的ApplicationContext。 6. **编写Controller**:创建SpringMVC的Controller类,这些...

    Spring live中文版

    - **Spring MVC 的配置**:通常需要配置 DispatcherServlet 和 ContextLoaderListener,以便正确加载上下文和初始化框架。 - **单元测试**:为了确保 Web 层的正确性和健壮性,可以为 Controller 编写单元测试,...

    springMVC教程

    - `listener`:`ContextLoaderListener` 监听器加载上下文配置文件,初始化 Spring 容器。 - `filter` 和 `filter-mapping`:字符编码过滤器 `CharacterEncodingFilter` 用于确保输入和输出数据的编码一致,这里...

    SSH集成开发宝典步骤

    首先,需要在`web.xml`中配置Spring的ContextLoaderListener和DispatcherServlet,启动Spring容器。然后,创建`applicationContext.xml`配置文件,定义Bean的实例化、装配和管理。Spring还能整合Struts2,通过`...

Global site tag (gtag.js) - Google Analytics