`

Spring 一些标签的作用,ContextLoaderListener和DispatcherServlet两者的配置文件的区别(转)

 
阅读更多

本文将这样展开: 
1. 简单讲解Spring中的<context:component-scan /> <context:annotation-config />  
<mvc:annotation-driven /> 这三者的作用 
2. 讲解下我们经常看到的在web.xml文件中定义的ContextLoaderListener和DispatcherServlet的区别 

<context:annotation-config /> 
这个标签告诉Spring到bean类中寻找一些annotation定义的类, 
这些annotation基本如下: 
@Autowired  @PostConstruct  @PreDestroy  @Resource 等。 
需要注意的是。这个标签并没有激活@Transactional 和 @TransactionAttribute 

<context:component-scan base-package=""/> 
这个标签用于告诉Spring搜索我们指定的包下面以及一些需要被自动注入的bean。 
默认支持的annotation:@Component @Repository  @Service @Controller 
需要注意的是:这个标签页实现了和annotation-config同样的效果。 

<mvc:annotation-driven /> 
刚开始的时候我也很困惑为什么需要配置这个标签,但是当我们在配置SpringMVC的控制器的时候,我们发现有RequestMapping的存在,这个标签的作用之一就是告诉Spring去检测RequestMapping。其他的作用如下: 
- 激活@ExceptionHandler这个annotation 
- 配置了这个标签还可以将RequestMappingHandlerAdapter注册到Spring中 
- 是SpringMVC提供默认的类型转化,因为我们没有在<mvc:annotation-driven/> 的属性中配置ConversionService 
- 当然,这个标签还起到了一些其他的作用,我不怎么会翻译,怕变味。下面是英文原文: 

It also enables the following: 
1. Spring 3 style type conversion through a ConversionService instance in addition to the JavaBean PropertyEditors used for Data Binding. 
2. Support for formatting Number fields using the @NumberFormat annotation through the ConversionService 
3. Support for formatting Data,Calendar,Long and Joda Time fields using the @DateTimeFormat annotation, if Joda Time 1.3 or higher is present on the classpath. 
4. Support for validating @Controller inputs with @Valid if a JSR-303 Provider is present on the classpath. 
5. HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values form @RequestMapping or @ExceptionHandler methods.
 

2.  下面是讲解web.xml配置是ContextLoaderListener和DispatcherServlet的区别: 
- ContextLoaderListener是在我们的web容器启动的时候启动的,默认会加载/WEB-INF/下面的applicationContext.xml文件。并创建一个WebApplicationContext容器。 
- DispatcherServlet是在我们第一次访问我们的应用的时候创建的。这时候它默认会将配置在/WEB-INF下面的<servlet-name>-servlet.xml配置文件,然后也创建一个WebApplicationContext。这个WebApplicationContext将之前ContextLoaderListener创建的容器作为父容器,因此在父容器中配置的所有Bean都能够被注入到子容器中。
 

 

 

转载自:http://yimengzhu.iteye.com/blog/1599441

 

 

 

另转http://blog.163.com/sir_876/blog/static/11705223201111544523333/:

 

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。

分享到:
评论

相关推荐

    DispatcherServlet 和 ContextLoaderListener 区别

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

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

    2. **Spring 框架**:Spring的核心是IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),它允许开发者通过配置文件或注解来管理对象的生命周期和依赖关系。AOP(Aspect-Oriented ...

    spring 与 servlet整合

    在Java Web开发中,Spring框架和Servlet是两个重要的组件,它们在构建现代应用程序时起着核心作用。Spring是一个全面的企业级应用框架,提供了依赖注入、面向切面编程、数据访问、事务管理等功能,而Servlet是Java ...

    Spring mvc整合mybatis例子

    在Spring配置文件中引入MyBatis的配置,例如`mybatis-config.xml`,并配置SqlSessionFactoryBean,指定MyBatis的配置文件和数据源。 - **配置MyBatis-Spring** 引入MyBatis-Spring库,这是一个连接Spring和...

    Spring-5.1.5源码

    在web.xml中,可以通过`context-param`元素指定Spring配置文件的位置,例如: ```xml &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;/WEB-INF/spring/appServlet/servlet-context.xml ``` 3. **监听器...

    servlet与spring整合例子

    我们可以在Spring配置文件中定义数据源和DAO Bean,然后在Servlet中通过依赖注入获取这些DAO对象,执行数据库操作。 7. **Spring Security** 如果涉及到权限控制,Spring Security可以很方便地与Spring MVC整合,...

    apache wink集成spring 开发rest服务

    2. **Spring配置**:在Spring配置文件中,我们需要声明Wink的相关bean,如`WinkServlet`和`DispatcherServlet`,并设置它们的路径映射。此外,可以使用Spring的`@Component`注解标记Wink资源类,然后通过`...

    SSM(Spring+SpringMVC+Mybaits)整合步骤

    1. web.xml:Web应用的部署描述符,主要配置Spring的ContextLoaderListener监听器,加载主配置文件bean.xml,以及Spring MVC的核心DispatcherServlet,配置其初始化参数和映射路径。此外,还可能包含过滤器配置,如...

    struts2 整合spring 必备包 s2sh

    - **Spring 配置文件**:在 Spring 配置文件中,定义需要被 Struts2 使用的 Action 对象,使用 `scope` 属性控制bean的作用范围,通常为 `prototype` 或 `request`。 5. **Action类的配置**: - Action 类通常...

    FreeMarker整合Spring_3

    4. **配置dispatcher.xml文件**:该文件是Spring MVC的核心配置文件,用于定义控制器、视图解析器等。 ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc=...

    Spring和WEB的整合.zip

    为了整合Spring和Web,我们需要创建一个`web.xml`部署描述符文件,这是在Web应用的`WEB-INF`目录下的核心配置文件。在这个文件中,我们将配置Spring的DispatcherServlet,它是Spring MVC的核心,负责调度请求到相应...

    Mybatis与Spring JAVA My eclipse

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

    SpringMVC 框架

    2. 配置Spring的ContextLoaderListener和DispatcherServlet,定义Spring的配置文件位置。 3. 在Spring配置文件中声明SessionFactoryBean,并配置数据源、映射文件等。 4. 创建DAO和Service层,使用Spring的@...

    springMVC+mybatis整合及测试(亲测可运行)

    同时,需要配置Spring的ContextLoaderListener,用于加载Spring的配置文件。 3. **配置Spring**:创建Spring的配置文件,如`applicationContext.xml`,在这里配置Bean,包括数据源、SqlSessionFactory、Mapper接口...

    mybatis 和springmvc整合

    同时,配置Spring的ContextLoaderListener,加载Spring的配置文件,这里通常会包含MyBatis和SpringMVC的相关配置。 在Spring的配置文件中,配置MyBatis的SqlSessionFactoryBean,指定数据源和MyBatis的配置文件位置...

    spring mvc学习视频相关资料

    在Spring MVC的开发过程中,常见的工具有IDEA、Eclipse等集成开发环境,它们提供了丰富的插件支持,如Spring Tools Suite,使得Spring MVC的配置和调试更加便捷。此外,版本控制工具如Git,构建工具如Maven或Gradle...

    Restlet2 + Spring3 注解方式配置

    2. **applicationContext-restlet.xml配置**:在这个文件中,我们将配置Spring的BeanNameUrlHandlerMapping,它会将URL映射到Spring的Bean。此外,还需要配置Restlet的相关组件,例如Application和Protocol。 ```...

    jsf spring

    在提供的“jsf”压缩包文件中,可能包含了一些示例代码、配置文件或者教程文档,这些资源可以帮助学习者更好地理解和实践JSF与Spring的集成。如果想要深入研究这个主题,可以从这些文件入手,逐步探索和学习。

    DWR+Spring整合案例

    - **创建 Spring Bean**: 在 Spring 的配置文件(如 `applicationContext.xml`)中声明需要被 DWR 访问的业务对象,设置必要的属性和依赖。 - **集成 DWR-Spring**: 使用 `dwr-spring` 模块,它提供了 Spring-aware...

    Spring+Struts的集成(第一种方案)

    - 为了使Struts2能够识别Spring管理的Action,需要在Struts2的配置文件中添加Spring插件,如`&lt;constant name="struts.objectFactory" value="org.springframework.web.struts2.SpringObjectFactory"/&gt;`。...

Global site tag (gtag.js) - Google Analytics