從0開始學習ASP.NET(2.0為例)系列——05WEB請求及一個ASP.NET請求的生與死


簡介:


 

本篇博文涉及的內容或許會有些晦澀,BlogBoy描述的也不夠全面(其實這需要讀者自身不斷的探索和追究)。不過BlogBoy依然相信,以大家的聰明才智絕對有能力完全無障礙的理解篇幅中涉及的大部分內容。OK,進入正題我們來聊聊WEB,說道WEB我們就不得不提“因特網”(Internet),這個大家都有所聞的網,由全世界眾多計算機相互連接而構成的巨大計算機網絡。其中,約束或形成因特網的前提條件就是這些計算機需要遵循TCP/IP協議族。因此,要了解WEB、要了解WEB的請求模型,我們就先來了解一下什么是TCP/IP,了解一下為什么建立網絡連接需要使用這個協議族。

首先需要明白一點,TCP和IP(注意不是TCP/IP,TCP是傳輸層的一個協議,而IP是網絡層的一個協議,TCP/IP協議包含了TCP和IP協議所在的層)分屬於兩個層的不同協議,它們共同完成網絡連接的部分工作。TCP/IP協議采用的是四層模型(關於計算機網絡的更為具體的概念以及OSI七層參考模型等相關知識,如果感到困惑就需要讀者自己花時去間補充閱讀),也許很多讀者在這些概念上會感到疑惑,到底什么是層,層在哪里,為什么要弄明白這些東西!BlogBoy認為:對這些層做一些了解,有助於我們理解基本的網絡通訊機制,也能夠更好的理解高層應用所蘊含的基層知識,比如郵件、文件上傳……這些都是在WEB應用程序中使用十分頻繁的功能,了解TCP/IP能夠很好幫助我們理解這些應用所蘊含的基本原理。

 

 

正文:


 

首先我們先來了解TCP/IP相關的知識,為什么要了解TCP/IP的層結構,為什么要了解每個層中的各種協議!BlogBoy說過了,因為它們是Internet的基礎,也是所有WEB程序的基礎。

  • TCP/IP:

1、網絡接口層:定義物理設備的各種需求特性,並負責接收IP數據報,並把數據報發送給網絡IP層,毫無疑問,它是TCP/IP協議4層模型中的最底層。

2、網絡IP層:是IP協議所屬層,也是負責計算機之間通信的層,該層既處理來自上層傳輸層的請求,同時也接受來自接口層的數據報,是數據報的中轉地,它具有處理數據報請求,處理輸入數據報,處理路徑流通和堵塞等問題。

3、傳輸層:TCP協議和UDP協議的所屬層,提供應用程序間的可靠通信。

4、應用層:這個層包含了豐富的面向用戶服務,包含我們常見的一些應用程序,如HTTP(超文本傳輸協議)、POP3(郵局協議,用於接收郵件)、SMTP(簡單郵件傳輸協議,用來控制信件的發送、中轉)、FTP(文件傳輸協議,用於上傳下載)、TELNET(遠程登錄服務)、DNS(域名解析服務,用於URL和IP地址間的互相轉換,網站常用)

  • HTTP請求響應模型:

HTTP屬於TCP/IP協議的應用層,基於該協議,我們每次向瀏覽器請求一個URL(你可以理解為是分布在遠程主機上的資源),都會發送一個HTTP請求,經過DNS轉換,相應IP地址的服務器返回一個數據包(該數據包並不直接包含圖片、文件、聲音、視屏等東西,而是包含對這些東西的URL,也就是說請求的網頁的圖片或文件越多,請求的次數也會越多,因為每一個URL都會在后續的瀏覽器處理中一一請求,這也是為什么很多SEO做頁面優化的時候,提倡使用CSS精靈、合並文件等優化手段,不過這些都是后話,我們先來了解一下基礎!),當頁面的請求得到相應並返回給瀏覽器,一次HTTP請求就結束了(我們拔掉網線,依然可以看到網頁的內容並沒有消失,而刷新時卻會丟失,因為刷新的真實意義是重新發送請求)。

  • ASP.NET請求相應模型:

無論是ASP.NET還是ASP、又或者是PHP、JSP頁面請求都是HTTP請求的變種,當我們在瀏覽器地址欄鍵入一個ASP.NET頁面的URL,然后回車,需要經歷這樣的一個過程。我們來看看一個普通ASP.NET頁面的請求和響應的圖解說明(看不清可以下載,使用專業的看圖軟件觀看):

對於上圖,讀者暫時需要記住以下這幾個對象,因為在后期的應用中會經常提到或使用他們:HttpApplication(ASP.NET程序)、HttpContext(請求上下文)、HttpRuntime(HTTP運行時)、HttpRequest(HTTP請求)、HttpResponse(請求相應)、HttpHandler(請求處理程序)。

值得注意的是,上圖中並沒有提到IIS和ISAPI,不得不說,這是個缺陷,因為脫離IIS討論ASP.NET的請求和響應有些過於抽象,不過讀者可以在互聯網中搜索到許多相關的話題,《ASP.NET服務器控件高級編程》一書中也有非常好的描述。

  • ASPX頁面的生命周期中的一些事件:

1.  PreInit:檢查IsPostBack屬性來確定是不是第一次處理該頁、創建或重新創建動態設置主控頁、動態設置主控頁、動態設置Theme屬性、讀取或設置配置文件屬性

2.  Init:在所有控件都已經初始化並且應用所有外觀設置后引發,使用該事件來讀取和初始化控件屬性。

3.  InitComplete:由Page對象引發,使用該對象來處理要求完成所有初始化工作的任務;

4.  PreLoad:為頁和所有控件加載視圖狀態,然后處理Request實例包括的任何回發數據;

5.  Load:處理頁面加載引發的事件;

8.  PreRender:在呈現頁內容之前發生

9.  SaveStateComplete:在該事件發生前,已經對控件的ViewState進行了保存,將忽略對頁和控件所做的所有修改。

10. Render:向客戶端輸出流中寫入HTML代碼

 

 

結語:


 

為了把握ASP.NET請求的生與死,我們先是介紹了最基礎的部分,對,就是Internet及TCP/IP的相關基礎,然后我們那最簡單的HTTP請求作為切入點,講解了關於一個URL請求的相關知識,隨后我們又緊接着討論了關於ASP.NET頁面請求的模型,該模型與普通HTTP模型稍有不同,因為ASP.NET的頁面也是面向對象的,而且IIS解析ASP.NET需要借助ISAPI的相關進程的幫助,最后我們還列舉了一個ASP.NET頁面的事件列表及主要用途。

也許有讀者會和BlogBoy一樣,起初認為這些內容無關緊要,而且這些內容掌握起來視乎比較棘手,不要緊,凡事都有個過程,還請大家稍安勿燥,寫完這篇,我們就基本結束了漫長的基礎鋪墊的過程,用了4篇文章才勉強講完,接下來的文章將會側重於實戰和技巧,敬請期待!最后還是得啰嗦一句,金無足赤人無完人,覺得寫得還可以的地方借鑒一下,頂一下,不好的地方請自己過濾一下,恩,就說到這,最后(真正的!)祝願都能活出屬於自己的精彩!


免責聲明!

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



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