我对Java EE / EJB比较陌生,而且我一直在阅读有关Java EE容器的很多内容。我有使用Web容器的经验(jboss中的WAR文件)。我也知道Jboss也可以用作Java EE容器。
我的问题是,Java EE容器与Web容器之间有什么区别?
我知道Java EE也能够包含.war文件。它们是不同的,它们的区别是什么?有没有特定的偏好供应商哪个更好?
答案 0 :(得分:84)
首先,“J2EE”是一个过时的缩写,现在简称为“Java Enterprise Edition”或Java EE。
与servlet容器(例如Tomcat)相反,“完整”Java EE应用程序服务器也包含EJB容器。 EJB是Enterprise Java Beans,你可以阅读很多关于它们的例子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可以侦听消息队列,因此如果您想要异步通信,它们很有用。 Singleton bean保证每个bean等一个实例。
关于文件类型,EJB被打包成一个.jar文件,Web应用程序到一个.war文件,如果你想给他们在一个应用程序中混合,这将是.ear文件(“企业档案”)
旁边的EJB,“全”的应用服务器还负责有关事务,安全性,JDBC资源...我会强烈建议使用它在一个servlet容器,但带来的好处附带的复杂性,所以你将不得不花费合理学习如何处理的时间量,例如Websphere(Payara和WildFly更简单,也是我的最爱。 JBoss和Weblogic也非常受欢迎,如果您熟悉Tomcat,请查看TomEE。
答案 1 :(得分:27)
Java EE容器:管理在Java EE服务器上运行的EJB,JMS,JTA的执行,例如JBoss,Glassfish。
Web容器:管理Java EE应用程序的网页,servlet和一些EJB组件的执行。 Web组件及其容器在Web服务器上运行,例如Jetty,tomcat。
答案 2 :(得分:4)
Web容器和EJB容器是Java EE容器的子集。 Java EE容器还包含应用程序客户端容器和 applet容器。
以下是doc所说的内容:
部署过程在中安装Java EE应用程序组件 Java EE容器。
Java EE服务器:Java EE产品的运行时部分。 Java EE服务器提供EJB [容器和Web容器] *。
Enterprise JavaBeans(EJB)容器:管理Java EE应用程序的企业bean的执行。企业bean及其 容器在Java EE服务器上运行。
Web容器:管理Java EE应用程序的JSP页面和servlet组件的执行。 Web组件及其中 容器在Java EE服务器上运行。
应用程序客户端容器:管理应用程序客户端组件的执行。应用客户及其 容器在客户端上运行。
Applet容器:管理applet的执行。由客户端上运行的Web浏览器和Java Plug-in组成。
*在doc中,他们使用plurial表单,但实际上每个Java EE服务器只有一个Web容器和一个EJB容器。
答案 3 :(得分:0)
我认为他们之间的区别可能就是他们所支持的协议。
例如,我们不会尝试在Web容器中管理事务,例如tomcat,我们通常会尝试在tomcat中部署的web-proj中进行控制。而像ejb这样的web / app服务器则采用相反的方式。 / p>
答案 4 :(得分:0)
Java EE Container是一个支持Web容器,EJB 3和其他Java EE API和服务的应用程序服务器解决方案,Oracle WebLogic服务器,GlassFish服务器,IBM WebSphere应用程序服务器,JBoss应用程序服务器和Caucho Resin是Java的示例EE容器...希望它能回答您的问题
答案 5 :(得分:0)
应用程序可以分类如下: 桌面应用程序(例如GUI) Web应用程序,例如动态网页, 负责核心业务处理的企业应用程序。
企业应用程序:通常用户交互不多。在这种情况下,如果希望您的应用程序使用Web服务,JMS或JTA(与Mainframe事务服务器连接)与分布在Intranet / Internet上的不同应用程序进行交互,则需要具有EJB容器和其他安全功能的Java EE。
Web容器:相反,如果您想使用JNI与分布式应用程序进行交互,或者只是与RDBMS对话,或者仅呈现静态或动态Web页面,那么Web容器就足够了。来自浏览器的HTTP请求可以通过servlet调用和执行Java程序。 Java程序可以调用JDBC API与RDBMS进行通信。同样,您可以使用JNI或RMI从另一台服务器调用C或Java程序。