关于jakarta ee:Java EE容器与Web容器

Java EE Containers vs Web Containers

我是Java EE / EJB的新手,并且我已经阅读了很多有关Java EE容器的文章。 我有使用Web容器(JBoss中的WAR文件)的经验。 我也知道JBoss也可以用作Java EE容器。

Java EE容器与Web容器之间有什么区别?

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


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

与servlet容器(例如Tomcat)相反,"完整" Java EE应用程序服务器还包含EJB容器。 EJB是企业Java Bean,例如,您可以在此处阅读很多有关它们的信息(第IV章)。 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。


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

Web容器:管理Java EE应用程序的网页,Servlet和某些EJB组件的执行。 Web组件及其容器运行在Web服务器上,例如Jetty,tomcat。


Web容器和EJB容器是Java EE容器的子集。 Java EE容器还包含应用程序客户端容器和applet容器。

这是医生说的:

The deployment process installs Java EE application components in the
Java EE containers.

  • Java EE server: The runtime portion of a Java EE product. A Java EE server provides EJB [container and web container]*.

  • Enterprise JavaBeans (EJB) container: Manages the execution of enterprise beans for Java EE applications. Enterprise beans and their
    container run on the Java EE server.

  • Web container: Manages the execution of JSP page and servlet components for Java EE applications. Web components and their
    container run on the Java EE server.

  • Application client container: Manages the execution of application client components. Application clients and their
    container run on the client.

  • Applet container: Manages the execution of applets. Consists of a web browser and Java Plug-in running on the client together.

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


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

例如,我们不尝试在像Tomcat这样的Web容器中管理事务,我们通常尝试在Tomcat中部署的Web项目中进行控制。而像EJB这样的Web /应用服务器则相反。


应用程序可以分类如下:

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

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

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


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

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