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