WEBserver、应用程序server、HTTPserver差别

  WEBserver、应用程序server、HTTPserver有何差别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种server,这些问题困惑了非常久,今天最终梳理清楚了:

-Webserver的基本功能就是提供Web信息浏览服务。它仅仅需支持HTTP协议、HTML文档格式及URL。

与client的网络浏览器配合。由于Webserver主要支持的协议就是HTTP,所以通常情况下HTTPserver和WEBserver是相等的(有没有支持除HTTP之外的协议的webserver,作者没有考证过),说的是一回事。

  应用程序server(简称应用server),我们先看一下微软对它的定义:”我们把应用程序server定义为“作为server运行共享业务应用程序的底层的系统软件”。 就像文件server为非常多用户提供文件一样,应用程序server让多个用户能够同一时候使用应用程序(一般是客户创建的应用程序)”

  通俗的讲,Webserver传送(serves)页面使浏览器能够浏览。然而应用程序server提供的是client应用程序能够调用(call)的方法(methods)。确切一点。你能够说:Webserver专门处理HTTP请求(request),可是应用程序server是通过非常多协议来为应用程序提供(serves)商业逻辑 (business logic)。

  以Java EE为例,Webserver主要是处理静态页面处理和作为 Servlet容器,解释和运行servlet/JSP,而应用server是运行业务逻辑的,主要是EJB、 JNDI和JMX API等J2EE API方面的,还包括事务处理、数据库连接等功能,所以在企业级应用中。应用server提供的功能比WEBserver强大的多。

  以这样的定义,IIS、Apache、Tomcat都能够属于Webserver,Weblogic、WebSphere都属于应用server。

  Apache:在Webserver中,Apache是纯粹的Webserver,常常与Tomcat配对使用。它对HTML页面具有强大的解释能力。可是不能解释嵌入页面内的server端脚本代码(JSP/Servlet)。

  Tomcat:早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内。Tomcat进程独立于Apache进程运行。 并且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码能够分离了。

因此,有人把Tomcat叫做轻量级应用server。

  IIS:微软早期的IIS。就是一个纯粹的Webserver。

后来,它嵌入了ASP引擎。能够解释VBScript和JScriptserver端代码了。这时,它就能够兼作应用server。

当然。它与J2EE应用server根本无法相比,可是,从功能上说,从原理上说,它勉强能够称之为应用server。确切地说,它是兼有一点应用server功能的Webserver。

  综上:Apache是纯粹的webserver。而Tomcat和IIS由于具有了解释运行server端代码的能力,能够称作为轻量级应用server或带有server功能的Webserver。Weblogic、WebSphere由于能提供强大的J2EE功能。毫无疑问是绝对的应用server。对于处于中间位置的Tomcat,它能够配合纯WebserverApache一起使用,也能够作为应用server的辅助与应用server一起部署:

  • 一、Tomcat与应用server

      到眼下为止,Tomcat一直被觉得是Servlet/JSP API的运行器,也就所谓的Servlet容器。然而,Tomcat并不仅仅如此,它还提供了JNDI和JMX API的实现机制。尽管如此,Tomcat仍然还不能算是应用server,由于它不提供大多数J2EE API的支持。

      非常有意思的是,眼下很多的应用server通常把Tomcat作为它们Servlet和JSP API的容器。由于Tomcat同意开发人员仅仅需通过增加一行致谢,就能够把Tomcat嵌入到它们的应用中。遗憾的是。很多商业应用server并没有遵守此规则。

      对于开发人员来说,假设是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成Java Web应用的话。选择Tomcat是一个优秀的解决方式;可是为了寻找支持其他的J2EE API,那么寻找一个应用server或者把Tomcat作为应用server的辅助。将是一个不错的解决方式;第三种方式是找到独立的J2EE API实现,然后把它们跟Tomcat结合起来使用。尽管整合会带来相关的问题,可是这样的方式是最为有效的。

  • 二、Tomcat与Webserver

      Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能依据实时须要。产生动态网页内容。而对于Webserver来说。 Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力;Tomcat则既能为动态网页服务。同一时候也能为静态网页提供支持。尽管它没有通常的Webserver快、功能也不如Webserver丰富,可是Tomcat逐渐为支持静态内容不断扩充。大多数的Webserver都是用底层语言编写如C。利用了对应平台的特征,因此用纯Java编写的Tomcat运行速度不可能与它们相提并论。

      一般来说,大的站点都是将Tomcat与Apache的结合,Apache负责接受全部来自client的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完毕处理后,将响应传回给Apache。最后Apache将响应返回给client。

      并且为了提高性能。能够一台apache连接多台tomcat实现负载平衡。

      关于WEBserver、应用程序server的更具体差别能够參考以下这篇文章:

      通俗的讲,Webserver传送(serves)页面使浏览器能够浏览,然而应用程序server提供的是client应用程序能够调用(call)的方法(methods)。

    确切一点,你能够说:Webserver专门处理HTTP请求(request),可是应用程序server是通过非常多协议来为应用程序提供(serves)商业逻辑 (business logic)。

      以下让我们来细细道来:

      Webserver(Web Server)

      Webserver能够解析(handles)HTTP协议。当Webserver接收到一个HTTP请求(request),会返回一个HTTP响应 (response),比如送回一个HTML页面。为了处理一个请求(request),Webserver能够响应(response)一个静态页面或图片,进行页面跳转(redirect)。或者把动态响应(dynamic response)的产生托付(delegate)给一些其他的程序比如CGI脚本。JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,server端(server-side)JavaScript。或者一些其他的server端(server-side)技术。

    不管它们(译者注:脚本)的目的怎样,这些server端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器能够浏览。

      要知道。Webserver的代理模型(delegation model)非常easy。当一个请求(request)被送到Webserver里来时,它仅仅单纯的把请求(request)传递给能够非常好的处理请求 (request)的程序(译者注:server端脚本)。Webserver仅仅提供一个能够运行server端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。server端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

      尽管Webserver不支持事务处理或数据库连接池。但它能够配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability)。比如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)常常被误觉得仅仅是应用程序server专有的特征。

      应用程序server(The Application Server)

      依据我们的定义。作为应用程序server。它通过各种协议。能够包括HTTP。把商业逻辑暴露给(expose)client应用程序。

    Webserver主要是处理向浏览器发送HTML以供浏览,而应用程序server提供訪问商业逻辑的途径以供client应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法 (或过程语言中的一个函数)一样。

      应用程序server的client(包括有图形用户界面(GUI)的)可能会运行在一台PC、一个Webserver或者甚至是其他的应用程序server上。在应用程序server与其client之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。

    相反,这样的信息就是程序逻辑(program logic)。正是由于这样的逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以client才干够随心所欲的使用这样的被暴露的商业逻辑。

      在大多数情形下,应用程序server是通过组件 (component) 的应用程序接口(API)把商业逻辑暴露(expose)(给client应用程序)的,比如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序server的EJB(Enterprise JavaBean)组件模型。此外,应用程序server能够管理自己的资源。比如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing)。资源池(resource pooling),和消息(messaging)。就象Webserver一样,应用程序server配置了多种可扩展(scalability)和容错(fault tolerance)技术。

一个样例

  比如。设想一个在线商店(站点)提供实时定价(real-time pricing)和有效性(availability)信息。

这个站点(site)非常可能会提供一个表单(form)让你来选择产品。当你提交查询 (query)后,站点会进行查找(lookup)并把结果内嵌在HTML页面中返回。站点能够有非常多种方式来实现这样的功能。我要介绍一个不使用应用程序server 的情景和一个使用应用程序server的情景。观察一下这两中情景的不同会有助于你了解应用程序server的功能。

情景1:不带应用程序server的Webserver

  在此种情景下,一个Webserver独立提供在线商店的功能。

Webserver获得你的请求(request),然后发送给server端(server- side)能够处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件。如properties和XML文件等)中查找定价信息。一旦找到,server端(server-side)程序把结果信息表示成(formulate)HTML形式。最后Webserver把会它发送到你的Web浏览器。

简而言之,Webserver仅仅是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

情景2:带应用程序server的Webserver

  情景2和情景1相同的是Webserver还是把响应(response)的产生托付(delegates)给脚本(译者注:server端 (server-side)程序)。然而,你能够把查找定价的商业逻辑(business logic)放到应用程序server上。

由于这样的变化,此脚本仅仅是简单的调用应用程序server的查找服务(lookup service),而不是已经知道怎样查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应(response)时就能够使用该服务的返回结果了。

  在此情景中。应用程序server提供(serves)了用于查询产品的定价信息的商业逻辑。(server的)这样的功能(functionality)没有指出有关显示和client怎样使用此信息的细节。相反client和应用程序server仅仅是来回传送数据。当有client调用应用程序server的查找服务(lookup service)时,此服务仅仅是简单的查找并返回结果给client。

  通过从响应产生(response-generating)HTML的代码中分离出来。在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的client。比如收款机。也能够调用相同的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的由于信息内嵌在 HTML页中了。

  总而言之,在情景2的模型中,在Webserver通过回应HTML页面来处理HTTP请求(request),而应用程序server则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

警告(Caveats)

  如今,XML Web Services已经使应用程序server和Webserver的界线混淆了。

通过传送一个XML有效载荷(payload)给server,Webserver如今能够处理数据和响应(response)的能力与曾经的应用程序server相同多了。

  另外。如今大多数应用程序server也包括了Webserver。这就意味着能够把Webserver当作是应用程序server的一个子集(subset)。

尽管应用程序server包括了Webserver的功能,可是开发人员非常少把应用程序server部署(deploy)成这样的功能(capacity)(译者注:这样的功能是指既有应用程序server的功能又有Webserver的功能)。

相反,假设须要,他们一般会把Webserver独立配置,和应用程序server一前一后。这样的功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序server了),分开配置(专门的Webserver。集群(clustering)等等),并且给最佳产品的选取留有余地。

WEBserver、应用程序server、HTTPserver差别的更多相关文章

  1. 控制面板里找不到“应用程序server”这个项目,Windows XP中金蝶安装时无“应用程序server”的解决的方法

    要注意先安装IIS,再安装VS2008. 我们会常常在控制面板里找不到"应用程序server"这个项目.我们须要依照以下的步骤来操作就会Ok. 1.下载IIS6,放置到D盘根文件夹 ...

  2. UNIX网络编程卷1 时间获取程序server TCP 协议相关性

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码:  这是一个简单的时间获取server程序.它和时间获取程序client一道工作. ...

  3. 微信小程序Server端环境配置

    主要内容:1. SSL免费证书申请步骤2. Nginx HTTPS 配置3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请 ...

  4. vue制作小程序--server

    服务端代码,开发者工具有提供 指南 https//cloud.tencent.com/document/product/619/11442 参考文档API https://developers.wei ...

  5. webserver and application server

    http://www.diffen.com/difference/Application_Server_vs_Web_Server http://www.differencebetween.com/d ...

  6. UNIX网络编程卷1 时间获取程序server UDP 协议无关

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/ ...

  7. python_tornado

    1.创建Tornado服务器    1.创建Application对象        Application是Torando最核心的类        所有关于服务器的配置信息都写在Applicatio ...

  8. [500lines]500行代码写web server

    项目地址:https://github.com/aosabook/500lines/tree/master/web-server.作者是来自Mozilla的Greg Wilson.项目是用py2写成. ...

  9. 【收藏】十大Webserver漏洞扫描工具

    如今有很多消息令我们感到Web的危急性,因此,当前怎样构建一个安全的Web环境成为网管员和安全管理员们义不容辞的责任.可是巧妇难为无米之炊,该选择哪些安全工具呢? 扫描程序能够在帮助造我们造就安全的W ...

随机推荐

  1. Android开发之onCreate

    最近看了一些开发人员做的APP开发,虽然都实现了比较完美的功能,不过很多地方很是牵强!我觉得:作为一个合格软件工程师,最重要的不是你写过多少代码,而是你研究过多少代码!所以,我更倡导多研究系统原本定制 ...

  2. WebStrom配置多个项目的Dweployment时,设置默认的启动配置

    有时候,我们在WebStrom中打开多个项目,但是每个项目可能的Deployment的配置不同,所以每次在项目中时,可能打开的网页并不对.所以需要设置默认的启动的Deployment.下面的内容是设置 ...

  3. Windows API常用函数

    转自:http://www.cnblogs.com/xiashengwang/p/4026259.html .NET中虽然类库很强,但还是有些时候功能有限,掌握常用的api函数, 会给我们解决问题提供 ...

  4. python git log

    # -*- coding: utf-8 -*- # created by vince67 Feb.2014 # nuovince@gmail.com   import re import os imp ...

  5. Mybatis通用分页

    分页分为真分页和假分页,而 MyBatis 本身没有提供基于数据库方言的分页功能,而是基于 JDBC 的游标分页,很容易出现性能问题.网上提供的一个解决方案感觉还不错,是基于 MyBatis 本身的插 ...

  6. HDOJ 3359 Kind of a Blur

    用高斯消元对高斯模糊的图像还原.... Kind of a Blur Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/327 ...

  7. #include <>与#include""区别

    <>先去系统目录中找头文件,如果没有在到当前目录下找.所以像标准的头文件 stdio.h.stdlib.h等用这个方法. 而""首先在当前目录下寻找,如果找不到,再到系 ...

  8. Laravel之任务调度

    一.基本简介 任务调度定义在app/Console/Kernel.php 文件的schedule 方法中,该方法中已经包含了一个示例.你可以自由地添加你需要的调度任务到Schedule 对象. 二.开 ...

  9. Laravel之Eloquent ORM关联

    一.一对一 1.主对从(hasOne) 从User模型中取出用户的手机 User模型中: /** * 获取关联到用户的手机 */ public function phone() { return $t ...

  10. VB断点调试

    最近都在敲机房收费系统,这个系统是我们第一次自己在没有源代码的情况下进行的系统. 写程序的时候逻辑非常重要,可是我们还要清楚非常多时候你以为的并非你以为的! 就像在敲机房的时候,我们明明理清了逻辑.并 ...