beepbug
2009-05-01 13:13

Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。与客户端的网络浏览器配合。

在B/S模式中,最简单架构:

1)一个用浏览器运行Applet的客户机和一个数据库服务器。

Web服务器里可以加载一个脚本解释引擎。譬如MS带ASP的IIS。次简单的B/S架构:

2)一个只运行浏览器的客户机、一个带脚本解释引擎的Web服务器、一个数据库服务器。

这种架构的缺点是界面交互层与业务逻辑层混在一起,是一碗理不清的面条。

把业务逻辑代码分离出来,放在另一个服务器上运行,就可以解决这个问题。这种服务器就叫应用服务器。

3)一个只运行浏览器的客户机、一个Web服务器、一个应用服务器、一个数据库服务器。

应用服务器的概念在B/S之前就有了。三层C/S:

只运行界面交互层代码的客户机+运行业务逻辑代码的应用服务器+解决数据持久化的数据库服务器。

这个好像最早是SUN提出并实现的。

spikeme
2009-05-01 23:05

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

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

beepbug
2009-05-02 07:47

我应该已经说全了,你还没看明白我的话,当然,更有可能的是我没讲明白。我再试试看:

一个容器类(或叫平台类)软件,支持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出现时,没有立即全力跟进。

gettouch
2009-05-04 09:40

太有耐心了,顶一下

beepbug
2009-05-05 21:26

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修改过]