ASP.NET的網頁代碼模型及生命周期 - lillllllll的專欄 - CSDN博客

ASP.NET的網頁代碼模型及生命周期 收藏http://blog.csdn.net/lillllllll/archive/2009/11/11/4800512.aspx第4章 ASP.NET的網頁代碼模型及生命周期從本章開始,就進入了ASP.NET應用程序開發的世界。在了解了C#的結構,以及面向對象的概念後,就可以從面向對象的思想開發ASP.NET應用程序。在ASP.NET中,能夠使用面向對象的思想和軟體開發中的一些思想,例如封裝、派生、繼承以及高級的設計模式等。本章首先介紹ASP.NET中最重要的概念---網頁代碼模型。4.1 ASP.NET的網頁代碼模型在ASP.NET應用程序開發中,微軟提供了大量的控制項,這些控制項能夠方便用戶的開發以及維護。這些控制項具有很強的擴展能力,在開發過程中無需自己手動編寫。不僅如此,用戶還能夠創建自定義控制項進行應用程序開發以擴展現有的伺服器控制項的功能。4.1.1 創建ASP.NET網站在ASP.NET中,可以創建ASP.NET網站和ASP.NET應用程序,ASP.NET網站的網頁元素包含可視元素和頁面邏輯元素,並不包含designer.cs文件。而ASP.NET應用程序包含designer.cs文件。創建ASP.NET網站,首先需要創建網站,單擊【文件】按鈕,在下拉菜單中選擇【新建網站】選項,單擊後會彈出對話框用於ASP.NET網站的創建,如圖4-1所示。圖4-1 新建ASP.NET網站在【位置】選項中,旁邊的【下拉菜單】可以按照開發的需求來寫,一般選擇文件系統,地址為本機的本地地址。語言為.NET網站中使用的語言,如果選擇Visual C#,則默認的開發語言為C#,否則為Visual Basic。創建了ASP.NET網站後,系統會自動創建一個代碼隱藏頁模型頁面Default.aspx。ASP.NET網頁一般由三部分組成,這三個部分如下所示。q 可視元素:包括HTML,標記,伺服器空間。q 頁面邏輯元素:包括事件處理程序和代碼。q designer.cs頁文件:用來為頁面的控制項做初始化工作,一般只有ASP.NET應用程序(Web Application)才有。ASP.NET頁面中包含兩種代碼模型,一種是單文件頁模型,另一種是代碼隱藏頁模型。這兩個模型的功能完全一樣,都支持控制項的拖拽,以及智能的代碼生成。4.1.2 單文件頁模型單文件頁模型中的所有代碼,包括控制項代碼、事物處理代碼以及HTML代碼全都包含在.aspx文件中。編程代碼在script標籤,並使用runat=「server」屬性標記。創建一個單文件頁模型,在【文件】按鈕中選擇【新建文件】選項,在彈出對話框中選擇【Web窗體】或在右擊當前項目,在下拉菜單中選擇【添加新建項】選項即可創建一個.aspx頁面,如圖4-2所示。圖4-2 創建單文件頁模型在創建時,去掉【將代碼放在單獨的文件中】複選框的選擇即可創建單文件頁模型的ASP.NET文件。創建後文件會自動創建相應的HTML代碼以便頁面的初始化,示例代碼如下所示。<%@ Page Language=「C#」 %><!DOCTYPE html PUBLIC 「-//W3C//DTD XHTML 1.0 Transitional//EN」 「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」><script runat=「server」></script><html xmlns=「http://www.w3.org/1999/xhtml」><head runat=「server」> <title>無標題頁</title></head><body> <form id=「form1」 runat=「server」> <div> </div> </form></body></html>編譯並運行,即可看到一個空白的頁面被運行了。ASP.NET單文件頁模型在創建並生成時,開發人員編寫的類將編譯成程序集,並將該程序集載入到應用程序域,並對該頁的類進行實例化後輸出到瀏覽器。可以說,.aspx頁面的代碼也即將會生成一個類,並包含內部邏輯。在瀏覽器瀏覽該頁面時,.aspx頁面的類實例化並輸出到瀏覽器,反饋給瀏覽者。ASP.NET單文件頁模型運行示例圖如圖4-3所示。圖4-3 單文件頁模型4.1.3 代碼隱藏頁模型代碼隱藏頁模型與單文件頁模型不同的是,代碼隱藏頁模型將事物處理代碼都存放在cs文件中,當ASP.NET網頁運行的時候,ASP.NET類生成時會先處理cs文件中的代碼,再處理.aspx頁面中的代碼。這種過程被成為代碼分離。代碼分離有一種好處,就是在.aspx頁面中,開發人員可以將頁面直接作為樣式來設計,即美工人員也可以設計.aspx頁面,而.cs文件由程序員來完成事務處理。同時,將ASP.NET中的頁面樣式代碼和邏輯處理代碼分離能夠讓維護變得簡單,同時代碼看上去也非常的優雅。在.aspx頁面中,代碼隱藏頁模型的.aspx頁面代碼基本上和單文件頁模型的代碼相同,不同的是在script標記中的單文件頁模型的代碼默認被放在了同名的.cs文件中,.aspx文件示例代碼如下所示。<%@ Page Language=「C#」 AutoEventWireup=「true」 CodeFile=「Default.aspx.cs」 Inherits=「_Default」 %><!DOCTYPE html PUBLIC 「-//W3C//DTD XHTML 1.0 Transitional//EN」 「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」><html xmlns=「http://www.w3.org/1999/xhtml」><head runat=「server」> <title>無標題頁</title></head><body> <form id=「form1」 runat=「server」> <div> </div> </form></body></html>從上述代碼中可以看出,在頭部聲明的時候,單文件頁模型只包含Language=「C#」,而代碼隱藏頁模型包含了CodeFile=「Default.aspx.cs」,說明被分離出去處理事物的代碼被定義在Default.aspx.cs中,示例代碼如下所示。using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls; //使用HtmlControlsusing System.Web.UI.WebControls; //使用WebControlsusing System.Web.UI.WebControls.WebParts; //使用WebPartspublic partial class _Default : System.Web.UI.Page //繼承自System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { }}上述代碼為Default.apx.cs頁面代碼。從上述代碼可以看出,其格式與類庫、編寫類的格式相同,這也說明了.aspx頁面允許使用面向對象的特性,如多態、繼承等。但是ASP.NET代碼隱藏頁模型的運行過程比單文件頁模型要複雜,運行示例圖如圖4-4所示。圖4-4 代碼隱藏頁模型上述描述了代碼隱藏類模型的頁面生成模型。當頁面被呈現之前,ASP.NET應用程序會解釋並編譯相應的cs文件中的代碼,與此同時,ASP.NET應用程序還會將.aspx頁面進行編譯並生成.aspx頁面對應的類。生成.aspx頁面對應的類後會將該類與cs文件中的類進行協調生成新的類,該類會通過IIS在用戶瀏覽頁面時呈現在用戶的瀏覽器中。4.1.4 創建ASP.NET Web ApplicationASP.NET網站有一種好處,就是在編譯後,編譯器將整個網站編譯成一個DLL(動態鏈接庫),在更新的時候,只需要更新編譯後的DLL(動態鏈接庫)文件即可。但是ASP.NET網站卻有一個缺點,編譯速度慢,並且類的檢查不徹底。相比之下,ASP.NET Web Application不僅加快了速度,只生成一個程序集,而且可以拆分成多個項目進行管理。創建Application,首先需要新建項目用於開發Web Application,單擊菜單欄上的【文件】按鈕,在下拉菜單中選擇【新建項目】選項,在彈出窗口中選擇【ASP.NET應用程序】選項,如圖4-5所示。圖4-5 創建ASP.NET應用程序在創建了ASP.NET應用程序後,系統同樣會默認創建一個Default.aspx頁面,不同的是,多出了一個Default.aspx.designer.cs,用來初始化頁面控制項,一般不需要修改。4.1.5 ASP.NET網站和ASP.NET應用程序的區別在ASP.NET中,可以創建ASP.NET網站和ASP.NET應用程序,但是ASP.NET網站和ASP.NET應用程序開發過程和編譯過程是有區別的。ASP.NET應用程序主要有以下特點:q 可以將ASP.NET應用程序拆分成多個項目以方便開發,管理和維護。q 可以從項目中和源代碼管理中排除一個文件或項目。q 支持VSTS的Team Build方便每日構建。q 可以對編譯前後的名稱,程序集等進行自定義。q 對App_GlobalResources 的Resource強類支持。ASP.NET WebSite編程模型具有以下特點:q 動態編譯該頁面,而不用編譯整個站點。q 當一部分頁面出現錯誤不會影響到其他的頁面或功能。q 不需要項目文件,可以把一個目錄當作一個Web應用來處理。總體來說,ASP.NET網站適用於較小的網站開發,因為其動態編譯的特點,無需整站編譯。而ASP.NET應用程序適應大型的網站開發、維護等。4.2 代碼隱藏頁模型的解釋過程在ASP.NET的代碼隱藏頁模型中,一個完整的.aspx頁面包含兩個頁面,分別是以.aspx和.cs文件為後綴的文件,這兩個文件在形成了整個Web窗體。在編譯的過程中都被編譯成由項目生成的動態鏈接庫(.DLL),同時,.aspx頁面同樣也會編譯。但是與.cs頁面編譯過程不同的是,當瀏覽者第一次瀏覽到.aspx頁面時,ASP.NET自動生成該頁的.NET類文件,並將其編譯成另一個.DLL文件。當瀏覽者再一次瀏覽該頁面的時候,生成的.DLL就會在伺服器上運行,並響應用戶在該頁面上的請求或響應,ASP.NET應用程序的解釋過程圖如4-6所示。圖4-6 代碼隱藏頁模型頁面的執行過程在客戶端瀏覽器訪問該頁面時,瀏覽器會給IIS發送請求消息,IIS則會開始執行ASP.NET編譯過程,如果不存在編譯過後的DLL文件,則載入編譯的類並創建對象。當創建對象完成,生成創建對象後的代碼並生成一個ASPX頁面代碼,該頁面代碼反饋給IIS,IIS再反饋成HTML頁面的形式給客戶端。4.3 代碼隱藏頁模型的事件驅動處理在傳統的ASP開發中,ASP的事件都是按照網頁的順序來處理的,一般情況下,ASP頁面的事件都是從上到下處理事件,可以說ASP的開發是一個線性的處理模型。在用戶的瀏覽操作中,每一次用戶的操作都會導致頁面重新被發送到伺服器。因此,重複的操作必然導致客戶端和伺服器的往返過程,伺服器必須重新創建頁面,當創建頁面後,伺服器再按照原來的從上到下的順序進行事件處理。在ASP.NET中,通過使用模擬事件驅動模型的行為代替了ASP的線性處理模型。ASP.NET頁框架模型隱式的為用戶建立了事件和事件處理程序的關聯。ASP.NET讓用戶可以為從瀏覽器傳遞的事件在伺服器代碼中設置相應的處理程序。假設某個用戶正在瀏覽網站並與頁面之間產生了某種交互,用戶的操作就會引發事件,事件通過HTTP被傳輸到伺服器。在伺服器中,ASP.NET框架解釋信息,並觸發事件與之對應的處理程序。該程序可以是.aspx頁面中的處理程序,也可以是開發者自定義的類庫,或者COM組件等。事件驅動處理如圖4-7所示。圖4-7 頁面框架的事件驅動處理模型上圖則說明了當一個瀏覽者通過瀏覽器觸發ASPX頁面時,瀏覽器、伺服器和伺服器返回頁的過程。4.4 ASP.NET客戶端狀態Web開發不像軟體開發,Web應用實際上是沒有狀態的,這就說明Web應用程序不自動指示序列中的請求是否來自相同的瀏覽器或客戶端,也無法判斷瀏覽器是否一直在瀏覽一個頁面或者一個站點,也無法判斷用戶執行了哪個操作並統計用戶的喜好。4.4.1 視圖狀態從上面的章節中可以知道,當伺服器每次的往返過程,都將銷毀頁面並重新創建新的頁面。如果一個頁面中的信息超出了頁面的生命周期,那麼這個頁面中的相關信息就不存在了。如果註銷了頁面的信息,那麼用戶的一些信息可能就不存在了。在ASP.NET中,網頁包含視圖狀態來保存用戶的信息,視圖狀態在頁面發回到自身時,跨頁過程存儲和用戶自己的頁面的特定值,視圖狀態的優點如下所示。q 不需要任何伺服器資源。q 在默認情況下,對控制項啟用狀態的數據進行維護,不會被破壞。q 視圖狀態的值經過哈希運算和壓縮保護,安全性更高。視圖狀態同樣有一些缺點,缺點如下所示。q 視圖狀態會影響性能,如果頁面存儲較大較多的值,則性能會有較大的影響。q 在手機,移動終端上,可能無法保存視圖狀態中使用的值。q 視圖狀態雖然安全性較高,但是還是有風險,如果直接查看頁面代碼,可以看到相應代碼。4.4.2 控制項狀態ASP.NET中還提供了控制項狀態屬性作為在伺服器往返過程中存儲自定義控制項中的數據的方法。在頁面控制項中,如果有多個自定義控制項使用多個不同的控制項來顯示不同的數據結構,為了讓這些頁面控制項能夠在在頁面上協調的工作,則需要使用控制項狀態來保護控制項,同時,控制項狀態是不能被關閉的。同樣,控制項狀態也有它的優點,優點如下所示。q 與視圖狀態相同的是,不需要任何伺服器資源。q 控制項狀態是不能被關閉的,提供了控制項管理的更加可靠的方法。q 控制項狀態具有通用性。4.4.3 隱藏域在ASP中,通常使用隱藏域保存頁面的信息。在ASP.NET中,同樣具有隱藏域來保存頁面的信息,作為維護頁面狀態的一種形式,但是隱藏域的安全性並不高,最好不要在隱藏域保存過多的信息。隱藏域具有以下優點。q 不需要任何伺服器資源。q 支持廣泛,任何客戶端都支持隱藏域。q 實現簡單,隱藏域屬於HTML控制項,無需像伺服器控制項那樣有需要編程知識。而隱藏域具有一些不足,如下所示。q 具有較高的安全隱患。q 存儲結構簡單。q 同樣,如果存儲了較多的較大的值,則會導致性能問題。q 如果隱藏域過多,則在某些客戶端中被禁止。q 隱藏域將數據存儲在伺服器上,而不存儲在客戶端。注意:如果開發中,頁面的隱藏域過多,這些隱藏域被存儲在伺服器。當客戶端瀏覽頁面的時候,會有一些防火牆掃描頁面,以保證操作系統的安全,如果頁面的隱藏域過多,那麼這些防火牆可能會禁止頁面的某些功能。4.4.4 CookieCookie在客戶端用戶保存網站的少量的用戶信息,伺服器可以通過編程的方法獲取用戶信息,Cookie信息和頁面請求通常一起發送到伺服器,伺服器對客戶端傳遞過來的Cookie信息做處理。通常Cookie保存用戶的登錄狀態、用戶名等基本信息等等,在後面的章節會詳細介紹使用ASP.NET操作Cookies。4.4.5 客戶端狀態維護雖然使用某些客戶端狀態並不使用伺服器資源,但是這些狀態都具有潛在的安全隱患,如Cookie。非法用戶可以使用Cookie欺騙來攻擊網站進行用戶信息的獲取,不過使用客戶端狀態能夠使用客戶端的資源從而提高伺服器性能。使用客戶端狀態,雖然有安全隱患,但是具有良好的編程能力,以及基本的安全知識,能夠較好的解決安全問題,同時也能夠提高伺服器性能。下面小結了一些客戶端狀態的優缺點。q 視圖狀態:推薦當存儲少量揮發到自身的頁面的信息時使用。q 控制項狀態:不需要任何伺服器資源,控制項狀態是不能被關閉的,提供了控制項管理的更加可靠和更通用的方法。q 隱藏域:實現簡單,但是在應用程序中會造成一些安全隱患。q Cookie:實現簡單,同樣也能夠簡單的獲取用戶的信息,但是Cookie有大小的限制,不適宜存儲大量的代碼。4.5 ASP.NET頁面生命周期ASP.NET頁面運行時,也同類的對象一樣,有自己的生命周期。ASP.NET頁面運行時,ASP.NET頁面將經歷一個生命周期,在生命周期內,該頁面將執行一系列的步驟,包括控制項的初始化,控制項的實例化,還原狀態和維護狀態等,以及通過IIS反饋給用戶呈現成HTML。ASP.NET頁面生命周期是ASP.NET中非常重要的概念,了解ASP.NET頁面的生命周期,就能夠在合適的生命周期內編寫代碼,執行事務。同樣,熟練掌握ASP.NET頁面的生命周期,可以開發高效的自定義控制項。ASP.NET生命周期通常情況下需要經歷幾個階段,這幾個階段如下所示。q 頁請求:頁請求發生在頁生命周期開始之前。當用戶請求一個頁面,ASP.NET將確定是否需要分析或者編譯該頁面,或者是否可以在不運行頁的情況下直接請求緩存響應客戶端。q 開始:發生了請求後,頁面就進入了開始階段。在該階段,頁面將確定請求是發回請求還是新的客戶端請求,並設置IsPostBack屬性。q 初始化:在頁面開始後,進入了初始化階段。初始化期間,頁面可以使用伺服器控制項,並為每個伺服器控制項進行初始化。q 載入:頁面載入控制項。q 驗證:調用所有的驗證程序控制項的Vailidate方法,來設置各個驗證程序控制項和頁的屬性。q 回發事件:如果是回發請求,則調用所有事件處理的程序。q 呈現:在呈現期間,視圖狀態被保存並呈現到頁。q 卸載:完全呈現頁面後,將頁面發送到客戶端並準備丟棄時,將調用卸載。4.6 ASP.NET生命周期中的事件在頁面周期的每個階段,頁面將引發可運行用戶代碼進行處理事件。對於控制項產生的事件,通過聲明的方式執行代碼,並將事件處理程序綁定到事件。不僅如此,事件還支持自動事件連接,最常用的就是Page_Load事件了,除了Page_Load事件以外,還有Page_Init等其他事件,本節將會介紹此類事件。4.6.1 頁面載入事件(Page_PreInit)每當頁面被發送到伺服器時,頁面就會重新被載入,啟動Page_PreInit事件,執行Page_PreInit事件代碼塊。當需要對頁面中的控制項進行初始化時,則需要使用此類事件,示例代碼如下所示。 protected void Page_PreInit(object sender, EventArgs e) //Page_PreInit事件 { Label1.Text = 「OK」; //標籤賦值 }在上述代碼中,當觸發了Page_PreInit事件時,就會執行該事件的代碼,上述代碼將Lable1的初始文本值設置為「OK」。Page_PreInit事件能夠讓用戶在頁面處理中,能夠讓伺服器載入時只執行一次而當網頁被返回給客戶端時不被執行。在Page_PreInit中可以使用IsPostBack來實現,當網頁第一次載入時IsPostBack屬性為false,當頁面再次被載入時,IsPostBack屬性將會被設置為true。IsPostBack屬性的使用能夠影響到應用程序的性能。4.6.2 頁面載入事件(Page_Init)Page_Init事件與Page_PreInit事件基本相同,區別在於Page_Init並不能保證完全載入各個控制項。雖然在Page_Init事件中,依舊可以訪問頁面中的各個空間,但是當頁面回送時,Page_Init依然執行所有的代碼並且不能通過IsPostBack來執行某些代碼,示例代碼如下所示。 protected void Page_Init(object sender, EventArgs e) //Page_Init事件 { if (!IsPostBack) //判斷是否第一次載入 { Label1.Text = 「OK」; //將成功信息賦值給標籤 } else { Label1.Text = 「IsPostBack」; //將回傳的值賦值給標籤 } }4.6.3 頁面載入事件(Page_Load)大多數初學者會認為Page_Load事件是當頁面第一次訪問觸發的事件,其實不然,在ASP.NET頁生命周期內,Page_Load遠遠不是第一次觸發的事件,通常情況下,ASP.NET事件順序如下所示。q 1. Page_Init()。q 2. Load ViewState。q 3. Load Postback data。q 4. Page_Load()。q 5. Handle control events。q 6. Page_PreRender()。q 7. Page_Render()。q 8. Unload event。q 9. Dispose method called。Page_Load事件是在網頁載入的時候一定會被執行的事件。在Page_Load事件中,一般都需要使用IsPostBack來判斷用戶是否進行了操作,因為IsPostBack指示該頁是否正為響應客戶端回發而載入,或者它是否正被首次載入和訪問,示例代碼如下所示。 protected void Page_Load(object sender, EventArgs e) //Page_Load事件 { if (!IsPostBack) { Label1.Text = 「OK」; //第一次執行的代碼塊 } else { Label1.Text = 「IsPostBack」; //如果用戶提交表單等 } }上述代碼使用了Page_Load事件,在頁面被創建時,系統會自動在代碼隱藏頁模型的頁面中增加此方法。當用戶執行了操作,頁面響應了客戶端回發,則IsPostBack為true,於是執行else中的操作。4.6.4 頁面卸載事件(Page_Unload)在頁面被執行完畢後,可以通過Page_Unload事件用來執行頁面卸載時的清除工作,當頁面被卸載時,執行此事件。以下情況會觸發Page_Unload事件。q 頁面被關閉。q 資料庫連接被關閉。q 對象被關閉。q 完成日誌記錄或者其他的程序請求。4.6.5 頁面指令頁面指令用來通知編譯器在編譯頁面時做出的特殊處理。當編譯器處理ASP.NET應用程序時,可以通過這些特殊指令要求編譯器做特殊處理,例如緩存、使用命名空間等。當需要執行頁面指令時,通常的做法是將頁面指令包括在文件的頭部,示例代碼如下所示。<%@ Page Language=「C#」 AutoEventWireup=「true」 CodeBehind=「Default.aspx.cs」 Inherits=「MyWeb._Default」 %><!DOCTYPE html PUBLIC 「-//W3C//DTD XHTML 1.0 Transitional//EN」 「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」>上述代碼中,就使用了@Page頁面指令來定義ASP.NET頁面分析器和編譯器使用的特定頁的屬性。當代碼隱藏頁模型的頁面被創建時,系統會自動增加@Page頁面指令。ASP.NET頁面支持多個頁面指令,常用的頁面指令如下所示。q @ Page:定義ASP.NET頁分析器和編譯器使用的頁特定(.aspx文件)屬性,可以編寫為<%@ Page attribute=「value」 [attribute=「value」…]%>。q @ Control:定義ASP.NET頁分析器和編譯器使用的用戶控制項(.ascx文件)特定的屬性。該指令只能為用戶控制項配置。可以編寫為<%@ Control attribute=「value」 [attribute=「value」…]%>。q @ Import:將命名空間顯示導入到頁中,使所導入的命名空間的所有類和介面可用戶該頁。導入的命名空間可以是.NET Framework類庫或用戶定義的命名空間的一部分。可以編寫為<%@ Import namespace=「value」 %>。q @ Implements:提示當前頁或用戶控制項實現制定的.NET Framework介面。可以編寫為<%@ Implements interface=「ValidInterfaceName」 %>。q @ Reference:以聲明的方式指示,應該根據在其中聲明此指令的頁對另一個用戶控制項或頁源文件進行動態編譯和鏈接。可以編寫為<%@ Reference page | control=「pathtofile」 %>。q @ Output Cache:以聲明的方式空間ASP.NET頁或頁中包含的用戶控制項的輸出緩存策略。可以編寫為<%@ Output Cache Duration=「#ofseconds」 Location=「Any | Client | Downstream | Server | None」 Shared=「True |False」 VaryByControl=「controlname」 VaryByCustom=「browser | customstring」 VaryByHeader=「headers」 VaryByParam=「parametername」 %>q @ Assembly:在編譯過程中將程序集鏈接到當前頁,以使程序集的所有類和介面都可用在該頁上。可以編寫為<%@ Assembly Name=「assemblyname」 %>或<%@ Assembly Src=「pathname」 %>的方式。q @ Register:將別名與命名空間以及類名關聯起來,以便在自定義伺服器控制項語法中使用簡明的表示法。可以編寫為<%@ Register tagprefix=「 tagprefix」 Namespace=「namepace」 Assembly=「assembly」 %>或<%@ Register tagprefix=「 tagprefix」 Tagname=「tagname」 Src=「pathname」 %>的方式。4.7 ASP.NET網站文件類型在ASP.NET中包含諸多的文件類型,這些類型的文件由ASP.NET支持和管理,而除了這些文件以外,其他的文件都由IIS託管。使用VS2008能夠創建大部分可以使用ASP.NET託管運行的程序。同時,使用應用程序映射可以將文件類型映射到應用程序。當需要偽靜態時,很可能需要將.html後綴託管到IIS中的應用擴展,因為默認情況下ASP.NET不會處理HTML的操作。技巧:現在的網站構架中,生成靜態是一種降低網站壓力的一種很好的解決方案。在某些情況下,伺服器可能需要偽靜態支持,就是將.aspx頁面後綴顯式成.html後綴,讓搜索引擎能夠更好的搜錄。1.ASP.NET管理的文件類型ASP.NET管理的文件類型能夠在ASP.NET應用程序中被ASP.NET應用程序的不同模塊進行訪問和調用,這些文件可能是用戶能夠直接訪問的,也有可能是用戶無法直接訪問的。ASP.NET管理的文件類型如表4-1所示。表4-1 ASP.NET管理的文件類型文件類型保存位置描述.asax根目錄。Global.asax 文件。包含 HttpApplication 對象的派生代碼,用於重新展示 Application 對象。 .ascx根目錄或子目錄。可重用的自定義 Web 控制項。 .ashx根目錄或子目錄。處理器文件。包含實現 IHttpHandler 介面的代碼,用於處理輸入請求。 .asmx根目錄或子目錄。XML Web Services 文件。包含由 SOAP 提供給其他 Web 應用的類對象和功能。 .aspx根目錄或子目錄。ASP.NET Web 窗體。包含 Web 控制項和其他業務邏輯。 .axd根目錄。跟蹤視圖文件。通常是 Trace.axd。 .browserApp_Browsers 目錄。瀏覽器定義文件。用於識別客戶端瀏覽器的可用特徵。 .cd根目錄或子目錄。類圖文件。 .compileBin 目錄。定位於適當彙編集中的預編譯文件。可執行文件(.aspx,.ascx,.master,theme)預編譯後放在 Bin 目錄。 .config根目錄或子目錄。Web.config 配置文件。包含用於配置 ASP.NET 若干特徵的 XML 元素集。 .cs,.jsl,vbApp_Code 目錄。有些是 ASP.NET 的代碼分離文件,位於與 Web 頁面相同的目錄。運行時被編譯的類對象源代碼。類對象可以是 HTTP 模塊,HTTP 處理器,或 ASP.NET 頁面的代碼分離文件。 .csproj,vbproj,vjsprojVisual Studio 工程目錄。Visual Studio 客戶工程文件。 .disco,.vsdiscoApp_WebReferences 目錄。XML Web Services Discovery 文件。用於定位可用 Web Services。 .dsdgm,dsprototype根目錄或子目錄。分散式服務圖表(DSD)文件。可添加到 Visual Studio 方案中,為反向引擎提供消耗 Web Services 時的交互性圖表。 .dllBin 目錄。已編譯類庫文件。作為替代,可將類對象源代碼保存到 App_Code 目錄。 .licx,.webinfo根目錄或子目錄。許可協議文件。許可協議有助於保護控制項開發者的知識產權,並對控制項用戶的使用權進行驗證。 .master根目錄或子目錄。模板文件定義 Web 頁面的統一布局,並在其他頁面中得到引用。 .mdb,.ldbApp_Data 目錄。Access 資料庫文件。 .mdfApp_Data 目錄。SQLServer 資料庫文件。 .msgx,.svc根目錄或子目錄。Indigo Messaging Framework(MFx)服務文件。 .rem根目錄或子目錄。遠程處理器文件。 .resourcesApp_GlobalResources 或 App_LocalResources 目錄。資源文件。包含圖像,本地化文本,或其他數據的資源引用串。 .resxApp_GlobalResources 或 App_LocalResources 目錄。資源文件。包含圖像,本地化文本,或其他數據的資源引用串。 .sdm,.sdmDocument根目錄或子目錄。系統定義模型(SDM)文件。 .sitemap根目錄。網站地圖文件。包含網站的結構。ASP.NET 通過默認的網站地圖提供者,簡化導航控制項對網站地圖文件的使用。 .skinApp_Themes 目錄。皮膚定義文件。用於確定顯示格式。 .slnVisual Web Developer 工程目錄。Visual Web Developer 工程的項目文件。 .soap根目錄或子目錄。SOAP 擴展文件。 注意:ASP.NET 管理的文件類型映射到 IIS 的 Aspnet_isapi.dll。2.IIS 管理的文件類型在ASP.NET應用程序中,有些動態的文件如asp文件就不被ASP.NET應用程序框架管理,這些文件由IIS進行管理,由IIS管理的文件類型如表4-2所示。表4-2 IIS管理的文件類型文件類型保存位置描述.asa根目錄。Global.asa 文件。包含 ASP 會話對象或應用程序對象生命周期中的各種事件處理。 .asp根目錄或子目錄.ASP Web 頁面。包含 @ 指令和使用 ASP 內建對象的腳本代碼。 .cdxApp_Data 目錄.Visual FoxPro 的混合索引文件。 .cer根目錄或子目錄。證明文件。用於對網站的授權。 .idc根目錄或子目錄。Internet Database Connector(IDC)文件。被映射到 httpodbc.dll。 注意:由於無法為資料庫連接提供足夠的安全性,IDC 將不再被繼續使用。IIS 6.0 是最後一個支持 IDC 的版本。 .shtm,.shtml,.stm根目錄或子目錄。包含文件。被映射到 ssinc.dll。 注意:IIS管理的文件類型被映射到IIS的asp.dll3.靜態文件類型IIS僅提供已註冊MIME類型的靜態文件服務,註冊信息保存在Mime Map IIS元資料庫中。如果某種文件類型已經映射到指定應用程序,在不需要作為靜態文件的情況之下,無需再在MIME類型列表中進行包含。默認的靜態文件類型如表4-3所示。表4-3 靜態文件類型文件類型保存位置描述.css根目錄或子目錄,以及 App_Themes 目錄。樣式表文件。用於確定 HTML 元素的顯示格式。 .htm,.html根目錄或子目錄。靜態網頁文件。由 HTML 代碼編寫。 注意:雖然ASP.NET的代碼頁面也能夠手動添加到MIME類型列表中,但是這樣操作瀏覽者就能夠看到頁面源代碼,從而暴露ASP.NET頁面源代碼,相對於伺服器而言是非常不安全的。4.8 小結本章介紹了ASP.NET頁面生命周期,以及ASP.NET頁面的幾種模型。ASP.NET頁面生命周期是ASP.NET中非常重要的概念,熟練掌握ASP.NET生命周期能對ASP.NET開發,自定義控制項開發起到促進作用。本章還介紹了:q 代碼隱藏頁模型的解釋過程。q 代碼隱藏頁模型的事件驅動處理。q ASP.NET網頁的客戶端狀態。q ASP.NET頁面生命周期。q ASP.NET生命周期中的事件。q ASP.NET 網站文件類型。上面的章節都分開的講解了ASP.NET運行中的一些基本機制,在了解了這些基本運行機制後,就能夠在.NET框架下做ASP.NET開發了。雖然這些都是基本概念,但是在今後的開發中,會起到非常重要的作用。本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lillllllll/archive/2009/11/11/4800512.aspx
推薦閱讀:

鄭永年:腐敗與中國的歷史周期律
太乙神數《甲寅太乙歷》的基本術數周期
月經周期短的女人老得快嗎
鈍化的周期之刃和難解的價格之謎
男性的生理周期

TAG:生命 | 代碼 | 博客 | .NET | ASP.NET | 模型 | 生命周期 | 網頁 | CSDN | 周期 | 專欄 |