在企業實際開發中,可以處理用戶請求的服務器分為幾種基本種類,不同的服務器處理解決不同的問題。這種靈活性為開發人員在應用程序創建和部署方面提供了很大的選擇權,但也導致了對各種類型服務器使用場景產生了困惑。
Web服務器
從基本層面上看,用戶通常通過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)等等),而且給最佳產品的選取留有余地。