web.xml 中与 contextConfigLocation 相关的混淆

Confusion related to contextConfigLocation in web.xml

我创建了一个简单的 Hello World Spring MVC 项目。

我在 web.xml

中添加了以下几行
<init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/spring-servlet.xml</param-value>         
</init-param>

我的代码在没有这些行的情况下也能正常工作。我不明白添加这些行的目的。谁能用简单的话向我解释一下它的用法。

默认情况下 Spring 查找以下文件以加载其 Web 上下文:

{my-sevlet-name}-servlet.xml

看来您将 Spring 的 DispatcherServlet 命名为 'spring'。在这种情况下 Spring 只是加载 spring-servlet.xml 并且您提到的行根本不会影响应用程序。

初始化参数contextConfigLocation告诉Spring在哪里加载配置文件。如果它在没有 web.xml 中的代码的情况下工作,则意味着在您的 java 代码中的某处正在加载此配置文件。

在初始化 DispatcherServlet 时,查找名为 [servlet-name]-servlet.xml 在您的 Web 应用程序的 WEB-INF 目录中并创建在那里定义的 beans(覆盖在全局范围内使用相同名称定义的任何 beans 的定义)。

例如,

<web-app>
  <servlet>
   <servlet-name>
       spring
   </servlet-name>
       <servlet-lass>org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>
       spring
    </servlet-name>
   <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

有了上面的 servlet 配置,您将需要一个名为“/WEB-INF/spring-servlet.xml”的文件,并且它会自动选择。

但是对于不同的 servlet 名称和配置文件名或位置,我们必须在初始化 Dispatcher servlet 时提供文件名和位置,如下所示。

<web-app>
    <servlet>
        <servlet-name>SpringController</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringController</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

(这里的servlet名字是SpringController,配置文件名字是spring-servlet.xml。甚至,在这里你可以为你的配置文件使用任何名称,例如 my_spring_mvc_configurtaion.xml)