我们什么时候需要在容器中 运行 Java 应用程序?

When do we need to run a Java application in a container?

最近我开始学习Java EE和相关技术,有些概念让我很困惑。我在某处读到,无论何时构建 Java EE 应用程序,都必须使用容器。

目前,我正在学习 Spring 框架,并尝试用它构建一个小型应用程序以进行实践。现在,我不确定我是否必须使用容器(比如 Tomcat),或者这取决于我正在构建的应用程序是否需要容器。

如果它取决于正在构建的应用程序,那么有助于决定是否应该使用容器的因素是什么?

如果您的应用程序正在使用 servlet,您将需要一个容器来处理请求。 Tomcat 是一个非常受欢迎的选择。

我预计你的下一个主题将涵盖 this discussion 的 "application server" 与 "container."

噗噗,这个问题太大了,没有简单的答案。但我会尽力至少解释一下我自己的观点:

什么是容器?

容器为您提供功能。这样的功能可以是处理 Web 请求并将它们分派给 servlet——在这种情况下,我们称它们为 servlet 容器(例如 Tomcat 或 Jetty)。

但容器还可以提供其他东西,例如它们可以提供用户身份验证、日志记录或数据库连接。大多数容器(例如 Tomcat)会做很多这样的事情(例如 Tomcat 会做我提到的所有事情)。有些容器比其他容器做得更多,例如JBoss 比 Tomcat 能做的更多。

取舍

然而,有一个权衡:如果你使用一个简单的容器(比如Tomcat),你需要自己做很多事情或者使用其他框架(比如Spring).但是如果你使用一个强大的容器,你必须非常了解这个容器,你的应用程序迟早会依赖这个具体容器的可能性很高。

重点是,使用容器不是强制性的。这是一个决定。有些人会赞成,有些人会反对。但是根据您阅读的书籍,这个决定已经做出(例如,J2EE 需要一个 J2EE 容器,这就是它的工作原理)。

趋势(恕我直言)

几年前的趋势是使用大而强大的 (J2EE) 容器来提供尽可能多的内容。恕我直言,当今的趋势是使用更小、更轻便的解决方案。今天大多数开发人员更愿意使用 Tomcat 服务器而不是 JBoss 服务器。

没有容器的框架

虽然 J2EE 需要一个容器,但还有其他 frameworks/technologies 支持在没有任何外部容器的情况下开发 Web 应用程序。这样的框架是Play! or Spark Java

备注

如果您不熟悉容器和 Spring,请注意不要混淆。您将使用 Spring 开发的大多数应用程序都是将部署到 servlet 容器的 Web 应用程序。这很常见。但是 Spring 并不依赖于此。您也可以在没有此类容器的情况下使用 Spring,例如开发桌面应用程序。但是如果你想开发一个 web 应用程序,Java-方法是使用 servlet 容器。

有两个容器。一个是 运行 Web 应用程序的 Web 容器(IIS、Apache),另一个是 "Application Container" 到 运行 企业应用程序。

Web 应用程序 = 使用 HTML、XML、CSS 和 JSP
开发的应用程序 企业应用程序 = 使用 JAVA、J2E 和 Serverlet 开发的应用程序以及 HTML 和 XML。