開始接觸 Java Web 方面的技術,此篇文章是以介紹 Web server 相關技術的演變爲主來做爲了解 Java servlet 的技術背景,目的是更好的理解 java web 體系。javascript
萬維網 WWW (World Wide Web)並不是某種特殊的計算機網絡,他是一個大規模的、聯機式的信息儲藏所。英文簡稱爲 Web。萬維網是一個分佈式的 超媒體(超文本系統的擴充),經過做用於其上的 HTTP 應用層協議,一臺計算機能夠輕鬆的從另外一臺地理位置不一樣的計算機獲取 Web 資源。html
萬維網以 客戶——服務器 方式工做。瀏覽器就是一個常見的在用戶主機上的萬維網客戶程序。而萬維網所駐留的主機則運行服務器程序,所以這臺主機也成爲 萬維網服務器 (Web Server)。前端
接下來就是咱們文章的主角——Web Server ,和它的的發展歷史。java
最先的 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 (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 程序要高不少。隨着愈來愈多的功能的加入和做者的屢次重寫,最終使他演變成了一門編程語言。(語言只是工具)
Microsoft已開發出一種用於生成稱爲 Active Server Pages 的動態Web內容的技術,簡稱 ASP。使用ASP,Web 服務器上的HTML頁面能夠包含嵌入代碼的片斷(一般是VBScript或JScript-儘管幾乎可使用任何語言)。在將頁面發送到客戶端以前,Web服務器將讀取並執行此代碼。
Netscape 也有一種服務器端腳本技術,它被稱爲服務器端 JavaScript,或簡稱爲 SSJS。與 ASP 同樣,SSJS 一樣容許將代碼片斷嵌入到 HTML 頁面中以生成動態 Web 內容。區別在於 SSJS 使用 JavaScript 做爲腳本語言。使用 SSJS,能夠預編譯網頁以提升性能。
想了解 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 和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。