为什么servlet容器不比spring IOC容器更受欢迎?

时间:2017-09-30 19:23:18

标签: java spring tomcat servlets spring-ioc

Servlet容器实现Java EE规范的Web组件契约,为Web组件指定运行时环境,包括安全性,并发性,lifecycle management,事务,部署和其他服务。

Apache tomcat是一个开源示例。

每个Web应用程序使用满足javax.servlet.ServletContext给出的合同的对象

Spring IOC容器还实现了Java EE规范的Web组件契约。

每个Web应用程序使用满足org.springframework.context.ApplicationContext给出的合同的对象

为什么Spring IOC容器比servlet容器更受欢迎?

1 个答案:

答案 0 :(得分:3)

在这个问题中有许多有问题的陈述,我会尽量通过添加一些" list"来尽量澄清一些事情。希望有用的事实:

  1. Tomcat没有实现JEE规范,事实上,它仅仅是为了在JEE的保护下实现小型(虽然重要且广泛使用)规范而着名: servlets (以及技术上称为servlet的JSP)但是更像HTML格式。)
  2. 这是真的,tomcat也遵循JEE中描述的WAR的部署模型,但在JEE中,有更多类型的存档与tomcat无关。此外,最新版本的tomcat允许使用"嵌入模式",您根本不必使用WAR。
  3. 简而言之,Spring是一个IOC容器,tomcat根本不会覆盖它。我假设你知道什么是IOC,所以我不会在这个问题上深入了解IOC。
  4. 除了IOC之外,spring还提供了与许多不同技术的相当好的集成(想想它是Spring可以做的另一件事)。现在,在这些技术中,您可以找到Web框架(称为spring MVC),各种模板引擎(就像JSP),REST,使用数据库(Spring Data),安全模型(Spring security)等等。 所有这些使得spring成为任何JEE规范实现的竞争对手。 Spring在概念上做出了JEE所做的一切(可以说更多),但并不遵循JEE建立的标准。话虽如此,在现代版本中,差异变得越来越不重要,在许多情况下,除了自己的做事方式外,Spring确实尊重JEE提供的界面和注释。

  5. 所以,现在很明显Spring和Tomcat并没有真正相互竞争。事实上,他们可以一起工作,并且它是一个非常广泛的串联: 可以使用spring框架开发将在tomcat上运行的应用程序。 另一个成功的模型是使用spring boot,它允许将tomcat嵌入到spring引导应用程序中,并在引擎盖下使用它来处理web(HTTP / Rest)请求。

  6. 希望这有助于理解Spring和Tomcat之间的差异