Java EE 容器与 Web 容器

Posted

技术标签:

【中文标题】Java EE 容器与 Web 容器【英文标题】:Java EE Containers vs Web Containers 【发布时间】:2013-06-15 09:36:37 【问题描述】:

我对 Java EE/EJB 比较陌生,而且我已经阅读了很多有关 Java EE 容器的内容。我有使用 Web 容器(JBoss 中的 WAR 文件)的经验。我也知道 JBoss 也可以用作 Java EE 容器。

有什么区别?

我知道 Java EE 也能够包含 .war 文件。它们有什么不同,它们有什么区别?是否有特定于供应商的偏好哪个更好?

【问题讨论】:

【参考方案1】:

首先,“J2EE”是一个过时的缩写,现在简称为“Java Enterprise Edition”或Java EE。

与 servlet 容器(例如 Tomcat)相反,“完整的”Java EE 应用程序服务器还包含一个 EJB 容器。 EJB 是 Enterprise Java Bean,您可以阅读很多关于它们的信息,例如 here(第四章)。 EJB 现在的版本是 3.2(Java EE 7 和 Java EE 8),之前的版本是 3.1(Java EE 6)和 3.0(Java EE 5);但是最大的区别是在 v2 和 v3 之间。

EJB 旨在保留应用程序的业务逻辑。例如,无状态会话 bean 可以计算某些东西,或表示 Web 服务或您的应用程序需要做的任何事情。消息驱动 bean 可以侦听消息队列,因此如果您想要异步通信,它们很有用。单例 bean 保证每个 bean 一个实例等。

关于文件类型,EJB 打包成 .jar 文件,Web 应用程序打包成 .war 文件,如果要将它们混合在一个应用程序中,那就是 .ear 文件(“企业档案”) .

除了 EJB 之外,“完整”应用程序服务器还负责事务、安全性、JDBC 资源……我强烈建议在 servlet 容器上使用它,但好处是复杂性带来的,因此您必须花费合理的费用学习如何处理的时间量,例如Websphere(Payara 和 WildFly 更简单,是我的最爱)。 JBoss 和 Weblogic 也很受欢迎,如果你熟悉 Tomcat 可以看看 TomEE。

【讨论】:

+1 以获得完整答案,我正在寻找您提到的应用程序服务器的比较。关于复杂性/易于集成等。 @melt321 很高兴为您提供帮助。关于比较,我只用过Websphere和Glassfish,所以我会推荐其他文章:hwellmann.blogspot.com/2011/06/java-ee-6-server-comparison.html,***.com/questions/217827/…,***.com/questions/1224822/websphere-vs-weblogic【参考方案2】:

Java EE 容器: 管理在 Java EE 服务器上运行的 EJB、JMS、JTA 的执行,例如JBoss,Glassfish。

Web 容器:管理网页、servlet 和 Java EE 应用程序的一些 EJB 组件的执行。 Web 组件及其容器运行在 Jetty、tomcat 等 Web 服务器上。

【讨论】:

EJB 可以在 Web 容器上执行,也可以在 EJB 容器上执行,两者有何不同,何时使用哪个容器。你能解释一下 Web 和 EJB 容器在 EJB 方面的优缺点吗?【参考方案3】:

web-container 和 EJB-container 是 Java EE 容器的子集。 Java EE 容器还包括 应用程序客户端容器applet 容器

doc 是这样说的:

部署过程将 Java EE 应用程序组件安装在 Java EE 容器。

Java EE 服务器:Java EE 产品的运行时部分。 Java EE 服务器提供 EJB [容器和 Web 容器]*。

企业 JavaBeans (EJB) 容器:管理 Java EE 应用程序的企业 bean 的执行。企业 bean 及其 容器在 Java EE 服务器上运行。

Web 容器:管理 JSP 页面和 Java EE 应用程序的 servlet 组件的执行。 Web 组件及其 容器在 Java EE 服务器上运行。

应用客户端容器:管理应用客户端组件的执行。应用程序客户及其 容器在客户端上运行。

小程序容器:管理小程序的执行。由 Web 浏览器和 Java Plug-in 在客户端一起运行。

*在文档中他们使用复数形式,但实际上每个 Java EE 服务器只有一个 Web 容器和一个 EJB 容器。

【讨论】:

【参考方案4】:

我认为它们之间的区别可能在于它们支持的协议。

例如,我们不会尝试在 web 容器中管理事务,比如 Tomcat,我们通常会尝试在部署在 Tomcat 中的 web-project 中进行控制。而像EJB 这样的网络/应用程序服务器则相反。

【讨论】:

【参考方案5】:

Java EE 容器是一种应用服务器解决方案,支持 Web 容器、EJB 3 和其他 Java EE API 和服务。

Oracle WebLogic 服务器、GlassFish 服务器、IBM WebSphere 应用服务器、JBoss 应用服务器和 Caucho Resin 是 Java EE 容器的示例......

【讨论】:

【参考方案6】:

应用可以分为以下几类:

桌面应用程序,如 GUI, Web 应用程序,如动态网页, 处理核心业务处理的企业应用程序。

企业应用:一般用户交互不多。在这种情况下,如果您希望您的应用程序使用 Web 服务、JMS 或 JTA(与大型机事务服务器连接)与分布在 Intranet/Internet 上的不同应用程序进行交互,那么您需要具有 EJB 容器和其他安全功能的 Java EE。

Web 容器:相反,如果您想使用 JNI 与分布式应用程序交互,或者只是与 RDBMS 对话,或者只是呈现静态或动态网页,那么 Web 容器就足够了。来自浏览器的 HTTP 请求可以通过 servlet 调用和执行 Java 程序。 Java 程序可以调用 JDBC API 与 RDBMS 对话。同样,您可以使用 JNI 或 RMI 从另一台服务器调用 C 或 Java 程序。

【讨论】:

以上是关于Java EE 容器与 Web 容器的主要内容,如果未能解决你的问题,请参考以下文章

Java EE 容器中的同步请求-回复模式

常见的web容器与应用程序服务器区别及对比

WEB容器和EJB容器

什么是javaEE

四大Java EE容器

转 四大Java EE容器(TomcatJBossResinGlassfish)之简单比较