Tomcat,JBoss和Glassfish有什么区别?


445

我开始研究Enterprise Java,而我所关注的书提到它将使用JBoss。Netbeans随附Glassfish。我过去曾经使用过Tomcat。

这三个程序有什么区别?



70
这些问题是开源的“祸根”。有时候,太多的选择几乎可以做同样的事情。对于新手来说,它可能导致分析瘫痪。Eclipse是主要的IDE,但几乎所有值得购买的书籍都在使用netbeans进行开发和教学。当我看到大多数企业在现实生活中使用Jboss时,它将使用Glassfish。使用每个容器都有一些学习过程,对于新手来说可能会非常沮丧。
user798719

现在JBoss被称为[WildFly](en.wikipedia.org/wiki/WildFly),而JBoss是由公司开发的WildFly。
Chaminda Bandara'5

Answers:


516

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


77
读者注意,JBoss现在像GlassFish一样通过了Java EE 6 Full Profile认证。Tomcat现在也已通过TomEE认证Java EE 6 Web Profile,并支持EJB,CDI,JSF,JPA等。
David Blevins

10
@DavidBlevins那么现在有什么区别?
aldo.roman.nurena

23
@ aldo.roman.nurena差异很小。GlassFish和JBoss都支持Java EE完整概要文件,因此它们支持JAX-RPC和CORBA等旧技术。我们没有在Tomcat中的Java EE版本包括这些,但目前所有的技术是有喜欢JAX-RS,JAX-WS,JMS,CDI,JPA,JSF,EJB,JTA等
大卫Blevins

@DavidBlevins如果我们想在JBoss和Glassfish之间进行选择,哪个更适合生产环境?是否有参考资料可帮助您理解?
Sudhakar Chavali 2014年

1
在stackoverflow上进行编辑是解决答案的正确方法,这些答案与实际情况相去甚远。
沃伦·P

358

Tomcat仅仅是HTTP服务器和Java Servlet容器。JBoss和GlassFish是成熟的Java EE应用程序服务器,包括EJB容器和该堆栈的所有其他功能。另一方面,Tomcat的内存占用空间较小(约60-70 MB),而那些Java EE服务器的重量仅为数百兆。Tomcat在简单的Web应用程序或使用不需要完整Java EE服务器的诸如Spring之类的框架的应用程序中非常流行。可以说,Tomcat服务器的管理更容易,因为活动部件更少。

但是,对于确实需要完整的Java EE堆栈的应用程序(或者至少可以很容易地将其固定在Tomcat上的其他部分)... JBoss和GlassFish是最受欢迎的两种开源产品(第三个是Apache Geronimo) ,在其上构建IBM WebSphere的免费版本)。JBoss具有更大,更深入的用户社区,以及更成熟的代码库。但是,JBoss在实施当前Java EE规范方面远远落后于GlassFish。此外,对于那些偏爱基于GUI的管理系统的人来说... GlassFish的管理控制台非常漂亮,而JBoss中的大多数管理都是通过命令行和文本编辑器完成的。GlassFish直接来自Sun / Oracle,具有所有优势。JBoss不受Sun / Oracle的控制,它具有THAT可以提供的所有优点。


3
我尚未验证,但有人声称对于常规项目,EE 6容器使用的内存可能比Spring +其依赖项 25%。
2012年

2
+1,一个很好的答案,尽管我赞成@Arjan的评论:与部署的应用程序需要多少内存相比,这些服务器本身使用的内存确实并不那么重要(而这在很大程度上取决于所使用的技术。的记忆猪)
Shivan Dragon

10
呵呵...关于“ servlet容器”与“ JEE服务器”的讨论似乎总是变成对“ Spring”与“ EJB / JSF”的讨论。我已经使用JEE多年了,当客户付款给我时,我总是很高兴这样做。但是,我的想法是:[1]双方的大多数基准测试都来自有偏见的资源,我自己从未注意到这两个协议栈之间存在巨大的资源差异,[2] Spring比JEE“标准”更具可移植性,切换服务器似乎总是很痛苦,最后但并非最不重要的是
Steve Perkins,2012年

7
... [3] Spring和Hibernate的用户社区绝对使纯JEE规范的用户社区相形见war。如果您在使用Spring时遇到麻烦并在StackOverflow上发布问题,那么它将被成百上千的人阅读,并且您将在几分钟内得到一个确定的答案。提出一个有关JEE的问题,它将被十几个人阅读……而且有一半的时间,您得到的唯一答复是“它对我有用!”。JEE标准似乎总是迟到一天,而且缺一美元,当我在一个真正的应用程序中遇到这些问题时,我感到非常孤独。
史蒂夫·珀金斯

1
嗯...截至去年,Tomcat仅13 MB,GlassFish 53MB,JBoss 127 MB。我不会考虑那些JavaEE服务器(GlassFish和JBoss)数百兆。如果您在谈论WebLogic或WebSphere,那么我们在谈论GB。信息发现在zeroturnaround.com/rebellabs/...
Ĵ将

81

您应该将GlassFish用于Java EE企业应用程序。要考虑的一些事情:

一个网络服务器方式:处理HTTP请求(通常来自浏览器)。

Servlet容器(例如Tomcat的)手段:它可以处理的servlet&JSP。

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


Tomcat-由Apache社区运行-开源,有两种形式:

  1. Tomcat-Web概要文件 -轻量级的,仅是servlet容器,不支持EJB,JMS等Java EE功能。
  2. Tomcat EE-这是经过认证的Java EE容器,它支持所有Java EE技术。

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

JBoss-由RedHat运行这是对JavaEE的全栈支持,并且是经过认证的Java EE容器。这包括将Tomcat内部作为Web容器。这也有两种味道:

  1. 社区版本称为应用程序服务器(AS) -这将仅具有社区支持。
  2. 企业应用服务器(EAP) -为此,您可以拥有基于订阅的许可证(它基于服务器上具有的内核数。)

Glassfish-由Oracle运行这也是经过完全堆栈认证的Java EE容器。它有自己的Web容器(不是Tomcat)。它来自Oracle本身,因此所有新规范都将首先通过Glassfish测试和实现。因此,它始终会支持最新规范。我不知道它的支持模型。


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

14

jboss和glassfish包括一个servlet容器(例如tomcat),但是两个应用程序服务器(jboss和glassfish)也提供了一个bean容器(我想还有其他一些东西)


2
Glassfish可以做Tomcat可以做的任何事情,但这并不意味着它“包含”了Tomcat。Glassfish有它自己的Web容器。
马丁2010年

5
更清楚地说,“ like tomcat”是正确的,但是JBoss实际上将Tomcat嵌入为servlet容器实现。
Chucky 2012年

@Chucky不再了
NimChimpsky '16

8

JBoss和Glassfish基本上是完整的Java EE应用服务器,而Tomcat只是一个Servlet容器。就Tomcat和Jetty而言,JBoss,Glassfish以及WebSphere,WebLogic等之间的主要区别在于完整的应用程序服务器提供的功能。当拥有全栈Java EE应用服务器时,您可以受益于所选供应商的所有实现,并且可以受益于EJB,JTA,CDI(JAVA EE 6 +),JPA,JSF,JSP / Servlet等等。另一方面,使用Tomcat只能从JSP / Servlet中受益。但是,对于诸如Spring和Guice之类的高级框架而言,使用全栈应用服务器的许多主要优势都可以减轻,并且假设Spring Ecosystem中有一个框架是男子气概的,


8

阅读这些答案时,使用Tomcat似乎有些气disc。但是,最不能提及的是,您可以使用tomcat获得相同或几乎相同的用例,但这需要您添加所需的库(通过Maven或使用的任何包含系统)。

我一直在使用JPA和EJB来运行tomcat,它的配置工作量很小。


1
@MarcoOttina以我的经验,是的。这是一个高度可配置的Web服务器。我想很多构建现代Web应用程序的人都将它与Spring / Spring Boot一起使用。在使用Java的所有这些年里,我仍然对生态系统(尤其是所有JEE东西)感到困惑,因为我从未对此有任何要求。因此,今天结束于今天:)
jocull

4

JBoss和Tomcat都是Java Servlet应用程序服务器,但是JBoss的功能更多。两者之间的实质区别是JBoss提供了完整的Java Enterprise Edition(Java EE)堆栈,其中包括Enterprise JavaBeans和许多其他对开发企业Java应用程序的开发人员有用的技术。

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


3

Apache tomcat只是唯一的serverlet容器,它不支持企业Java应用程序(JEE)。JBoss和Glassfish支持JEE应用程序,但Glassfish比JBOSS服务器要重得多:参考幻灯片

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.