标题：应用服务器
应用服务器的定义
应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。
简单的说，能实现动态网页技术的服务器叫做应用服务器。
Web应用程序驻留在应用服务器(Application Server)上。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。它也提供低级的服务，如HTTP协议的实现和数据库连接管理。Servlet容器仅仅是应用服务器的一部分。除了Servlet容器外，应用服务器还可能提供其他的Java EE(Enterprise Edition)组件，如EJB容器，JNDI服务器以及JMS服务器等。
市场上可以得到多种应用服务器，其中包括Apache的Tomcat、Caucho Technology的Resin、Macromedia的JRun、JBoss Application Server、BEA的WebLogic、IBM的WebSphere等。其中有些如WebLogic、WebSphere不仅仅是Servlet容器，它们也提供对EJB(Enterprise JavaBeans)、JMS(Java Message Service)以及其他Java EE技术的支持。每种类型的应用服务器都有自己的优点、局限性和适用性。[1]
应用服务器的分类
通常，根据确定文档内容的时间，所有文档可以划分为如下三类。
o 静态o 静态：静态We b 文档是一个存储于We b 服务器的文件。静态文档的作者在写作的时候确定文档的内容。由于文档内容不会变化，所以对静态文档的每次访问都返回相同结果。
o 动态o 动态：动态web文档不是以一个预先定义的格式存在，而是在浏览器访问web服务器时创建。当一个请求到达时，web服务器运行一个应用程序创建动态文档（dynamic documents），服务器返回程序的输出作为应答。由于每次访问都要创建新的文档，动态文档的内容是变化的。
o 活动o 活动：一个活动文档不完全由服务器一端说明，而是包括一个计算并显示值的程序。当浏览器访问活动文档时，服务器返回一个浏览器可以本地执行的程序。当该程序运行时，它可以和用户交互执行并不停地改变显示。这样，活动文档的内容是不固定的-只要用户让程序保持运行，它总是在不停地变化。静态文档的主要优点在于它的简单、可靠性和性能。由于静态文档是直接指定格式。它可以由不懂编程的人创建。更重要的是，在已经创建和测试之后，静态文档永远是正确的。最后，浏览器可以快速存取文档，同时通过把文档放在本地盘上的缓冲区内以加快以后对这些文档的访问速度。 静态文档的主要缺点是不灵活-当信息变化时文档必须重新设计。另外，改变是很耗费时间的，因为它需要人工修改文件。因此，静态文档不适合频繁变化的报告信息。动态文档的主要优点是它报告当前信息的能力。例如，一个动态文档可以用来报告股市行情、天气预报或音乐会售票情况等内容。当浏览器申请信息的时候，服务器运行一个应用程序，访问所需要的信息，并创建一个文档，服务器于是将该文档返回给浏览器。动态文档把任务放在服务器一端，浏览器采用和静态文档同样的方法访问动态文档。实际上，从浏览器的角度来看。动态文档和静态文档是无区别的。由于动态文档和静态文档都采用H T M L 编写，浏览器不知道服务器是从一个磁盘文件还是计算机程序中取得文档。动态文档的主要缺点是增加成本和不能显示变化的信息。和静态文档类似，动态文档在浏览器取得文档后不会再改变。因此在信息发送给浏览器之后，文档就开始过时。例如一个报告股市信息的动态文档，由于股市信息变化迅速，当用户访问时文档很快就过时。动态文档的创建和访问成本比静态文档昂贵。创建动态文档的代价较高，因为动态文档的创建者必须懂得如何写程序。另外，程序必须仔细编写和广泛测试，以保证输出的合法性。验证这样一个程序的正确性是很困难的，因为输入可以包含不同来源的多种数据。动态文档除了创建成本高，所需的硬件成本也较高，因为服务器端需要更强大的计算机。最后取出动态文档需要的时间稍多些，因为服务器需要额外的时间去运行程序创建文档。尽管在申请到达时动态文档才创建，但信息可能很快过时，活动文档相对于动态文档的主要优点在于它持续更改信息的能力。例如，只有活动文档能够快速改变显示以显示动画。更重要的是，活动文档能够直接访问信息源并连续更改显示。例如，一个显示股市行情的活动文档可以连续读取股市信息，并且不需要用户干预而自动修改显示。活动文档的主要缺点是创建和运行这种文档所需的额外费用，同时缺少安全性。首先，活动文档的显示需要更复杂的浏览器软件和一个强有力的计算机运行浏览器。另外，写正确的活动文档比写其他画面需要更多的编程技巧，所得到的结果文档更难于测试。而且，由于活动文档必须运行在客户端而不是服务器端，程序必须解决在不同客户上的兼容性问题，最后，活动文档存在着潜在的安全性问题，因为文档既输入信息又输出信息。
概括
Web 文档根据文档内信息改变的时间可分为三类。静态文档的信息只有当作者修改时才会改变，动态文档的信息在服务器端收到文档申请时改变，活动文档显示的信息在文档下载到浏览器一端运行后改变。由于创建动态文档的责任在管理文档的服务器一端，支持动态文档也只需修改服务器。实际上，变化意味着扩展，管理动态文档的服务器也包含了处理静态文档的代码。处理动态文档的Web服务器需要三个特性。
首先，服务器程序必须扩展，当每次请求到达时，能够执行一个单独的创建文档的应用程序。服务器必须编成能够捕获应用程序的输出，并且将该文档返回给浏览器。
其次，必须为每个动态文档写一个单独的应用程序。
最后，服务器必须配置成能够知道哪一个URL 对应于动态文档和哪一个URL 对应于静态文档。对每个动态文档，配置时必须说明产生文档的应用程序。每个申请包含着一个对应动态或静态文档的URL，服务器使用配置信息和收到的请求中的URL决定如何处理。如果配置信息说明申请中的URL对应着一个静态文档，服务器就跟往常一样取出文件。如果申请中的URL对应着动态文档，服务器选择生成该文档的应用程序，运行程序，并且把程序的输出作为文档返回给浏览器。
应用服务器和WEB服务器的区别
通俗的讲，Web服务器传送(serves)页面使浏览器可以浏览，然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点，你可以说：Web服务器专门处理HTTP请求(request)，但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。
下面让我们来细细道来：
Web服务器(Web Server)
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request)，会返回一个HTTP响应 (response)，例如送回一个HTML页面。为了处理一个请求(request)，Web服务器可以响应(response)一个静态页面或图片， 进行页面跳转(redirect)，或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本，JSP(JavaServer Pages)脚本，servlets,ASP(Active Server Pages)脚本，服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者 注：脚本)的目的如何，这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。
要知道，Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时，它只单纯的把请求(request)传递给可以很好的处理请求 (request)的程序(译者注：服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响 应(response)的环境，而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing)，数据库连接(database connectivity)和消息(messaging)等功能。
虽然Web 服务器不支持事务处理或数据库连接池，但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability)，例如负载平衡(load balancing)，缓冲(caching)。集群特征(clustering-features)经常被误认为仅仅是应用程序服务器专有的特征。
应用程序服务器(The Application Server)
根据我们的定义，作为应用程序服务器，它通过各种协议，可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向 浏览器发送HTML以供浏览，而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法(或过程 语言中的一个函数)一样。
应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至 是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反，这种信息就是程序逻 辑(program logic)。 正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。
在大多数情形下，应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的，例 如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外，应用程序服务器可以管理自己的资源，例如看大门的工作(gate-keeping duties)包括安全(security)，事务处理(transaction processing)，资源池(resource pooling)， 和消息(messaging)。就象Web服务器一样，应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。[2]