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)
我创建了一个简单的 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)