深入理解BS結構應用程序


深入理解BS結構應用程序

 

深入理解BS結構應用程序

 

  隨着學習的深入,和編程經驗的豐富,對BS應用程序有一些認識。

 

  在一些討論軟件技術的QQ群里,或一些社區、BBS中,經常會有一些初學者會犯一些認知性的錯誤。比如經常會有一些朋友提這樣的一些問題:“我怎么在ASP中調用我寫的這個JavaScript函數啊?”或者說“我怎么在JavaScript中調用我DAL層讀取數據的方法啊?”

 

  對於這些問題,說實話,我也犯過,當時也糾結的不得了。現在想想,其實是對BS結構的程序沒有一個整體的概念,或者可以說根本不知道什么叫BS結構的應用程序。因此,學習過程中會走不少彎路,經歷不少痛苦。

 

  經過這幾年的學習,有一些心得經驗,和大家分享一下。

 

  要理解BS這個概念,必需要從BS應用程序的起源說起。

 

  BS應用程序又稱Web應用程序。其實最初Web並不是應用程序,它只是一種服務,一種共享信息的服務。

 

  Web是什么,是網,是網絡。最早的網絡只是提供了一種下載並打開遠端頁面文件的一種服務,人們可以通過遠程計算機中的地址和文件保存的路徑來查看該計算機中共享的文件。這些文件通常是一頁頁的文本內容,在網絡中訪問它的那個路徑稱為Uniform / Universal Resource Locator(URL,統一資源定位符)。

 

  后來人們在頁面中加入了超鏈接,使瀏覽者可以很方便的訪問其它相關的文件資源。這樣,從感觀上我們訪問的網頁由一頁變成了很多頁,也就更奠定了“Web Page(網頁)”這個名稱。

 

  隨着Web的發展,網頁中加入了圖片、動畫、聲音、視頻等多媒體元素,這些東西超出了文本的概念,並且出現了一種標記語言來規范這些頁面中的元素,使之更加合理的顯示在用戶的屏幕上。所以,這種語言就被人們稱之為HyperText Mark-up Language(HTML,超文本標記語言),這種文件的擴展名為html或htm(還有其它如shtml的延生品)。而專門解悉這種語言,給用戶展示完美的網頁內容的程序,就被稱之為瀏覽器。

 

  后來,人們發現,隨着頁面內容的豐富,有時候很多頁面中的結構是完全相同的,只是內容不同而已。這樣如果提供很多的網頁文件,不僅浪費計算機硬盤空間,也非常不容易維護。所以就有人想出在遠端計算機(Web服務器)中動態生成網頁的方法來解決這個問題。這樣就可以在硬盤中保存一份有共同頁面結構的網頁,在用戶請求查看某個信息的時候,Web服務器根據用戶請求的文件地址(URL),解悉並生成一份最終的頁面內容,回傳給請求者,請求者接收到以后就像普通文件一樣獲取並打開它。

 

1 //(注:這些動態生成網頁的技術,最早的有CGI,后來出現ASP,PHP,JSP,ASPX等等)

 

復制代碼
1 /*
2 (注:在這里,要特別強調的一點,也就是每一個BS結構應用程序開發人員要牢記的是:
用戶(請求發送者,或者稱為瀏覽器、客戶端)向遠程計算機請求,
請求的永遠是文件資源(后來出現的Ajax技術可以獲取一段文本),
可以是網頁文件、圖片文件、動畫文件、聲音文件等等)
3  */
復制代碼

 

  至此,對於用戶來說頁面內容也非富了(有了多媒體),對於服務器來說頁面也可以動態生成了(更易於管理)。但美中不足的是:雖然有了非常酷的頁面效果,但對用戶交互方面的元素太少。人總想主動的控制一些優秀的東西,而這樣的網頁除了點擊超鏈接,我們不能對它進行其它更多的操作。

 

  這似乎是點缺憾,但對於充滿智慧的勞動人民來說,這並不是什么問題。網頁開發人員研究了一種可以供瀏覽器解釋執行的腳本代碼(腳本代碼種類非常多,最為典型的是JavaScript),這些代碼可以做為頁面的內容直接寫到網頁文件中,也可以做為類似圖片一樣的外部資源被頁面引入執行。

  

 

  有了這些頁面腳本,我們的Web即刻變得炫麗起來。我們可以像普通的WinForm程序一樣,使用鼠標在頁面中執行單擊、雙擊、拖放等操作(隨着這些操作,衍生出來許多的瀏覽器事件)。

 

  如此,我們的BS應用程序的整個技術體系就變的完美了。

 

  在整個BS應用程序的發展過程中,上面提到的各個相關技術都充當着一個功能明確的獨立模塊。這一切都圍繞着“使用戶能遠程獲取信息”這一主線。服務器使用動態網頁程序生成不同內容的Web頁面,並提供相關的圖片等頁面外部資源;HTML是為了鏈接外部資源,並標記如何組織頁面中的元素;瀏覽器負責請求服務器獲取網頁內容以及與之相關的其它外部資源文件,解悉頁面結構,並將獲取到的內容(文本內容或多媒體內容)組織起來,更加美觀的呈現給用戶;頁面中的腳本程序是做為頁面的輔助內容保存在頁面中,在適時的時候響應用戶的操作,執行一些瀏覽器內的動作。

 

  下面我們來看一下瀏覽器對服務器進行一次請求的整個過程演示圖:

 

 

 

1.  首先瀏覽器請求服務器

2.  服務器接收到瀏覽器的請求

3.  服務器解悉瀏覽器請求的URL,根據URL確定請求的目標資源文件。這個資源文件通常是一個動態頁面(如ASP,PHP,JSP,ASPX等文件)的網絡地址(MVC結構的程序例外)。Web服務器根據動態頁面文件的內容,和URL中的參數,調用相應的資源(數據庫或文件)組織數據,生成HTML頁面。(注意這里生成的是一個HTML文檔,里面可能包含JavaScript代碼等,這里在服務器端不管HTML文檔里的具體內容)

4.  生成HTML文檔以后,服務器響應瀏覽器的請求,將生成的HTML文檔發送給瀏覽器

5.  瀏覽器接收請求得來的HTML文檔

6.  瀏覽器對HTML文檔進行解悉,並請求相關的資源文件(JS,CSS,多媒體資源,內嵌網頁)等。(在這里瀏覽器解悉完HTML文檔以后,就會進行呈現,但同時也會向服務器發送請求來請求其它相關的資源文件)

7.  服務器接到瀏覽器對資源文件的請求以后,將相應的資源文件響應給瀏覽器

8.  瀏覽器接收到請求來的資源文件,整理並呈現到頁面中

9.  在進行頁面呈現的時候,瀏覽器會從上到下執行HTML文檔,當遇到相應的頁面腳本的時候,會對腳本進行分析,並解釋執行相應的腳本代碼

 

  其實在第6步以后,我們就可以看到一部分頁面內容了,不過可能是純文本內容,沒有樣式,沒有圖片或其它資源。待到瀏覽器請求得到某資源的時候就會進行組織呈現。直到整個頁面顯示完成。

 

  不過最后我們要重點理解的是,在服務器端,HTML是做為一個文本文件進行處理的,包括HTML中的腳本,都被服務器端程序視之為文本。到瀏覽器中,呈現HTML時執行JavaScript腳本程序,就純粹是一個獨立的的小程序了,程序的運行邊界是瀏覽器,也就是說它不可能超越瀏覽器運行。而瀏覽器和服務器之間交互就只能使用“請求”+“響應”的模式進行,Web開發中的異步交互技術Ajax也是使用該模式與服務器傳遞信息的。

 

  扯蛋一句:服務器和瀏覽器理論上是在兩台不同的計算機中運行的,所以它們不可能共享內存中的變量或者方法。而且他們根本就不是同一時間運行的,所以也不可能共享這些數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM