`

Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别

 
阅读更多
from:
http://blog.csdn.net/madun/article/details/8988860/


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中。

例如 web.xml中配置如下

Xml代码
<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。


补充:

from :http://blog.csdn.net/wym1581/article/details/46467185

ContextLoaderListener初始化的上下文:Bean,配置文件,针对dao,service
DispatcherServlet初始化的上下文加载的Bean是只对spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件
DispatcherServlet的容器继承ContextLoaderListener的容器webApplicationContext,这样做可以让dispatcherservlet中要使用的bean可以从webapplicationcontext中获得。
细说dispatcherservlet:
dispatcherServlet初始化的过程具体主要做了两件事:
1初始化spring mvc使用的web上下文,并且可能指定父类容器(contextloaderlistener的根上下文)
2初始化dispatcherservlet使用的策略,如handermapping handeradapter等
dispatcherservlet的默认配置文件:dispatcherservlet.properties,这个配置文件中有一些特殊的bean,这些bean不需要我们注册就可以启动,如果我们注册了这些bean,默认的bean就不会注册了
这个配置文件中特殊的bean列表:
controller
handlermapping(请求到处理器的映射,如果映射成功返回一个handlerexecutionchain对象)
handleradapter(把处理器包装为适配器,是适配器设计模式的应用 )
viewresolver(把逻辑视图名解析为具体的view,如internalresourceviewresolver将逻辑视图名映射为jsp视图)
localresolver(本地化解析,因为spring支持国际化,因此localresolver解析客户端的local信息从而方便进行国际化)
themeresolver(主题解析,通过它来实现一个页面多套风格)
multipartresolver(文件上传解析)
handlerexceptionresolver (处理器异常解析,可以将异常映射到相应的统一错误界面)
requesttoviewnametranslator(当处理器没有逻辑视图名时,自动将请求url映射为逻辑视图名)
flashmapmanager (用于管理flashmap的策略接口,flashmap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景)
分享到:
评论

相关推荐

    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请求的子上下文。两者之间...

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

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

    Spring mvc + Spring + Spring jdbc 整合 demo.rar

    - `web.xml`:配置Spring MVC的DispatcherServlet和ContextLoaderListener。 - `applicationContext.xml`:定义Spring容器的Bean,包括数据源、事务管理器、Service和DAO。 - `pom.xml`:Maven项目配置文件,包含...

    spring mvc 在 intellij 的 helloworld 基本配置

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

    spring springmvc mybatis框架整合需要的jar包

    最后,应用的启动入口通常是一个Servlet或Filter,例如Spring的ContextLoaderListener或DelegatingFilterProxy,它们负责初始化Spring容器,并在Web应用启动时加载配置。 总结起来,整合Spring、SpringMVC和MyBatis...

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

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

    spring MVC配置详解

    在 web.xml 文件中配置 ContextLoaderListener 和 contextConfigLocation,以便加载 Spring 的配置文件。 ```xml &lt;!-- Spring 配置 --&gt; org.springframework.web.context.ContextLoaderListener ...

    spring 与 servlet整合

    2. **Spring的Servlet监听器**:如ContextLoaderListener,用于初始化Spring的ApplicationContext,加载配置文件并管理bean。 3. **HandlerMapping**:负责将请求映射到相应的处理器,Spring MVC提供了多种映射策略...

    Spring与Web环境集成1

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

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

    `ContextLoaderListener`创建的ApplicationContext存储在`ServletContext`的一个属性中,键为`"org.springframework.web.context.WebApplicationContext.ROOT"`,而`DispatcherServlet`创建的WebApplicationContext...

    struts2和spring和hibernate整合所需包集合.rar

    2. **配置Spring**:同样在web.xml中配置Spring的DispatcherServlet,以及ContextLoaderListener,用于加载Spring应用上下文。 3. **配置Hibernate**:在Spring的配置文件(如applicationContext.xml)中配置...

    spring mvc

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

    Spring live中文版

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

    详解Spring mvc的web.xml配置说明

    当Web应用程序启动时,Tomcat或Jetty等容器会触发此监听器,进而加载Spring的配置信息,创建ApplicationContext,使得Spring框架能够接管应用程序的生命周期管理。 2. **过滤器(Filter)** 过滤器在HTTP请求和...

    SSM5最新版本所需所有jar包,集成logback,包含所有配置文件

    在SSM中,`web.xml`会配置Spring MVC的DispatcherServlet,设置其初始化参数,以及Spring的ContextLoaderListener,用于启动Spring的ApplicationContext。 `logback.xml`是Logback的日志配置文件,Logback是SLF4J...

    Mybatis与Spring JAVA My eclipse

    - **配置Web.xml**:在web.xml中配置Spring的DispatcherServlet,以及ContextLoaderListener,用于初始化Spring的ApplicationContext。 - **创建Spring配置文件**:如applicationContext.xml,配置数据源、...

    spring set

    `web.xml`是Java Web应用程序的部署描述符,通常用于配置Spring的DispatcherServlet、ContextLoaderListener等。在Spring MVC项目中,`web.xml`通常会包含以下内容: ```xml &lt;servlet-name&gt;dispatcher ...

    spring mvc demo

    同时,还需要配置Spring的ContextLoaderListener来加载Spring的ApplicationContext,管理所有bean。 2. **Controller**:在"spring mvc demo"中,你可以找到一个或多个Controller类,这些类使用@RequestMapping注解...

Global site tag (gtag.js) - Google Analytics