ApplicationContext 和 ServletContext

当涉及到Spring MVC Application时,我在AppplicationContext和ServletContext之间感到困惑。我知道每个Spring Web应用程序只有一个AppplicationContext,每个Web应用程序也只有一个ServletContext。为了启动 ApplicationContext 和 ServletContext 的值,在 web.xml 中,我们将在 context-param 标记中添加一些内容。

这就是让我感到困惑的一点。这两者之间有什么区别(我知道AppplicationContext有一些方法可以处理bean)?以及我们何时使用 ApplicationContext何时使用 ServletContext


答案 1

Servlet Context:

它在部署 Servlet 应用程序时初始化。Servlet Context 保存整个 Servlet 应用程序的所有配置(init-param、context-params 等)。

应用程序上下文:

这是一个春天特有的东西。它由Spring初始化。它包含弹簧配置文件中定义的所有Bean定义和Bean的生命周期。Servlet-Context对这些事情一无所知。

Spring中有两种类型的上下文父项和子项。

春季父上下文(应用程序上下文/根上下文)

  <listener>
        <listener-lass> 
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
  </listener>
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/service-context.xml,
            /WEB-INF/dao-context.xml,
            /WEB-INF/was-context.xml,
            /WEB-INF/jndi-context.xml,
            /WEB-INF/json-context.xml
        </param-value>
  </context-param>

角色-用途-上下文加载器-在弹簧
-Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
当 spring 容器启动时,它会从配置文件中读取所有 bean 定义并创建 bean 对象,并管理 Bean 对象的生命周期。此配置是完全可选的。

DispatcherServlet vs ContextLoaderListener
/declaring-spring-bean-in-parent-context-vs-child-context

春季子上下文 ( WebApplicationContext / Child Context )

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

当弹簧Web应用程序启动时,它将查找弹簧豆配置文件myWebApplication-servlet.xml。它将读取所有 Bean 定义,并创建和管理 Bean 对象的生命周期。如果父弹簧上下文可用,它将子弹簧上下文与父弹簧上下文合并。如果没有可用的 Spring 父上下文,则应用程序将仅具有子 Spring 上下文。


答案 2

它们是独立的东西。每个基于Servlet技术的Java Web应用程序都将具有servlet上下文,无论它是否是弹簧应用程序。相比之下,ApplicationContext是一个弹簧的东西;用非常简单的术语来说,它是一个容纳春豆的容器。

为了启动 ApplicationContext 和 ServletContext 的值,在 web.xml 中,我们将在 context-param 标记中添加一些内容。

如果你引用一个例子来说明这一点会有所帮助,因为据我所知,context-param用于ServletContext,而不是AppplicationContext。

更新

您可以使用 提供根应用程序上下文配置文件的位置,如下所示。context-param

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/root-context.xml
        /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

推荐