動態 Web Server 技術發展歷程
動態 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 只是一個工程師友好的中間層。
由於是幾個月前寫的,已經找不到當時的參考文章了,所以參考資料就不貼了。
作者:何必詩債換酒錢
出處: ofollow,noindex" target="_blank">http://www.cnblogs.com/backwords/p/9680296.html
本部落格中未標明轉載的文章歸作者何必詩債換酒錢和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。