Spring web 框架中 applicationContext 文件的配置说明

2020-01-15 0 By admin

一、application-context 全局配置

application-context.xml是全局的,应用于多个serverlet,配合listener一起使用。application-context.xml这个一般是采用非spring mvc架构,用来加载Application Context。
web.xml中配置如下:

<!-- 配置监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

二、spring-mvc 单个配置

spring-mvc.xml 是spring mvc的配置,如果直接采用SpringMVC,只需要把所有相关配置放到spring-mvc.xml中就好,一般spring mvc项目用不到多个serverlet。
web.xml中配置如下:

<!--配置springmvc DispatcherServlet-->
<servlet>
  <servlet-name>springMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/spring-mvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>

三、applicationContext 配置文件在web.xml中的配置详解

web.xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SpringMVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  //监听器
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
  
  //查找applicationContext 文件位置
  <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- <param-value>classpath*:config/applicationContext.xml</param-value> -->
            <param-value>/WEB-INF/classes/config/applicationContext.xml</param-value>
  </context-param>
  
	<servlet> 
		<servlet-name>springmvc</servlet-name> 
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
		   <param-name>contextConfigLocation</param-name>
		   <!-- <param-value>classpath*:config/Springmvc-servlet.xml</param-value> -->
		   <param-value>/WEB-INF/classes/config/Springmvc-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup> 
	</servlet>  

	<servlet-mapping> 
		<servlet-name>springmvc</servlet-name> 
		<url-pattern>/</url-pattern>  
	</servlet-mapping>
</web-app>

四、配置说明:监听器

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

ContextLoaderListener是Spring的监听器,它的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

五、配置说明:applicationContext 文件位置

  <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- <param-value>classpath*:config/applicationContext.xml</param-value> -->
            <param-value>/WEB-INF/classes/config/applicationContext.xml</param-value>
  </context-param>

这段配置是用于指定applicationContext.xml配置文件的位置,可通过context-param加以指定:

这里需要搞清楚classpath是什么,以及classpath:和classpath*有何区别:

1. 首先 classpath是指 WEB-INF文件夹下的classes目录
2. classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

需要注意的是,部署到应用服务器后,src目录下的配置文件会和class文件一样,自动copy到应用的 classes目录下,spring的 配置文件在启动时,加载的是web-info目录下的applicationContext.xml, 运行时使用的是web-info/classes目录下的applicationContext.xml。