動態 Web Server 技術發展歷程

動態 Web Server 技術發展歷程

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


萬維網概述

萬維網 WWW (World Wide Web)並不是某種特殊的計算機網絡,他是一個大規模的、聯機式的信息儲藏所。英文簡稱爲 Web。萬維網是一個分佈式的 超媒體(超文本系統的擴充),經過做用於其上的 HTTP 應用層協議,一臺計算機能夠輕鬆的從另外一臺地理位置不一樣的計算機獲取 Web 資源。html

萬維網以 客戶——服務器 方式工做。瀏覽器就是一個常見的在用戶主機上的萬維網客戶程序。而萬維網所駐留的主機則運行服務器程序,所以這臺主機也成爲 萬維網服務器 (Web Server)。前端

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


Web Server 的發展歷史

靜態 Web 服務器

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

而與之對應的,也是後來發展出的技術,是動態 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 只是一個工程師友好的中間層。



因爲是幾個月前寫的,已經找不到當時的參考文章了,因此參考資料就不貼了。




做者:Skipper
出處:http://www.cnblogs.com/backwords/p/9376578.html
本博客中未標明轉載的文章歸做者 Skipper 和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索