为什么说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

你可能感兴趣的:(JavaEE)