在配置beans 的时候,可以使用 ContextLoaderListener 或者 ContextLoaderServlet搭配名为contextConfigLocation 的Context-Param,也可以在DispatchServlet的 init-param中定义。
但是其中要注意的是,无论如何,当web容器初始化DispatchServlet的时候,都会去找这个它对于的配置文件。这个配置文件的默认位置和名字为/WEB-INF/servletname-servlet.xml。所以,即使已经使用了ContextLoaderListener或ContextLoaderServlet,配置文件 /WEB-INF/servletname-servlet.xml仍然是必须的。
有时候我们需要自定义所有的配置文件,比如,我希望把所有的spring相关的配置文件都放在目录/WEB-INF/spring/底下,我还希望用文件名 appContent-servlet来取代 envoy-servlet.xml。举个例子:
我的配置文件web.xml的相关部分如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/appContent-servlet.xml
/WEB-INF/config/appContent-service.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>envoy</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
注意,其中的/WEB-INF/config/appContent-servlet.xml其实就是原来默认名为/WEB-INF/envoy-servlet.xml的配置文件。
我们希望这个配置可以工作。但是很可惜,它无法正常启动。
为什么呢?原因就在于当web容器启动名为envoy的servlet的时候,它会尝试去加载bean定义配置文件。即使我们已经使用了ContextLoaderListener来加载bean定义,它仍然会发现没有人为这个servlet定义其默认的配置文件,所以它会去尝试使用默认的路径和名字去加载文件。这个路径就是/WEB-INF/envoy-servlet.xml。可是我们已经把这个文件改名并放在路径/WEB-INF/config/appContent-servlet.xml下了,web容器就会找不到文件,并报错。
那么,我们该怎么办才能正确的配置所有的加载文件呢?我们可以用servlet配置的子节点init-param,而不要ContextLoaderListener或者ContextLoaderServlet。我们还是举个例子:
新的配置文件web.xml的相关部分如下:
<servlet>
<servlet-name>envoy</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/appContent-service.xml,
/WEB-INF/config/appContent-servlet.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
显然,新的配置更加简洁,而且这一次当web容器名为envoy的servlet的时候,系统可以发现这个servlet需要的名为contextConfigLocation的参数在这里,就会用客户定义的路径去取代默认的路径。
我的疑惑是,既然我们已经使用了context-param来定义contentConfigLocation这个变量,那么当web容器加载名为envoy的servlet的时候,就应该用这个路径来取代默认的路径才对,为什么事实却不是这样呢?
我估计原因是spring并不是配置的这个路径来指明DispatchServlet的配置文件的路径,而是用这个路径来为ContentLoaderListener或者ContentLoaderServlet指明其配置文件的路径。所以DispatchServlet仍然需要在启动的时候去加载该servlet的配置文件,就导致了上面的结果。
由于时间不够,没有去确认是否其真实原因,等以后有空再去确认吧。
分享到:
相关推荐
首先,`spring-beans-3.0.xsd`是Spring 3.0版本中的beans配置文件,它定义了一系列元素和属性,允许开发者声明、配置和管理bean。例如,`<bean>`元素是配置中最基础的部分,用于定义一个bean实例,包括其类名、初始...
`spring-context-3.0.xsd` 文件包含了在上下文环境中配置的各种元素,如消息源、事件监听器、AOP 配置、bean 的工厂方法等。这个文件对于实现高度自定义的 Spring 应用程序非常重要。 4. **spring-mvc-3.1.xsd**: ...
这些文档详细解释了如何配置和使用Spring,包括容器配置、bean定义、数据访问、事务管理、Web开发等方面的指导,是学习和解决问题的重要资源。 3. spring-5.3.6-schema.zip:这个文件包含了Spring Framework的XML ...
### Spring入门学习之Bean装配(XML) #### Bean配置项详解 Spring框架的核心功能之一就是管理对象的生命周期,其中Bean装配是实现这一目标的关键技术。在Spring中,Bean配置项是定义Bean的重要组成部分,通过XML...
- **spring-5.3.7-schema.zip**:可能包含Spring配置文件的XML模式定义,有助于验证配置文件的正确性。 6. **使用流程**: - 解压压缩包,将所需的jar文件添加到项目类路径。 - 配置Spring的IoC容器,可以使用...
总结而言,`spring-context-4.2.xsd`是Spring 4.2版本Context模块的核心配置规范,它定义了Spring XML配置文件的结构,涵盖了bean定义、依赖注入、作用域、AOP、事件处理等多个方面的内容。理解并熟练运用`spring-...
"spring-beans"是Spring中用于配置Bean的XML文件。该文件包含了一系列的<bean>元素,每个元素表示一个Java对象的定义,包括类名、属性值、初始化方法等。 4. **Bean的定义**: 在XML配置文件中,我们使用`<bean>`...
3. **配置文件检查**:SpringAssistant能够检查XML配置文件中的错误,如bean定义错误、属性缺失等,并给出相应提示,有助于及时发现并修复问题。 4. **快速导航**:通过插件,可以快速定位到相关的Spring Bean定义...
在早期的Spring版本中,所有的bean定义、依赖注入以及其他配置都存储在如`bsappConfig.xml`, `spring-config.xml`, `webapp-config.xml`等这样的XML文件中。这些文件通常位于项目的`src/main/resources`目录下,以便...
在Spring的配置文件中,我们经常会看到xsd文件的身影,例如`spring-jdbc-4.2.xsd`,它是Spring JDBC模块的XML Schema定义文件,用于验证和解析与数据库交互的相关配置。 `spring-jdbc-4.2.xsd`是Spring 4.2版本的...
spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar spring-context-4.1.6.RELEASE.jar spring-context-support-4.1.6.RELEASE.jar spring-core-4.1.6.RELEASE.jar ...
综上所述,"spring-framework-4.3.5.RELEASE-dist" 包含了构建复杂Java应用程序所需的所有基本元素。每个JAR文件都对应Spring框架的一个或多个组件,开发者可以根据需求选择导入相应的库。这些JAR文件包括了Spring的...
开发者可以在这里找到`spring-core`、`spring-beans`、`spring-context`、`spring-web`等核心模块,它们提供了依赖注入(DI)、面向切面编程(AOP)、上下文管理、Web支持等功能。此外,还包括了Spring对其他技术如...
spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-3.2.4.RELEASE.jar spring-webmvc-...
至于`spring-framework-4.2.0.RELEASE-schema.zip`,它包含了Spring XML配置文件的XSD schema定义。这些schema定义了XML配置文件的结构和约束,帮助开发者编写正确格式的配置文件,避免语法错误。 总的来说,Spring...
这个压缩包"spring-modules-0.9.zip"包含了0.9版本的Spring Modules,它在早期的Spring生态中扮演了重要的角色,帮助开发者更轻松地处理一些特定的集成问题。 首先,Spring Modules的核心特性之一是其验证...
“tiny-spring-step-4-config-beanfactory-with-xml.zip”继续深化,讲解了如何通过XML配置文件来配置BeanFactory,包括Bean的定义、属性注入、构造函数注入等,让你全面掌握BeanFactory的配置方式。 第五步,...
- **bean标签**:`<bean>`标签是Spring配置文件中的基本元素,用于定义一个对象的实例。它包含了创建、初始化和配置对象所需的所有信息。 - **id属性**:`id`属性用于唯一标识一个bean,就像数据库中的主键一样。...
在`Spring--2.Spring 中的 Bean 配置-4-1.zip`文件中,你可能会看到类似以下的配置: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
在没有Struts2-Spring-Plugin的情况下,要在Struts2应用中使用Spring,需要手动配置Action类与Spring Bean之间的关联。而有了这个插件,配置过程变得更加简单。以下是Struts2-Spring-Plugin-2.2.1.jar提供的主要功能...