已經很久沒有更新博客了,過年忙著吃喝玩樂,就怠惰了一小下下?幸好這學期新開的課程都比較有趣——Java Web和Android。至少對于我自己來說,既充滿挑戰,又富有趣味。
——【1.Web概述】——
什么是Web?
Web在計算機網頁開發設計中就是網頁的意思。網頁是網站中的一個頁面,我們平常瀏覽網站時,看到的都是一個一個的頁面,通常它們都是HTML格式的。網頁可以展示文字、圖片、媒體等內容,而這些都是需要通過瀏覽器來閱讀。
Web應用程序的工作原理?
Web應用程序大體上可以分為兩種,靜態網站和動態網站。
早期的Web應用主要是靜態頁面的瀏覽,即靜態網站。這些網站使用HTML描寫,通常來說隨著html代碼的生成,頁面的內容和顯示效果就基本上不會發生變化了——除非你修改頁面代碼。這些代碼放在Web服務器上,用戶使用瀏覽器通過HTTP協議請求服務器上的Web頁面,服務器上的Web服務器接受到用戶的請求處理后,再發送給客戶端瀏覽器,顯示給用戶。整個過程就像下圖:
而動態網頁則不然,頁面代碼雖然沒有變,但是顯示的內容卻是可以隨著時間、環境或者數據庫操作的結果而發生改變的。這些網站通常使用HTML和動態腳本語言(入JSP、ASP或者是PHP等)編寫,并將編寫后的程序部署到Web服務器上,由Web服務器堆動態腳本代碼進行處理,并轉化成瀏覽器可以解析的HTML代碼,返回給客戶端瀏覽器,顯示給用戶。
值得一提的是:動態網頁并非是那些帶有動畫效果的網頁,而是指具有交互性、內容可以自動更新,并且內容會根據訪問的時間和訪問者而改變的網頁。這里所說的交互性是指網頁可以根據用戶的要求動態改變或響應。
由此可見,靜態網頁就像是老式的手機,只能使用系統自帶的鈴聲和功能,而動態網頁就像是現代的手機,可以自行添加/刪除或者說更改鈴聲和其他一些設置。
——【2.Web的發展歷程】——
自從1989年由 Tim Berners-Lee(蒂姆·伯納斯·李) 發明了 World Wide Web 以來,Web 主要精力了3個階段,分別是靜態文檔階段(指代 Web 1.0)、動態網頁階段(指代 Web 1.5)和 Web 2.0 階段。
① 靜態文檔階段
處理靜態文檔階段的 Web ,主要是用于靜態 Web 頁面的瀏覽。用戶通過客戶端的 Web 瀏覽器可以訪問 Internet 上各個 Web 站點。在每個 Web 站點上,保存著提前編寫好的 HTML 格式的 Web 頁,以及各 Web 頁之間可以實現跳轉的超文本鏈接。通常情況下,這些 Web 頁都是通過 HTML 語言編寫的。由于受低版本 HTML 語言和舊式瀏覽器的制約,Web 頁面只能包括單純的文本內容,瀏覽器頁只能顯示呆板的文字信息,不過這已經基本滿足了建立 Web 站點的初衷,實現了信息資源共享。
隨著互聯網技術的不斷發展以及網上信息呈幾何倍數的增長,人們逐漸發現手工編寫包含所有信息和內容的頁面,對人力和物理都是一種極大的浪費,而且幾乎變得難以實現。另外,這樣的頁面也無法實現各種動態的交互功能。這就促使了 Web 技術進入了發展的第二階段——動態網頁階段。
② 動態網頁階段
為了克服靜態頁面的不足,人們將傳統單機環境下的編程技術與 Web 技術相結合,從而形成新的網絡編程技術。網絡編程技術通過在傳統的靜態網頁中加入各種程序和邏輯控制,從而實現動態和個性化的交流與互動。我們將這種使用網絡編程技術創建的頁面稱為動態頁面。動態頁面的后綴通常是.jsp、.php、和.asp等,而靜態頁面的后綴通常是.htm、.html和.shtml等。
③ Web 2.0 階段
隨著互聯網技術的不斷發展,又提出了一種新的互聯網模式——Web 2.0。這種模式更加以用戶為中心,通過網絡應用( Web Applications )促進網絡上人與人間的信息交換和協同合作。
Web 2.0 技術主要包括:博客( BLOG )、微博( Twitter )、維基百科全書( Wiki )、即時信息( IM )等。
——【3.網絡程序開發的體系結構】——
隨著 Web 2.0 時代的到來,互聯網的網絡架構已經從傳統的 C/S 架構轉變為更加方便、快捷的 B/S 架構,B/S 架構大大簡化了用戶使用網絡應用的難度,這種人人都能上網、人人都能使用網絡上提供的服務的方法也進一步推動了互聯網的繁榮。
理解 C/S 和 B/S 可以通過一些實際的例子。C/S 就像是桌面 QQ 等一些運行在桌面的程序,,在服務端主要就是一個數據庫,把所有業務邏輯以及界面的渲染操作交給客戶端去完成。而 B/S 就是我們的瀏覽器,把業務邏輯交給服務端完成,客戶端僅僅只做界面渲染和數據交換。
B/S 架構帶來了以下兩個方面的好處:
客戶端使用同一的瀏覽器( Browser )。由于瀏覽器具有統一性,它不需要特殊的配置和網絡連接,有效的屏蔽了不同服務提供商提供給用戶使用服務的差異性。另外,最重要的一點,瀏覽器的交互特性使得用戶使用它非常簡便,而且用戶行為的可繼承性非常強,也就是用戶只要學會了上網,不管使用的是哪一個應用,一旦學會了,在使用其他互聯網服務時同樣具有了使用經驗,因為它們都是基于同樣的瀏覽器操作界面。
服務端( Server )基于統一的 HTTP 。和傳統的 C/S 架構使用自定義的應用層協議不同,B/S 價格使用的都是統一的 HTTP。使用同一的 HTTP 也為服務提供商簡化了開發模式,使得服務器開發者可以采用相對規范的開發模式,這樣可以大大節省開發成本。由于使用統一的 HTTP,所以基于 HTTP 的服務器就有很多,如 IIS、Tomcat 等,這些服務器可以直接拿來使用,不需要服務開發者單獨來開發。不僅如此,連開發服務的通用框架都不需要單獨開發,服務開發者只需要關注提供服務的應用邏輯,其他一切平臺和框架都可以直接拿來使用,所以 B/S 架構同樣簡化了服務器提供者的開發,從而出現了越來越多的互聯網服務。
B/S 網絡架構概述
B/S 網絡架構從前端到后端都得到了簡化,基于統一的應用層協議 HTTP 來交互數據,與大多數傳統 C/S 互聯網應用程序采用的長連接的交互模式不同,HTTP 采用無狀態的短連接的通信方式,通常情況下,一次請求就完成了一次數據交互,通常也對應一個業務邏輯,然后這次通信連接就斷開了。采用這種方式是為了能夠同時服務更多的用戶,因為當前互聯網應用每天都會處理上億的用戶請求,不可能每個用戶訪問一次后就一直保持這個連接。
基于 HTTP 本身的特點,目前的 B/S 網絡架構大多采用 CDN 的架構設計(如上圖),既要滿足海量用戶的訪問請求,又要保持用戶請求的快速響應,所以現在的網絡架構也越來越復雜。
當一個用戶在瀏覽器里輸入 www.taobao.com 這個 URL 時,將會發生很多操作。首先它會請求 DNS 吧這個域名解析成對應的 IP 地址,然后根據這個 IP 地址在互聯網上找到相對應的服務器,向這個服務器發起一個 get 請求,由這個服務器決定返回默認的數據資源給訪問的用戶。在服務器端實際上還有很復雜的業務邏輯:服務器可能有很多臺,到底指定哪一臺服務器來處理請求,這需要一個負載均衡設備來平均分配所有用戶的請求;還有請求的數據是存儲在分布式緩存里還是一個靜態文件中,或是在數據庫里;當數據返回瀏覽器時,瀏覽器解析數據發現還有一些靜態資源( 如 CSS 、JS 或者圖片 )時又會發起另外的 HTTP 請求,而這些請求很可能會在 CDN 上,那么 CDN 服務器又會處理這個用戶的請求,大體上一個用戶請求會設計這么多的操作。每一個細節都會影響這個請求最終是否會成功。
不管網絡架構如何變化,時鐘有一些固定不變的原則需要遵守。
- 互聯網上所有資源都要用一個 URL 來表示。URL 就是同意資源定位符,如果你要發布一個服務或者一個資源到互聯網上,讓別人能夠訪問到,那么你首先必須要有一個在世界上獨一無二的 URL 。不要小看這個 URL ,它幾乎包含了整個互聯網的架構精髓。
- 必須基于 HTTP 與服務端交互。不管你要訪問的事國內的還是國外的數據,是文本數據還是流媒體,都必須按照套路出牌,也就是都得采用統一打招呼的方式,這樣人家才會明白你要的是什么。
- 數據展示必須在瀏覽器中進行。當你獲取到數據資源后,必須在瀏覽器上才能恢復它的容貌。
只要滿足上面的幾點,一個互聯網應用基本上就能正確地運行起來了,當然這里面還有很多細節。
參考資料:
①《Java Web 程序設計 慕課版——明日科技·出品》
②《深入分析Java Web技術內幕——許令波 著》
歡迎轉載,轉載請注明出處!
簡書ID:@我沒有三顆心臟
github:wmyskxz
歡迎關注公眾微信號:wmyskxz
分享自己的學習 & 學習資料 & 生活
想要交流的朋友也可以加qq群:3382693