1. 程式人生 > >動態 Web Server 技術發展歷程

動態 Web Server 技術發展歷程

過程 在服務器 效率 必須 vbs 隨著 理解 編譯型 因此

動態 Web Server 技術發展歷程

開始接觸 Java Web 方面的技術,此篇文章是以介紹 Web server 相關技術的演變為主來作為了解 Java servlet 的技術背景,目的是更好的理解 java web 體系。


萬維網概述

萬維網 WWW (World Wide Web)並非某種特殊的計算機網絡,他是一個大規模的、聯機式的信息儲藏所。英文簡稱為 Web。萬維網是一個分布式的 超媒體(超文本系統的擴充),通過作用於其上的 HTTP 應用層協議,一臺計算機可以輕松的從另一臺地理位置不同的計算機獲取 Web 資源。

萬維網以 客戶——服務器 方式工作。瀏覽器就是一個常見的在用戶主機上的萬維網客戶程序。而萬維網所駐留的主機則運行服務器程序,因此這臺主機也成為 萬維網服務器

(Web Server)。

接下來就是我們文章的主角——Web Server ,和它的的發展歷史。


Web Server 的發展歷史

靜態 Web 服務器

最早的 Web 服務器簡單的響應瀏覽器發送過來的 HTTP 請求,並將儲存在服務器上的 HTML 文件返回給瀏覽器。這樣的服務器可以稱為靜態服務器。它是最初的建站方式。瀏覽者所看到的每個頁面都是建站者上傳到服務器的 HTML 文件,這種網站每次增加、刪除、修改一個頁面,都必須對服務器文件進行一次下載和上傳。使用靜態服務器的網站的缺點是缺乏交互性、叠代周期長、不易維護。

而與之對應的,也是後來發展出的技術,是動態 Web 服務器技術。

動態 Web 服務器

動態 Web 服務器彌補了靜態 Web 服務器功能上的不足,它具有良好的交互性,HTML 文件會自動更新內容而無需手動更新,降低了生產維護成本,和叠代周期。使用靜態 Web 服務器的網站頁面一般會被稱為 網頁(Web page),而使用動態 Web 服務器的網站更傾向於被稱為 Web 應用(Web application)。

接下來將主要介紹動態 Web 服務器的技術發展歷程。

在服務器中集成

在介紹動態 Web 服務器之前,首先我們來看一下,靜態 Web 服務器是如何工作的,它的工作過程可以參考下圖:

技術分享圖片

當 HTTP 請求到達服務器後,靜態 Web 服務器直接給予響應並返回 HTML 文件。

然後我們再來看一下動態 Web 服務器的實現技術。

由於很多的服務器都是使用 C/C++、Java 等編譯型的語言編寫,所以實現動態 Web 服務器技術最直觀的做法也是最容易考慮到的是,將對 HTML 更新的功能作為擴展 API 集成到服務器程序中,直接由服務器來完成這個任務。這樣做的優點是,由於使用 C/C++、Java 編寫而成,所以程序的執行效率是很可觀的。但是缺點卻也很嚴重,功能模塊依賴平臺、具體的服務器,如果 API 中的某一模塊出錯將導致整個服務器崩潰,維護成本高等。

技術分享圖片


SSI 和 CGI

SSI (Server Side Include) 和 CGI(Common GateWay Interface)是很相似的兩種技術,他們並非使用某種特定語言實現的具體程序,而是一種編碼標準,是Web 服務器運行時外部程序的規範,按CGI 編寫的程序可以擴展服務器功能。當我們需要實現動態 HTML 文檔功能時,可以將預先編譯好的 CGI/SGI 程序保存到服務器端,當服務器響應客戶端請求時可以被調用以處理 HTML 文檔。過程可以參考下圖:

技術分享圖片

隨著 CGI 技術的興起和普及,聊天室、文獻檢索、電子商務、信息查詢等各式各樣的 Web 應用蓬勃興起。CGI 技術也有他的缺點,因為每當客戶端程序有一個請求時,Web 服務器都需要創建一個新的 CGI 進程,並通過環境變量和標準輸入來將生成響應報文所必須的信息傳遞 CGI 程序。這樣的操作是很耗費時間的,同樣也很耗費資源。 同時因為 CGI 進程和 Web 服務器是不同的進程,所以二者就很難進行交互。另外 SSI 和 CGI 也很容易受平臺的影響。

服務器端動態語言

C/C++ 的強大是毋庸置疑的,所以對於服務器我們采用 C/C++ 實現,這能穩健的確保執行效率。Web 服務器的動態 HTML 文檔處理一開始仍是使用 C/C++ 來實現,但是眾所皆知,C/C++ 較高的運行速度的代價是開發難度大,維護成本高。於是,人們自然想到了開發叠代速度較快,更易於維護的腳本語言來實現,比如 PHP、Python等。這裏不得不提的是專用於 Web 服務器端編程的 PHP (PHP:Hypertext Preprocessor)語言。

起初這門語言只是作為一個由 C 寫成的 CGI 二進制庫集合出現,用於追蹤作者在線簡歷的訪問,他也因此給它命名 “Personal Home Page Tools”。並且 PHP 的一大有點是可以將 PHP 程序嵌入到 HTML 文檔中去執行,執行效率比完全生成 HTML 標記的 CGI 程序要高很多。隨著越來越多的功能的加入和作者的多次重寫,最終使他演變成了一門編程語言。(語言只是工具這話真沒毛病)

Active Server Pages

Microsoft已開發出一種用於生成稱為 Active Server Pages 的動態Web內容的技術,簡稱 ASP。使用ASP,Web 服務器上的HTML頁面可以包含嵌入代碼的片段(通常是VBScript或JScript-盡管幾乎可以使用任何語言)。在將頁面發送到客戶端之前,Web服務器將讀取並執行此代碼。

Server-side JavaScript

Netscape 也有一種服務器端腳本技術,它被稱為服務器端 JavaScript,或簡稱為 SSJS。與 ASP 一樣,SSJS 同樣允許將代碼片段嵌入到 HTML 頁面中以生成動態 Web 內容。區別在於 SSJS 使用 JavaScript 作為腳本語言。使用 SSJS,可以預編譯網頁以提高性能。

Java Server pages

想了解 jsp(Java Server Pages) 那麽就不得不說一下和他直接相關的,Java Servlet。
Java Serlvet(Java Server Side applet) 是在服務器端的 Java 程序,他擴展了服務器的功能,通過運行 由 Serlvet 引擎管理的 JVM 來運行 Java 程序而提供動態更新 HTML 的功能 (使用不同的技術來實現類似 CGI 程序的功能,但不完全同於 CGI,Servlet 有自己的約定)。Java Serlvet 的優點很吸引人,具有 Java 語言的優點和平臺無關性;因為 Serlvet 在 Web 服務器中運行,所以可以很容易的訪問 Web 服務器的資源;支持在 JVM 中運行多線程,每個請求將對應一個 Serlvet 線程,對比 CGI 創建進程的方式將節省很大的時間和空間資源。但是工程師們向來都是抵制麻煩尋找便利的人群,使用 Java Servlet 編寫服務器端頁面,不可避免的就是再次需要在 Java 代碼中嵌入前端 HTML 代碼,這給編碼體驗造成了很大影響,為了實現工程師友好(增加這門技術對工程師的吸引力),於是和 PHP 在 HTML 中嵌入代碼相似,Java servlet 也實現這一特性,允許在 HTML 中嵌入 Java 代碼。更進一步,將一些 Java 代碼封裝起來換一種更加易於理解和使用的語法,就產生了 JSP。JSP 真正運行時,是會被 Servlet 容器給編譯成 Java Servlet 代碼的,所以實際運行的還是 Java 程序。JSP 只是一個工程師友好的中間層。



由於是幾個月前寫的,已經找不到當時的參考文章了,所以參考資料就不貼了。




作者:何必詩債換酒錢
出處:http://www.cnblogs.com/backwords/p/9680296.html
本博客中未標明轉載的文章歸作者何必詩債換酒錢和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

動態 Web Server 技術發展歷程