ASP與ASP.NET的區(qū)別
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
從一開始使用ASP,用戶面臨的問題就是:如果應(yīng)用程序要有強(qiáng)大的功能,就需要編寫大量的代碼,所有的功能都必須用代碼來實現(xiàn)。雖然使用一些小技巧可以實現(xiàn)代碼的共享,但是仍然存在大量嵌入HTML的代碼,難于管理。這還只是一個表面現(xiàn)象。 從更深的層次來研究ASP.NET,會發(fā)現(xiàn)ASP.NET與ASP之間的區(qū)別主要在于以下幾個方面。 (1) 效率 ASP是一個腳本編程環(huán)境,只能用VBScript或者JavaScript這樣的非模塊化語言來編寫。當(dāng)ASP程序完成之后,在每次請求的時候解釋執(zhí)行。這就意味著它在使用其他語言編寫的大量組件的時候會遇到困難,并且無法實現(xiàn)對操作系統(tǒng)的底層操作。由于它是解釋執(zhí)行的,所以速度和效率要遠(yuǎn)遠(yuǎn)低于編譯執(zhí)行的程序。而ASP.NET則是建立在.NET Framework之上的,它可以使用Visual Basic、C++這樣的模塊化程序設(shè)計語言,并且它在第一次執(zhí)行時進(jìn)行了編譯,之后的執(zhí)行不需要重新編譯就可以直接運(yùn)行,所以速度和效率比ASP會提高很多。 (2) 可重用性 在寫ASP應(yīng)用程序的時候,ASP代碼和HTML混合在一起。只要有需要,就可以在任意的一個位置插入一段代碼來實現(xiàn)特定的功能。這種方法表面上看起來很方便,但在實際的工作中會產(chǎn)生大量繁瑣的頁面,很難讀懂,導(dǎo)致代碼維護(hù)很困難。雖然可以使用include指令盡量讓程序模塊化,但是仍然不是一個最終徹底的解決方案。而ASP.NET則可以實現(xiàn)代碼和內(nèi)容的完全分離,使得前面提到的問題迎刃而解。 (3) 代碼量 ASP需要對所有的要實現(xiàn)的功能通過編寫代碼來實現(xiàn)。例如,所有的ASP程序員都遇到過這樣的情況:為了保證一個用戶數(shù)據(jù)提交頁面的友好性,當(dāng)用戶輸入錯誤的時候會顯示錯誤的位置,并盡量把用戶原來的輸入在控件中顯示出來。這樣的一個應(yīng)用需要程序員編寫大量的代碼來實現(xiàn)。雖然它實在是一個非常簡單的功能,但在其他的應(yīng)用程序中根本不需要編寫這么多的代碼就可以實現(xiàn)。在ASP.NET中,程序員會發(fā)現(xiàn)只要預(yù)先說明,這樣的功能ASP.NET就可以自動實現(xiàn)。所以相對來說,要實現(xiàn)同樣的功能,使用ASP.NET比使用ASP的代碼量要小得多。 …… ASP.NET的優(yōu)點 通過上面對ASP缺點的介紹,我們可以很容易地理解ASP.NET已經(jīng)解決了這些問題。事實的確如此,并且ASP.NET所提供的不僅僅是這些。要了解ASP.NET的所有特性,先讓我們來看看設(shè)計ASP.NET的4個主要目標(biāo): ● 使代碼更清晰 ● 提高可部署性、可伸縮性、安全性以及可靠性 ● 為不同的瀏覽器和設(shè)備提供更好的支持 ● 支持一種全新的Web應(yīng)用程序 但是作為用戶,您不會直接使用這些新特性,因為Common Language Runtime (CLR)會處理其中的大多數(shù)特性。第2章會詳細(xì)介紹這方面的內(nèi)容,現(xiàn)在先看看ASP.NET的強(qiáng)大功能。 1. 多語言 ASP曾在腳本引擎方面受到了限制,特別是VBScript和JScript。而.NET Framework本質(zhì)上就支持多語言,因此我們可以使用任何需要的語言。在默認(rèn)情況下,Visual Basic .NET、C#和JScript .NET都附帶了CLR(它們都是經(jīng)過編譯的),另外還可以使用許多第三方語言,例如Perl、COBOL等。此外,Visual Studio .NET增加了對Visual C++的支持和Java實現(xiàn)(稱為 J# .NET)。由于多語言支持是.NET Framework的一部分,因此不論使用何種語言都沒有關(guān)系。很明顯,從用戶的觀點來看,保持某種程度上的兼容性可能是最好不過的(例如僅僅為了維護(hù)),但對于架構(gòu)而言,語言的使用是沒有任何限制的。 多語言支持的作用并不僅僅限于可使用什么語言,同時還在于如何使用這些語言。通過它可以用某種語言編寫組件,而用另一種語言來使用(或重用)這些組件。比如用C#編寫基于服務(wù)器的控件,然后在Visual Basic .NET中繼承這些控件,接著在JScript .NET (或任何.NET支持的語言)中繼續(xù)繼承這些控件。 說明: 有關(guān)架構(gòu)的詳細(xì)介紹請參閱第2章,而第3章將詳細(xì)介紹各種語言。 2. 服務(wù)器處理 如果您做過Visual Basic編程工作,就會發(fā)現(xiàn)要掌握新的ASP.NET 服務(wù)器控件是相當(dāng)容易的,但如果以前僅使用過ASP,就會在學(xué)習(xí)ASP.NET 服務(wù)器控件的初始階段出現(xiàn)一些混淆錯誤。不過即使這樣也不用擔(dān)心,因為它們是非常容易理解和使用的——它們只是和ASP有很大的不同。 使用ASP的一大問題在于頁面簡單地定義了一個大函數(shù),該函數(shù)開始于頁面的開頭,結(jié)束于頁面的末尾。不管頁面的內(nèi)容是純HTML還是ASP生成的HTML,它都是按照頁面順序顯示的。因此,邏輯代碼依賴于它在頁面中的位置,并且無法將HTML控件作為目標(biāo),除非將它們作為流的一部分進(jìn)行顯示。我們所做的任何工作都需要編寫代碼,包括HTML元素的輸出。 而ASP.NET就解決了這個問題,方法是為控件引入一個聲明的基于服務(wù)器的模型。這對ASP開發(fā)人員來說是一個截然不同的概念,因為控件在服務(wù)器上聲明,可以在服務(wù)器上編程,也可以是客戶端驅(qū)動的事件。這聽起來確實不可思議,但使用起來很簡單。為把一個普通的HTML控件變成一個服務(wù)器控件,只需將runat="server"作為一個特性添加到代碼中。例如: <input id="FirstName" type="text" runat="server" > 這是一個標(biāo)準(zhǔn)的HTML控件,增加了runat特性后,就可以利用服務(wù)器端的代碼對該控件進(jìn)行編程了。例如,如果要將該控件置于一個窗體中,并且將該窗體提交回同一個頁面中,就可以在服務(wù)器端代碼中做以下修改: Dim PersonFirstName As String PersonFirstName = FirstName.Text 控件在服務(wù)器上運(yùn)行,將允許我們使用ID特性來直接識別它。這樣代碼就具有更高的可讀性,原因在于不必引用窗體的內(nèi)容或者將這些內(nèi)容復(fù)制到變量中。同時直接引用控件也就更加自然了,從而使頁面的開發(fā)更加簡單。如果您做過Visual Basic或VBA編程工作,對這些概念就不會太陌生。 但是如果您以前只用ASP編寫過腳本,理解上述內(nèi)容就比較吃力,不過這僅僅是因為ASP.NET用不同的方式處理往返于瀏覽器的頁面內(nèi)容。如果您了解數(shù)據(jù)庫訪問技術(shù),就應(yīng)該使用過對象、調(diào)用方法以及設(shè)置過屬性,而這些與ASP.NET服務(wù)器控件并無多大差別。 說明: 第4章將介紹新的服務(wù)器處理結(jié)構(gòu)。 3. Web Form控件 將現(xiàn)有的HTML控件轉(zhuǎn)換為服務(wù)器端的控件是比較容易的,不過這種方法仍然存在幾個問題: ● 一致性:我們?nèi)匀徊坏貌唤邮芤恍〩TML控件的非常不直觀的固有特征。例如,有沒有一個INPUT標(biāo)記符用于單行文本項?有沒有一個TEXTAREA標(biāo)識符用于多行文本項?指定行和列的單個控件真的更有意義嗎? ● 用戶經(jīng)驗:如何輕松地編寫站點,向諸如IE這樣的瀏覽器傳送豐富的內(nèi)容,同時保留對低級別瀏覽器的兼容性呢?HTML是無法根據(jù)瀏覽器改變其內(nèi)容的,而要達(dá)到這個目的,必須編寫代碼。 ● 設(shè)備:如何編寫站點來應(yīng)付除瀏覽器之外的其他設(shè)備呢?如今像WAP手機(jī)、PDA甚至電冰箱這樣的設(shè)備都有瀏覽器。與瀏覽器問題一樣,都必須為其手工編寫代碼。 為了解決這些問題,Microsoft公司創(chuàng)建了一組服務(wù)器控件,它們都用asp:前綴標(biāo)識。ASP.NET服務(wù)器控件通過以下方式來處理上述問題: ● 提供一致的命名標(biāo)準(zhǔn)。例如,所有文本輸入欄都由TextBox控件處理。對于不同的模式(如多行文本、密碼等),只需指定相應(yīng)的特性即可。 ● 提供一致的屬性。所有的服務(wù)器控件使用一組一致的屬性,這樣更便于記憶。例如,TextBox控件中的Text欄比Value欄更加直觀。 ● 提供一致的事件模型。傳統(tǒng)的ASP頁面通常有大量用于處理數(shù)據(jù)傳送的代碼,特別是當(dāng)一個頁面提供多行命令時,就更是如此。而利用ASP.NET,我們可以為事件過程封裝控件,從而給服務(wù)器端代碼提供更多的結(jié)構(gòu)。 ● 發(fā)送純HTML或者HTML與客戶端JavaScript。通過一個小異常(這是故意的),服務(wù)器控件在默認(rèn)狀態(tài)下會發(fā)送HTML 3.2,提供很高的跨瀏覽器兼容性。對其進(jìn)行修改,使之在默認(rèn)狀態(tài)下指向像IE這樣的高級瀏覽器,這樣控件就會發(fā)送HTML 4.0和DHTML,提供更豐富的界面。此時用戶只能看到HTML內(nèi)容,而看不到服務(wù)器控件。 ● 發(fā)送設(shè)備指定的代碼。當(dāng)一個瀏覽器發(fā)出請求時,某個控件會發(fā)送HTML,而當(dāng)WAP手機(jī)發(fā)出請求時,該控件就會發(fā)送WML。該控件還會檢測設(shè)備并生成正確的標(biāo)記。 該文章在 2015/1/31 23:34:57 編輯過
|
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |