Spring MVC 中的不同上下文如何工作?

How do the different contexts in Spring MVC work?

我的 Spring MVC Webapp 有以下配置。我想从概念上知道 servlet-context.xml 中的 contextConfigLocation(它是 appServlet 的 conf)和其他文件安全性、tiles 之间的区别...我不明白它是如何工作的,因为如果我将我的 tiles-context.xml 配置放在 servlet-context 中,该应用程序可以正常工作,而在另一种情况下则不能,但安全性正常。这个文件中的 Bean 也不在 appServlet 容器中?上下文是否不止一种?

<!-- DispatcherServlet Conf - Processes application requests -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>


<!-- Spring configuration files in XML -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:security-context.xml
        classpath:tiles-context.xml
        ...
    </param-value>
</context-param>

看看

Spring root application context and servlet context confusion

What is the difference between ApplicationContext and WebApplicationContext in Spring MVC?

关于根上下文和 servlet 上下文的区别。

您可以使用如下配置定义多个 servlet 上下文

<servlet>
<servlet-name>api-dispatcher</servlet-name>
<servlet-class>
    org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/api-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>api-dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>

当 url 模式为 /rest/* 时,可以访问以上上下文。这就是在 spring.

上配置多个独立上下文的方式