为什么说Tomcat是一个Web服务器而不是一个应用服务器

很多程序员其实并不太在意他们所使用的一些基础软件设施。对于网络应用程序员来说,一个典型的例子就是:他们很难说清楚Web服务器和应用服务器有什么区别,也不太搞得清楚EAR和WAR部署包之间的不同。类似的例子还有很多。

对于“Web服务器和应用服务器之间的区别”这种问题,其实网上有很多精妙的回答,这个就是其中之一。在大多数情况下,Web服务器和应用服务器,这两个词语是基本等价的。这篇文章阐述了典型的Web服务器的工作原理。通常大家纠结的问题是:Tomcat(多被认为是Web服务器)怎么会有能力去运行企业级的应用程序。这样的话,Tomcat到底是Web服务器还是应用服务器?下面就让我来说说我自己的看法。

以前,我曾经在stackoverflow上看到一个让我很纠结的问题就是:JPA和Hibernates到底有什么区别。我回复了这个问题,但是其中有一条回复让我对Java EE规范和Java EE服务器有了更深入和细致的理解。如果你能够了解这些细节,那么区分Web服务器和应用服务器就会变得非常简单。在我的研究过程中,我找到了这篇文章,对这个问题进行了更深入的讨论。

通过更加细致的阅读JavaEE规范,会给我们的讨论带来更明晰的线索。我们知道,所谓的规范无非就是一套规则而已。也就是定义一些接口。任何一个JavaEE服务器都需要服从这些规范,并实现这些接口。你可以在这里找到那些“官方认证”的JavaEE服务器的清单。如果你把你的企业级应用程序(就是指使用到JPA,EJB或者其他JavaEE组件功能的应用程序)部署到一个符合JavaEE规范的服务器上,那么真正的应用服务器本身是不需要你的部署包包含对JavaEE组件进行实现的类库的。如果部署的时候你必须要通过自己的应用程序中自带jar文件来支持这些JavaEE组件,那你用的就是Web服务器,就像是Tomcat。

举个例子,如果你在你的程序里使用了JPA,然后你打算把程序部署到JBoss AS7服务器上,你的程序本身是不需要包含支持JPA实现的jar包的。但是如果你想把程序部署到Tomcat服务器上,你就必须要把实现JPA功能的jar包放到你的lib库中,然后再一起部署过去。这就是为什么JBoss AS7是应用服务器而Tomcat是Web服务器的原因。另一个关键的区别是,Tomcat上不能部署EAR文件,而只能部署WAR文件

原文链接: DZone 翻译: ImportNew.com - 黄小非
译文链接: http://www.importnew.com/9702.html
[ 转载请保留原文出处、译者和译文链接。]

关于作者: 黄小非

码农级科学家,半吊子艺术爱好者,逻辑和原则控。(新浪微博:@黄小非

查看黄小非的更多文章 >>



相关文章

发表评论

Comment form

(*) 表示必填项

9 条评论

  1. 生鱼片 说道:

    “在大多数请狂下,Web服务器和应用服务器”,应该是”情况“吧。

    Thumb up 3 Thumb down 0

  2. 黄小非 说道:

    没错,应该是“情况”,马上修改~

    Thumb up 0 Thumb down 0

  3. javapower 说道:

    非常不认同

    Well-loved. Like or Dislike: Thumb up 7 Thumb down 0

  4. Techni 说道:

    tomcat应该只是一套Java-servlet jsp 的实现。

    Thumb up 0 Thumb down 0

  5. Milo 说道:

    Tomcat 也不是Web服务器,早期更本没有访问静态文件的功能,不支持JPA和EAR应该是历史原因,JPA靠后,EJB太厚重,tomcat相比其他企业级应用服务器走轻量路线,它只是没加而已,规范还是支持的。

    Thumb up 0 Thumb down 0

  6. rudys 说道:

    翻译的感觉,很别扭,感觉是不是用翻译工具翻译的?

    Thumb up 1 Thumb down 0

  7. fair_jm 说道:

    但Tomcat不是有servlet和jsp的实现嘛…servlet和jsp也是Java EE规范呀…包含实现要实现多少呢….

    Thumb up 0 Thumb down 0

  8. szuIrving 说道:

    翻译感觉真的很别扭,很生硬

    Thumb up 0 Thumb down 0

  9. gubot 说道:

    web服务器和app服务器的区别:
    http://oss.org.cn/ossdocs/middleware/application_server/1/i/image004.jpg
    tomcat能响应http服务请求,可以作为一个web服务器,但是它也具有app服务器的功能,所以它同时也是一个app服务器。

    Thumb up 0 Thumb down 0

跳到底部
返回顶部