Tomcat,JBoss和Glassfish有什么区别?

sam*_*moz 440 java enterprise jboss tomcat glassfish

我开始研究Enterprise Java,我正在阅读的书中提到它将使用JBoss.Netbeans随Glassfish一起发货.我过去使用过Tomcat.

这三个项目有什么区别?

Pet*_*hev 511

Tomcat只是一个servlet容器,即它只实现了servlet和JSP规范.Glassfish和JBoss是完整的Java EE服务器(包括EJB,JMS等......),Glassfish是最新Java EE 6堆栈的参考实现,但是2010年的JBoss还没有完全支持它.

  • 请读者注意,[JBoss现在已经过Java EE 6 Full Profile认证](http://planet.jboss.org/post/jboss_as_7_1_0_final_thunder_released_java_ee_6_full_profile_certified),就像GlassFish一样.Tomcat现在也是[通过TomEE认证的Java EE 6 Web Profile](https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces17),并支持EJB,CDI,JSF,JPA等. (77认同)
  • @ aldo.roman.nurena很少有差异.GlassFish和JBoss都支持Java EE Full Profile,因此它们支持JAX-RPC和CORBA等传统技术.我们没有在Tomcat的Java EE版本中包含这些,但是所有当前的技术都有JAX-RS,JAX-WS,JMS,CDI,JPA,JSF,EJB,JTA等. (22认同)
  • @DavidBlevins所以现在的差异是什么? (10认同)
  • 干净简单的回答,非常感谢! (3认同)

Ste*_*ins 351

Tomcat只是一个HTTP服务器和Java servlet容器.JBoss和GlassFish是完整的Java EE应用服务器,包括EJB容器和该堆栈的所有其他功能.另一方面,Tomcat的内存占用量较小(约60-70 MB),而那些Java EE服务器的内存占用数百兆.Tomcat非常适用于简单的Web应用程序,或者使用Spring等不需要完整Java EE服务器的框架的应用程序.Tomcat服务器的管理可以说更容易,因为移动部件更少.

但是,对于需要完整Java EE堆栈的应用程序(或者至少可以轻松地连接到Tomcat的更多部分)... JBoss和GlassFish是两种最流行的开源产品(第三种是Apache Geronimo) ,构建免费版本的IBM WebSphere).JBoss拥有更大更深的用户社区,以及更成熟的代码库.但是,JBoss在实现当前Java EE规范方面落后于GlassFish.此外,对于那些喜欢基于GUI的管理系统的人... GlassFish的管理控制台非常灵活,而JBoss中的大多数管理都是使用命令行和文本编辑器完成的.GlassFish直接来自Sun/Oracle,具有可提供的所有优势.JBoss不受Sun/Oracle的控制,具有可提供的所有优势.

  • 嘿......关于"servlet容器"与"JEE服务器"的讨论似乎总是变成"Spring"与"EJB/JSF"的讨论.我已经使用了JEE多年,当客户付钱给我时,我总是很乐意这样做.但是,我的想法是:[1]双方的大多数基准测试都来自有偏见的来源,我从未注意到两个堆栈本身之间存在巨大的资源差异,[2] Spring比JEE"标准"更便携,切换服务器似乎总是很痛苦,最后但并非最不重要...... (10认同)
  • ... [3] Spring和Hibernate的用户社区绝对比纯JEE规范的用户社区相形见绌.如果你在使用Spring遇到麻烦并在StackOverflow上发布一个问题,它将会被数百人阅读,你会在几分钟内得到一个可靠的答案.问一个关于JEE的问题,它会被十几个人阅读......有一半的时间,你得到的唯一回答是,"它对我有用!".JEE标准总是看起来像是一天晚了,一美元短,当我在一个真实的应用程序中遇到麻烦时,我感到非常孤独. (7认同)
  • 这也是一个非常尖锐的答案! (5认同)
  • 我没有验证,但[有些声称](https://blogs.oracle.com/arungupta/entry/why_java_ee_6_is)对于常规项目,EE 6容器可能比Spring +其依赖项使用少25%*的内存. (3认同)
  • +1,优秀的答案,虽然我订阅了@ Arjan的评论:这些服务器本身使用的内存与部署的应用程序需要多少内存相比并不重要(这在很大程度上取决于所使用的技术.春天有点记忆猪) (2认同)
  • @kebs:谢谢,但是 StackOverflow 的几乎所有内容都被抄袭了一百个不同的蹩脚屏幕抓取网站。人类是可怕的,但无论如何我都不会从我的任何 StackOverflow 答案中获得版税。只是想象中的点赞数。:) (2认同)

Jai*_*tel 77

您应该使用GlassFish for Java EE企业应用程序.有些事情需要考虑:

一个Web服务器的意思是:处理HTTP请求(通常来自浏览器).

Servlet容器(例如Tomcat的)是指:它可以处理的servlet&JSP.

一个应用服务器(如GlassFish的)意思是:*它可以管理Java EE应用程序(通常都的servlet/JSP和EJB).


Tomcat - 由Apache社区运行 - 开源并且有两种风格Tomcat - Web配置文件 - 轻量级,它只是servlet容器,不支持EJB,JMS等Java EE功能.Tomcat EE - 这是一个经过认证的Java EE容器,这支持所有Java EE技术.

没有商业支持(仅限社区支持)

JBoss - 由RedHat运行这是对JavaEE的完整堆栈支持,它是经过认证的Java EE容器.这包括内部的Tomcat作为Web容器.这也有两种版本的社区版本称为Application Server(AS) - 这将只有社区支持企业应用服务器(EAP) - 为此,您可以拥有基于订阅的许可证(它基于您的服务器上的核心数量.)

Glassfish - 由Oracle运行这也是一个经过完整堆栈认证的Java EE容器.它有自己的Web容器(不是Tomcat).这来自Oracle本身,因此所有新规范都将首先使用Glassfish进行测试和实施.所以,它总是支持最新规范.我不知道它的支持模型.

  • 我是说正确的是,如今(2018年第一季度)Glassfish在现实中并未真正发挥重要作用吗?实际上不是标准的JBoss吗? (2认同)

Nim*_*sky 14

jboss和glassfish包含一个servlet容器(如tomcat),但是两个应用程序服务器(jboss和glassfish)也提供了一个bean容器(以及我想象的其他一些东西)

  • 更清楚的是,"喜欢tomcat"是正确的,但JBoss实际上将Tomcat嵌入到它的servlet容器实现中. (4认同)
  • Glassfish可以做任何Tomcat可以做的事情,但这并不意味着它"包括"Tomcat.Glassfish拥有自己的网络容器. (2认同)

Val*_*udi 8

JBoss和Glassfish基本上是完整的Java EE Application Server,而Tomcat只是一个Servlet容器.JBoss,Glassfish以及WebSphere,WebLogic等对Tomcat以及Jetty的主要区别在于完整应用服务器提供的功能.当你有一个全栈的Java EE应用服务器,你可以享受你所选择的供应商的所有执行的,你可以受益的EJB,JTA,CDI(JAVA EE 6+),JPA,JSF,JSP /当然的Servlet等等.另一方面,使用Tomcat,您只能受益于JSP/Servlet.然而,对于使用Spring和Guice等高级框架的日子,使用完整堆栈应用程序服务器的许多主要优势可以减轻,并且假设这个框架中的一个具有Spring Ecosystem的男子气概,您可以受益于许多子项目,在我的工作经验让我离开使用完整的堆栈应用服务器,支持像tomcat这样的轻量级应用服务器.


use*_*951 8

当您阅读这些答案时,使用Tomcat似乎有点令人沮丧.然而,大多数没有提到的是,您可以使用tomcat获得相同或几乎相同的用例,但这需要您添加所需的库(通过Maven或您使用的任何包含系统).

我一直在使用JPA运行tomcat,EJB配置工作量非常小.

  • @MarcoOttina 根据我的经验,是的。它是一个高度可配置的网络服务器。我猜想很多构建现代 Web 应用程序的人都将它与 Spring / Spring Boot 一起使用。在我使用 Java 的这些年里,我仍然对这个生态系统(尤其是所有 JEE 的东西)感到困惑,因为我从来没有对它有过任何要求。因此今天就到这里了:) (3认同)

Spa*_*tan 5

JBoss 和 Tomcat 都是 Java servlet 应用程序服务器,但 JBoss 远不止这些。两者之间的实质性区别在于 JBoss 提供了完整的 Java 企业版 (Java EE) 堆栈,包括 Enterprise JavaBeans 和许多其他对开发企业 Java 应用程序的开发人员有用的技术。

Tomcat 的局限性要大得多。一种思考方式是,JBoss 是一个 Java EE 堆栈,其中包括一个 servlet 容器和 Web 服务器,而 Tomcat 在大多数情况下是一个 servlet 容器和 Web 服务器。