在企业实际开发中,可以处理用户请求的服务器分为几种基本种类,不同的服务器处理解决不同的问题。这种灵活性为开发人员在应用程序创建和部署方面提供了很大的选择权,但也导致了对各种类型服务器使用场景产生了困惑。
从基本层面上看,用户通常通过Web浏览器向系统提交请求。(为了清楚起见,我们暂时忽略所有其他类型的客户端(RMI,CORBA,COM / DCOM,定制等)Web请求必须由Web服务器接收 (也称为 HTTP服务器)。该Web服务器必须处理标准的HTTP请求和响应,然后将HTML返回给请求用户。在服务器环境中执行的代码可能是CGI驱动的,Servlet,ASP或其他服务器端编程语言,但最终的结果是Web服务器将HTML传递给用户。
Web服务器可能需要执行一个应用程序来响应用户请求,它可能会生成新闻项目列表,或者处理用户填写的表单内容提交到留言评论区。如果服务器应用程序被编写为Java Servlet,则需要一个地方来执行,而这个地方通常被称为 Servlet引擎。根据Web服务器的不同,此引擎可能是内部的,外部的或者其他完全不同的组件。与传统的CGI环境不同,CGI脚本是在每次向服务器发送请求时启动的。这个持久性提供了一个servlet连接,以及一个维护每个HTTP请求之间状态的简单方法。JSP页面通常与servlet引擎绑定在一起,并且会在与servlet相同的空间/应用程序内执行。
有许多产品以不同的方式处理Web服务和Servlet引擎。Netscape / iPlanet Enterprise Server将Servlet引擎直接构建到Web服务器中并在相同的进程空间内运行。Apache要求servlet引擎在外部进程中运行,并通过TCP / IP套接字与引擎通信。其他服务器(如MS IIS)并未正式支持servlet,并且需要附加产品才能添加该功能。
当你需要使用Enterprise JavaBeans(以及其他J2EE组件,如JMS和CORBA)时,应用服务器就该上场了。一个 应用服务器 是提供企业计算相关的附加功能的全面的应用级服务器,例如,负载均衡,数据库访问类,事务处理和消息传递服务等等。
EJB应用服务器提供了一个EJB容器,它是bean将执行的环境,并且该容器将根据需要管理事务,线程池和其他问题。这些应用服务器通常是独立产品,开发人员通过远程对象访问API将他们的servlet / JSP页面绑定到EJB组件中。根据应用程序服务器的不同,程序员可以使用CORBA或RMI与其bean进行通信,但基准标准是使用JNDI根据需要来定位以及创建对EJB引用。
目前,最容易混淆是,许多应用程序服务器提供商在其产品中包含部分或全部这些组件。如果你使用过或者了解过WebLogic(http://www.beasys.com/),你会发现WebLogic包含Web服务器,servlet引擎,JSP处理器,JMS工具以及EJB容器。理论上,像这样的产品足以应对处理网站开发的各个方面。
在大部分的实践中,你很可能会使用此类产品来管理/提供EJB实例,而专用Web服务器则处理特定的HTTP请求。
现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选取留有余地。