什么是WEB服务器,什么是应用服务器

什么是WEB服务器,什么是应用服务器。我一直没有搞清楚这个概念。
我也咨询过很多同事,有资深的,有普通的。也看过书,网络上查询过。
发现没有一个权威统一的,能否说服大众的答案。
有人说TOMCAT是应用服务器,也有的 说 TOMCAT只是web服务器。搞的我糊涂了,
最近发现很多人用这两个名词,特来找大家商量下。

大家一起说说。

在Java EE中,这两个有区分,Web服务器主要是表现层Jsp MVC之类,而应用服务器是运行业务逻辑的,主要是EJB架构。

当然,如果采取SSH等架构,业务逻辑和MVC都可以在Web服务器运行,那么这时也可以合起来称web服务器或应用服务器。

如果有文章分开称,就属于前者。

tomcat是标准的Web服务器,不支持EJB JTA事务等这些企业应用的关键特性。JBoss glassfish weblogic等是标准的应用服务器,因为他们都支持EJB架构,但是由于tomcat好学易用,现在EJB也开始向Tomcat迁移。



[该贴被banq于2009-04-30 14:28修改过]

那为什么很多时候要apache整合tomcat不直接用tomcat呢

提高性能,静态内容由apache负责,tomcat负责动态内容。而且可以一台apache连接多台tomcat实现负载平衡。

哦,我还以为是为了把web服务器和应用服务器给区分开呢

Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。与客户端的网络浏览器配合。
在B/S模式中,最简单架构:
1)一个用浏览器运行Applet的客户机和一个数据库服务器。
Web服务器里可以加载一个脚本解释引擎。譬如MS带ASP的IIS。次简单的B/S架构:
2)一个只运行浏览器的客户机、一个带脚本解释引擎的Web服务器、一个数据库服务器。
这种架构的缺点是界面交互层与业务逻辑层混在一起,是一碗理不清的面条。
把业务逻辑代码分离出来,放在另一个服务器上运行,就可以解决这个问题。这种服务器就叫应用服务器。
3)一个只运行浏览器的客户机、一个Web服务器、一个应用服务器、一个数据库服务器。
应用服务器的概念在B/S之前就有了。三层C/S:
只运行界面交互层代码的客户机+运行业务逻辑代码的应用服务器+解决数据持久化的数据库服务器。
这个好像最早是SUN提出并实现的。

beepbug 的说法,比较赞成。不过,按这个说法。应用服务器,web服务器这些只是一个逻辑概念。意思是说TOMCAT可以是web服务器,也可以是应用服务器,什么时候是web服务器,什么时候是应用服务器,取决于你的系统的逻辑架构设计。而不是说,tomcat就只能做WEB服务器,或只能做应用服务器的说法。

不过,我还是希望有个权威的答案。请问最早提出应用服务器的概念是什么时候,当时是怎么定义的。

我应该已经说全了,你还没看明白我的话,当然,更有可能的是我没讲明白。我再试试看:
一个容器类(或叫平台类)软件,支持HTTP协议、HTML文档格式及URL,就是一个Web服务器。譬如微软早期的IIS,就是一个纯粹的Web服务器。后来,它嵌入了ASP引擎,可以解释VBScript和JScript服务器端代码了,这时,它就可以兼作应用服务器。当然,它与J2EE应用服务器根本无法相比,但是,从功能上说,从原理上说,它勉强可以称之为应用服务器。确切地说,它是兼有一点应用服务器功能的Web服务器。因此,ASP代码是一碗理不清的面条,界面交互与业务逻辑无法划分开。
在B/S模式里,业务逻辑代码也可以在客户端里运行,譬如我说的Applet接DB;也可以部分甚至全部放在DB里;但是,最好是集中起来放在一个容器上运行。这个容器就叫应用服务器。
你说的“取决于你的系统的逻辑架构设计”,有道理。还是以那个IIS为例,如果你不用它的ASP引擎,那它自然只是一个Web服务器。
“最早提出应用服务器的概念是什么时候”?我已经说了,在传统C/S方式时已出现。不仅是提出,已有实用,且已商品化。这就是SUN的应用服务器。
SUN在这方面是绝对领先的。也许是这个太领先了,影响了它在B/S出现时,没有立即全力跟进。

太有耐心了,顶一下

spikeme的意思可能是想具体知道Tomcat的地位。我对它不很熟悉,搜索了一下,说说我的判断。
经常与Tomcat配对使用的Apache,是一个Web服务器。它对HTML页面具有强大的解释能力,但是不能解释嵌入页面内的服务器端脚本代码(JSP/Servlet)。早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎。Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内,Tomcat进程独立于Apache进程运行。而且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码可以分离了。因此,有人把Tomcat叫做轻量级应用服务器。

Banq>>>但是由于tomcat好学易用,现在EJB也开始向Tomcat迁移。
J2EE标准包含JSP/Servlet,但是,有JSP/Servlet并不意味着就是J2EE。Tomcat只是在中小型系统和并发访问用户不是很多的场合下被普遍使用。WebSphere、WebLogic等才是真正企业级应用服务器。

gettouch>>>那为什么很多时候要apache整合tomcat不直接用tomcat呢
Tomcat也具有静态HTML页面解释能力,但很弱。而Apache具有很强大的HTML解释能力。

spikeme>>>不过,按这个说法。应用服务器,web服务器这些只是一个逻辑概念。意思是说TOMCAT可以是web服务器,也可以是应用服务器,什么时候是web服务器,什么时候是应用服务器,取决于你的系统的逻辑架构设计。而不是说,tomcat就只能做WEB服务器,或只能做应用服务器的说法。
对,看你怎么用。譬如usejava说的“提高性能,静态内容由apache负责,tomcat负责动态内容。而且可以一台apache连接多台tomcat实现负载平衡。”,这里,apache就是做Web服务器,而Tomcat则是应用服务器。应用服务器是可以简单并联的。
[该贴被beepbug于2009-05-05 21:28修改过]

看了上面的观点,也就是说,web服务器更接近于静态页面的处理,它包含于应用服务器之中,应用服务器隐含着一个类似于jboss的容器服务器来处理来自用户的复杂请求?另外还承担比如负载均衡之类的性能调优方面的考虑?而我感觉web服务器是相对于来自80端口的bs请求的,而应用服务器则对应一切来自外界的请求,虽然也是包含关系。