Java 應用程序可以在服務器上運行,但是不管是在客戶機-服務器環境下,還是在基于 Web 的環境下,JDK 中都沒有提供讓 Java 應用程序專用于服務器機器的接口或包。熟悉到 Java 在 Web 環境下作為一種服務器語言的潛力,Sun Microsystems 編寫了 Java Servlet 規范。servlet 在許多方面與 applet 相似,它是專門為在 Web 服務器機器上運行而設計的 Java 程序:
“servlet 是由容器治理的 Web 組件,可產生動態內容。servlet 是一種小型的、與平臺無關的 Java 類,被編譯成體系結構中立的字節代碼,這種代碼可以動態地加載到一個 web 服務器上,并由此 web 服務器運行。servlet 通過一種由 servlet 容器實現的請求-響應模型與 Web 客戶機進行交互。這種請求-響應模型建立在超文本傳輸協議 (HTTP) 行為的基礎之上。”(見 JavaSoft 的“Java Servlet API Specification”)
在一臺 Web 服務器控制下,在多臺服務器上運行若干小型用戶程序,這種想法并不新鮮 — 一段時間以來,公共網關接口 (CGI) 程序(常被稱為 CGI 腳本)一直起著這種作用,并推動了 Web 的普及。但 Java servlet 可以以更高的效率和可移植性來實現這一目的,因而可望最終會取代 CGI 程序。為 servlet 提供運行時環境的軟件(通常被稱為 servlet 引擎)可以添加到現有的、本身并不支持 Java 可執行程序的 Web 服務器上。
Java servlet 的出現,為應用程序員使用 Java 來創建 Web 應用程序開辟了新的途徑。但是,僅有 servlet 還不能為真正的企業計算提供完整的模型。CGI 應用程序本身往往不是完整的應用程序,在處理接收自 Web 瀏覽器上用戶的信息請求時,CGI 只是整個處理過程中的一個中間步驟。例如,CGI 應用程序的一種常見用途是訪問數據庫。將它用于這種任務時,CGI 程序提供一種方法,將用戶的數據請求連接到能滿足這種請求的企業數據庫。CGI 程序經常充當一種中間軟件,從 Web 瀏覽器接收請求,決定必須調用哪些計算資源來滿足這些請求,并向瀏覽器發回響應。Java servlet 與 CGI 程序一樣,最適合充當連接前端 Web 請求與后端數據資源的中間層組件。
三層體系結構 Web 編程向服務器端 Java 應用程序的演化,也帶來了體系結構的演化,使它脫離了常規的客戶機-服務器兩層模型,而向一種三層方法發展。兩層模型當時曾經具有創新意義,因為它將一些計算任務從主處理器上卸載到靈巧的客戶機。常規的基于 LAN 的數據庫應用程序就是一個例子,其中數據庫治理器服務器軟件駐留在一個專用的服務器機器上,而用戶則通過他們的工作站上的客戶機代碼來訪問數據庫。隨著客戶機-服務器模型成長到能付諸使用,就出現了對服務器可伸縮性和對客戶機代碼大小和復雜性的關注。于是提出了一種三層的體系結構,以避免在兩層模型中已察覺到的弱點,使 Web 能成為一個計算平臺:
“許多人...斷言,傳統的客戶機/服務器兩層體系結構不會有好的可伸縮性,因為用戶連接和數據訪問的數量無法猜測,而且在一些系統治理上也存在問題。為處理兩層體系結構的限制,許多開發集體都在轉向三層體系結構。這種體系結構大致可以定義為:客戶機層上的表示層、中間的服務器和后端的某種數據庫。這種設想的目的就是緩和客戶機或數據庫服務器上的代碼膨脹,集中治理業務邏輯,更靈活地使用數據庫,而不僅是使用所存儲的過程和觸發器。”(見 Kim 的“Looking for a 3-Tier App Builder?”)
一個三層結構模型通常被想像成有一個 Web 瀏覽器作為客戶層。Web 瀏覽器由于有可能成為一種真正的通用客戶機,使它從觀念上取代了兩層結構的“胖客戶機”。假如瀏覽器作為 Web 應用程序體系結構的標準瘦客戶機獲得認可,那么以前駐留在兩層模型的胖客戶機中的功能會怎么樣呢?現在,應用程序專用的功能并不移植回服務器(例如數據庫治理器),而是有意將它駐留在一個新的中間層上。中間層支持應用程序服務器軟件,這種軟件是中間件的一種形式,它處于第一層上瘦客戶機的最小功能和第三層上服務器端業務系統的豐富功能之間。由于三層體系結構與 Web 處理模型有密切關系,所以中間層應用程序服務器常被視為 Web 服務器的一種功能擴展?,F有的 Web 應用程序利用 CGI 程序,將來自 Web 瀏覽器的用戶請求傳送到不基于 Web 的業務系統,并向瀏覽器返回響應,就是三層模型的一種實現。這些應用程序逐漸向 servlet 技術的轉移說明三層模型正在增強。