Spring Ioc容器如何与Tomcat容器交互

时间:2014-12-16 16:56:26

标签: java spring tomcat ioc-container

我熟悉Spring Framework并且已经完成了一些工作。

在我的一次采访中,我被问到"在 Apache Tomcat 中部署了一个Web应用程序;告诉我" Tomcat容器" (用于servlet)与" Spring IoC容器" (用于春豆)?"

我无法理解采访者的意思,并且无言以对。有人可以澄清一下这个问题是关于什么以及它的合理答案可能是什么?

3 个答案:

答案 0 :(得分:5)

一个spring web-app将在其配置中定义一个Spring Dispatcher Servlet,apache tomcat容器将初始化这个servlet,调度程序servlet依次初始化应用程序上下文。 tomcat容器和Spring IOC容器之间没有直接的交互。

答案 1 :(得分:1)

将Spring与Servlet链接有两个主要方面。首先,您必须加载Spring应用程序上下文,然后您需要将这些Spring加载的对象公开给Servlet。有很多方法可以做到这一点,像CXF这样的框架内置了对Spring的支持。

但最基本的机制之一是使用ContextLoaderListener加载应用程序上下文和HttpRequestHandlerServlet来初始化servlet。

这是一个简单的例子:

的web.xml:

<web-app>
...
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>

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

  <servlet>
    <servlet-name>servletBean</servlet-name>
    <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
  </servlet>
...
</web-app>

在/WEB-INF/applicationContext.xml中:

<beans>
..
  <!-- Note: YourServletClass must implement HttpRequestHandler -->
  <bean id="servletBean" name="servletBean" class="yournamespace.YourServletClass">
    ...
  </bean>
...
</beans>

答案 2 :(得分:1)

Spring应用程序声明DispatcherServlet作为应用程序配置的一部分。 DipatcherServlet是HttpServlet的子类,因此表示容器的servlet。 DispatcherServlet也会创建WebApplicationContext。 Spring为每个WebApplicationContext维护一个IOC容器(应用程序中可以有多个servlet)。还可以有一个由ApplicationContext创建的根ContextLoaderListener。根ApplicationContext是Web应用程序中所有WebApplicationContext的父级。 ApplicationContext的IOC容器可供所有WebApplicationContext使用。

ServletContext仍然是所有Web容器的单一交互模式。