大型網(wǎng)站設(shè)計(jì)服務(wù)器端動(dòng)態(tài)主設(shè)計(jì)_第1頁(yè)
大型網(wǎng)站設(shè)計(jì)服務(wù)器端動(dòng)態(tài)主設(shè)計(jì)_第2頁(yè)
大型網(wǎng)站設(shè)計(jì)服務(wù)器端動(dòng)態(tài)主設(shè)計(jì)_第3頁(yè)
大型網(wǎng)站設(shè)計(jì)服務(wù)器端動(dòng)態(tài)主設(shè)計(jì)_第4頁(yè)
大型網(wǎng)站設(shè)計(jì)服務(wù)器端動(dòng)態(tài)主設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

可修改歡迎下載精品Word可修改歡迎下載精品Word可修改歡迎下載精品Word第七章大型網(wǎng)站設(shè)計(jì)——效勞器端動(dòng)態(tài)主頁(yè)設(shè)計(jì)通過前面各章的介紹,相信大家已經(jīng)對(duì)網(wǎng)頁(yè)設(shè)計(jì)已經(jīng)有一個(gè)完整的認(rèn)識(shí)了。對(duì)于建立一個(gè)個(gè)人或者小型網(wǎng)站來說,利用前面給大家介紹的各種技術(shù)和工具就已經(jīng)能夠建立一個(gè)圖文并茂,動(dòng)態(tài)十足的網(wǎng)站了。但是,對(duì)于一個(gè)大型或者商業(yè)網(wǎng)站來說,這些技術(shù)只能夠提供Web頁(yè)面的建立和在靜態(tài)Web頁(yè)面的根底上進(jìn)行的簡(jiǎn)單動(dòng)態(tài)交互,而大型或者商業(yè)網(wǎng)站的設(shè)計(jì)除了會(huì)關(guān)注網(wǎng)頁(yè)所呈現(xiàn)給用戶的外觀,它們更加關(guān)注網(wǎng)站的信息發(fā)布、信息收集以及信息處理的能力,而這些能力使用前面所介紹的技術(shù)是無法獲得的,因此計(jì)算機(jī)技術(shù)人員就開發(fā)出了各種效勞器端動(dòng)態(tài)主頁(yè)設(shè)計(jì)技術(shù)來完成這些功能。通過本章的學(xué)習(xí),應(yīng)掌握以下內(nèi)容:·ASP.NET的特點(diǎn)及環(huán)境搭建·ASP.NET的WebForm的應(yīng)用·ASP.NET的數(shù)據(jù)庫(kù)編程的應(yīng)用·ASP.NET的會(huì)話控制的應(yīng)用7.1效勞器端動(dòng)態(tài)主頁(yè)設(shè)計(jì)概述7.1.1效勞器端動(dòng)態(tài)技術(shù)的誕生隨著Internet應(yīng)用的深入,Web技術(shù)引入的新的商機(jī)也逐漸為人們所注意。但是由于當(dāng)時(shí)的Web技術(shù)缺乏對(duì)交互和信息動(dòng)態(tài)更新的支持,阻礙的Web技術(shù)在商業(yè)領(lǐng)域的應(yīng)用。為了突破這種局限,計(jì)算機(jī)科學(xué)家進(jìn)行了很多種嘗試,提出了很多種對(duì)Web技術(shù)進(jìn)行信息交互功能擴(kuò)展的技術(shù),其中最早投入使用并迅速成為主流技術(shù)的是“通用網(wǎng)關(guān)接口〔CGI〕〞技術(shù),它的全稱是CommonGatewayInterface,它的出現(xiàn)令Web技術(shù)擁有了強(qiáng)大的交互能力,并且擴(kuò)展了WWWServer的功能,例如WWWServer和數(shù)據(jù)庫(kù)管理系統(tǒng)〔DBMS〕交互的能力、WWWServer運(yùn)行效勞器進(jìn)程的能力等。這些擴(kuò)展加速了Web技術(shù)在商業(yè)上的應(yīng)用,并且促進(jìn)了各種大型網(wǎng)站的誕生。CGI技術(shù)在其誕生之初以其強(qiáng)大的功能成為90%大型網(wǎng)站首選的構(gòu)建技術(shù),但是通過使用人們發(fā)現(xiàn)CGI技術(shù)存在兩個(gè)致命的問題。首先,由于CGI技術(shù)提供了WWWServer效勞器和主機(jī)程序的交互能力,也使CGI技術(shù)存在比較嚴(yán)重的平安問題,惡意黑客可以通過CGI技術(shù)的漏洞控制效勞器并造成效勞的癱瘓和數(shù)據(jù)的損失;其次,CGI技術(shù)需要為每一次訪問建立一個(gè)進(jìn)程來完成對(duì)CGI腳本的處理,如果網(wǎng)站的訪問量比較大,那么這種處理方式將嚴(yán)重影響網(wǎng)站的性能。由于這些問題的存在,各大軟件廠商都紛紛推出新的技術(shù)來替代CGI技術(shù),其中比較有影響力的包括PHP、JSP和ASP等等,其中又以MicroSoft公司推出的ASP技術(shù)使用最廣泛。2000年秋天,MicroSoft公司推出了ASP技術(shù)的升級(jí)版——ASP.NET技術(shù),本章將通過對(duì)ASP.NET技術(shù)的介紹,幫助同學(xué)們了解和掌握一種效勞器端編程技術(shù),擁有建立大型網(wǎng)站的能力。1.ASP技術(shù)的歷史在講述ASP.NET歷史之前,首先來回憶一下ASP。ASP的第一個(gè)版本是0.9測(cè)試版。它給WEB開發(fā)帶來一陣暴風(fēng),它能夠?qū)⒋a直接嵌入HTML,使得設(shè)計(jì)WEB頁(yè)面變得更簡(jiǎn)單,更強(qiáng)大,并且通過內(nèi)置的組件能夠?qū)崿F(xiàn)強(qiáng)大功能,最明顯的就是ActiveXDataObjects〔ADO〕,它使得建立一個(gè)動(dòng)態(tài)頁(yè)面如小孩子玩游戲一樣簡(jiǎn)單。最終出場(chǎng)的是ActiveServerPage1.0,它做為IIS的附屬產(chǎn)品免費(fèi)發(fā)送。并且不久就在Windows平臺(tái)上廣泛使用。ASP與ADO的結(jié)合使用開發(fā)者很容易地在一個(gè)數(shù)據(jù)庫(kù)中建立和翻開一個(gè)記錄集。這不無疑是它如此快就被群眾接受的因素,因?yàn)槟悻F(xiàn)在能使用這些腳本建立和翻開一個(gè)記錄集,處理和輸出任何數(shù)據(jù),以任何順序,幾乎只要你能想到的,它就能完成。1998年,微軟公司又發(fā)布了ASP2.0。ASP1.0和ASP2.0主要區(qū)別是外部的組件需要實(shí)例化。有了ASP2.0和IIS4.0,我們就有可能建立ASP應(yīng)用了,而且每個(gè)組件就有了自已單獨(dú)的內(nèi)存空間。內(nèi)置的MicroSoftTransactionServer〔MTS〕也使用制做組件便得簡(jiǎn)單。微軟公司接著開發(fā)了Windows2000操作系統(tǒng)。這個(gè)Windows版本給我們帶上了IIS5.0以及ASP3.0。此次并不是簡(jiǎn)單對(duì)ASP進(jìn)行補(bǔ)充,核心的不同實(shí)際上是把很多的事情交給了COM來做。在windows2000中,微軟結(jié)合了MTS與COM核心環(huán)境做出了COM+,這就讓主機(jī)有了一種新的方法來使用組件,同樣給主機(jī)帶來了更多的穩(wěn)定性,成了一個(gè)可以升級(jí)的效率高的工作平臺(tái)。IIS5.0在外表上似乎沒有改什么,但是在接口上動(dòng)的手術(shù)比較大。在內(nèi)部,它使用COM+組件效勞來對(duì)組件提供一個(gè)更好的執(zhí)行的環(huán)境。有了這些,微軟公司推出了ASP.NET,ASP.NET又叫ASP.NET,他不是ASP的簡(jiǎn)單升級(jí),而是MicroSoft推出的新一代ActiveServerPages。ASP.NET是微軟開展的新的體系結(jié).NET的一局部,其中全新的技術(shù)架構(gòu)會(huì)讓每個(gè)人的編程生活變得更的簡(jiǎn)單7.1.2MicroSoft.NET與ASP.NET2000年秋天,IT業(yè)巨頭——MicroSoft公司發(fā)布了其以網(wǎng)絡(luò)為核心的新的技術(shù)框架——MicroSoft.NET技術(shù)框架,說明微軟將以網(wǎng)絡(luò)為中心,徹底轉(zhuǎn)換產(chǎn)品研發(fā)、發(fā)布的方式,改變產(chǎn)品和效勞的范圍。在MicroSoft.NET技術(shù)框架中,ASP.NET技術(shù)是其中的一個(gè)最主要的組成局部之一,它是ASP的下一代版本,然而ASP.NET又并非從ASP3.0自然演化而來,在許多方面,ASP.NET與ASP有著本質(zhì)的不同。ASP.NET完全基于模塊與組件,具有更好的可擴(kuò)展性與可定制性,數(shù)據(jù)處理方面更是引入了許多沖動(dòng)人心的新技術(shù),正是這些具有革新意義的新特性,讓ASP.NET遠(yuǎn)遠(yuǎn)超越了ASP,同時(shí)也提供給WEB開發(fā)人員更好的靈活性,有效縮短了WEB應(yīng)用程序的開發(fā)周期。ASP.NET與Windows2000Server/AdvancedServer的完美組合,為中小型乃至企業(yè)級(jí)的web商業(yè)模型提供了一個(gè)更為穩(wěn)定,高效,平安的運(yùn)行環(huán)境。要了解ASP.NET的真實(shí)面目,首先就得了解一下微軟.NET戰(zhàn)略。1.Microsoft.NET的歷史隨著網(wǎng)絡(luò)經(jīng)濟(jì)的到來,微軟公司希望幫助用戶,能夠在任何時(shí)候、任何地方、利用任何工具都可以獲得網(wǎng)絡(luò)上的信息,并享受網(wǎng)絡(luò)通信所帶來的快樂。.NET戰(zhàn)略就是為著實(shí)現(xiàn)這樣的目標(biāo)而設(shè)立的。微軟公開宣布,今后將著重于網(wǎng)絡(luò)效勞和網(wǎng)絡(luò)資源共享的開發(fā)工作,并稱,將會(huì)為公眾提供更加豐富、有用的網(wǎng)絡(luò)資源與效勞。微軟新一代平臺(tái)的正式名稱叫做“新一代Windows效勞〞〔NGWS〕,現(xiàn)在微軟已經(jīng)給這個(gè)平臺(tái)注冊(cè)了正式的商標(biāo)——MicroSoft.Net。在.Net環(huán)境中,微軟不僅僅是平臺(tái)和產(chǎn)品的開發(fā)者,并且還將作為架構(gòu)效勞提供商、應(yīng)用程序提供商,開展全方位的Internet效勞。在談及這個(gè)平臺(tái)中使用的新技術(shù),微軟透露,它將在.Net環(huán)境中提供更多新產(chǎn)品和一攬子的全套效勞。MicroSoft.NET平臺(tái)的根本思想是:側(cè)重點(diǎn)從連接到互聯(lián)網(wǎng)的單一網(wǎng)站或設(shè)備上,轉(zhuǎn)移到計(jì)算機(jī)、設(shè)備和效勞群組上,使其通力合作,提供更廣泛更豐富的解決方案。用戶將能夠控制信息的傳送方式、時(shí)間和內(nèi)容。計(jì)算機(jī)、設(shè)備和效勞將能夠相輔相成,從而提供豐富的效勞,而不是像孤島那樣,由用戶提供唯一的集成。企業(yè)可以提供一種方式,允許用戶將它們的產(chǎn)品和效勞無縫地嵌入自己的電子構(gòu)架中。這種思路將擴(kuò)展二十世紀(jì)八十年代首先由PC賦予的個(gè)人權(quán)限。MicroSoft.NET將開創(chuàng)互聯(lián)網(wǎng)的新局面,基于HTML的顯示信息將通過可編程的基于XML的信息得到增強(qiáng)。XML是經(jīng)“萬維網(wǎng)聯(lián)盟〞定義的受到廣泛支持的行業(yè)標(biāo)準(zhǔn),Web瀏覽器標(biāo)準(zhǔn)也是由該組織創(chuàng)立的。微軟公司為開發(fā)它投入了大量精力,但它并不是MicroSoft的專有技術(shù)。XML提供了一種從數(shù)據(jù)的演示視圖別離出實(shí)際數(shù)據(jù)的方式。這是新一代互聯(lián)網(wǎng)的關(guān)鍵,提供了開啟信息的方式,以便對(duì)信息進(jìn)行組織、編程和編輯;可以更有效地將數(shù)據(jù)分布到不同的數(shù)字設(shè)備;允許各站點(diǎn)進(jìn)行合作,提供一組可以相互作用的“Web效勞〞。MicroSoft.NET綜述MicroSoft.NET平臺(tái)包括用于創(chuàng)立和操作新一代效勞的.NET根底結(jié)構(gòu)和工具;可以啟用大量客戶機(jī)的.NETUserExperience;用于建立新一代高度分布式的數(shù)以百萬計(jì)的.NET積木式組件效勞;以及用于啟用新一代智能互聯(lián)網(wǎng)設(shè)備的.NET設(shè)備軟件。MicroSoft.NET產(chǎn)品和效勞—包括Windows.NET,連同建立積木式效勞的核心集成套件;MSNTM.NET;個(gè)人訂購(gòu)效勞;Office.NET;VisualStudio.NET;以及用于.NET的bCentralTM。.Net環(huán)境中的突破性改進(jìn)在于:1.使用統(tǒng)一的Internet標(biāo)準(zhǔn)〔如XML〕將不同的系統(tǒng)對(duì)接;2.這是Internet上首個(gè)大規(guī)模的高度分布式應(yīng)用效勞架構(gòu);3.使用了一個(gè)名為“聯(lián)盟〞的管理程序,這個(gè)程序能全面管理平臺(tái)中運(yùn)行的效勞程序,并且為它們提供強(qiáng)大的平安保護(hù)后臺(tái);.NET平臺(tái)包括如下組件:1.用戶數(shù)據(jù)訪問技術(shù)。其中包括一個(gè)新的基于XML的、以瀏覽器為組件的混合信息架構(gòu),叫做“通用畫板〞;2.基于WindowsDNA2000的構(gòu)建和開發(fā)工具;3.一系列模塊化的效勞,其中包括認(rèn)證、信息傳遞、存儲(chǔ)、搜索和軟件送遞功能;4.一系列驅(qū)動(dòng)客戶設(shè)備的軟件;2.什么是ASP.NET?本節(jié)將詳細(xì)介紹稱為ActiveServerPages+〔ASP.NET〕的網(wǎng)絡(luò)應(yīng)用程序可編程模板。建立在Microsoft.NET框架上網(wǎng)絡(luò)應(yīng)用程序共享一個(gè)通用應(yīng)用程序模板。在這個(gè)模型中,網(wǎng)絡(luò)應(yīng)用程序是一套起源于基URL的URLs。因此它包含用于生成在瀏覽器中觀看的網(wǎng)頁(yè)的網(wǎng)絡(luò)應(yīng)用程序和網(wǎng)絡(luò)效勞。如同名字所述,ASP.NET是由活動(dòng)效勞器頁(yè)面〔ASP〕開展而來。ASP.NET利用commonlanguageruntime和效勞框架網(wǎng)絡(luò)應(yīng)用程序提供了一個(gè)可靠的、自動(dòng)化的、可擴(kuò)展的主機(jī)環(huán)境。ASP.NET也受益于commonlanguageruntime集成模板,簡(jiǎn)化了應(yīng)用程序的配制。另外,它提供簡(jiǎn)化應(yīng)用程序開發(fā)的效勞〔如狀態(tài)管理效勞〕以及高水平的編程模板〔如ASP.NETWebForms和ASP.NETWebServices〕。ASP.NET的核心是運(yùn)行語言,一個(gè)高性能的用于處理基于低級(jí)結(jié)構(gòu)的請(qǐng)求的運(yùn)行語言,而基于的結(jié)構(gòu)與MicroSoftInternetInformationServices〔IIS〕所提供的ISAPI結(jié)構(gòu)相似。運(yùn)行語言是在象效勞器上的IIS或客戶機(jī)上的IE之類的unmanaged主機(jī)過程中運(yùn)行的受控代碼。runtime負(fù)責(zé)處理引入的所有請(qǐng)求,并對(duì)每個(gè)請(qǐng)求應(yīng)用程序的URL進(jìn)行解析,然后把請(qǐng)求分配到應(yīng)用程序以進(jìn)行進(jìn)一步的處理。運(yùn)行語言是多線程的,并異步處理請(qǐng)求,因此劣質(zhì)的應(yīng)用程序代碼阻礙不了它對(duì)新請(qǐng)求的處理。而且運(yùn)行語言假定失敗必會(huì)發(fā)生,因此它被控制為盡最大力量自動(dòng)地從訪問沖突、內(nèi)存泄漏、死鎖等事故中恢復(fù)過來。除非是硬件故障,運(yùn)行語言的目標(biāo)是100%的可靠性。網(wǎng)絡(luò)根本上是一個(gè)無狀態(tài)模型,并且在請(qǐng)求間沒有聯(lián)系,這使得編寫網(wǎng)絡(luò)應(yīng)用程序很困難,因?yàn)閼?yīng)用程序通常需要維護(hù)跨多個(gè)請(qǐng)求的狀態(tài)。ASP.NET增強(qiáng)了由ASP引入的狀態(tài)管理效勞,以便為網(wǎng)絡(luò)應(yīng)用程序提供三種類型的狀態(tài):應(yīng)用程序、會(huì)話、用戶。就象在ASP中一樣,應(yīng)用程序狀態(tài)特定于一個(gè)應(yīng)用程序?qū)嵗⑶也粫?huì)持久。會(huì)話狀態(tài)是特定于一個(gè)用戶與應(yīng)用程序間的會(huì)話的。與ASP會(huì)話狀態(tài)不同,ASP.NET會(huì)話狀態(tài)儲(chǔ)存在一個(gè)獨(dú)立的過程中,并且可把它配制成可以儲(chǔ)存到一個(gè)獨(dú)立的機(jī)器上。這使得會(huì)話狀態(tài)當(dāng)應(yīng)用程序在網(wǎng)絡(luò)群〔Webfarm〕擴(kuò)展時(shí)非常有用。用戶狀態(tài)類似于會(huì)話狀態(tài),但通常它不會(huì)超時(shí),并且是永久性的。因此,用戶狀態(tài)對(duì)儲(chǔ)存用戶參數(shù)和其它個(gè)性化的信息是有用的。所有狀態(tài)管理效勞都被實(shí)現(xiàn)為模塊,因此它們?nèi)菀自黾拥綉?yīng)用程序管道中,或從中刪除。如果除了由ASP.NET提供的效勞外,還需要額外的狀態(tài)管理效勞,那么可由第三方的模塊提供。ASP.NET同樣提供高速緩沖效勞,以改善性能。輸出緩沖可完全節(jié)省網(wǎng)頁(yè)翻譯,段緩沖儲(chǔ)存局部的網(wǎng)頁(yè)。由于提供了相應(yīng)的類,所以只要需要,應(yīng)用程序、模塊以及請(qǐng)求處理程序可以在高速緩存中儲(chǔ)存任意數(shù)量的對(duì)象。7.1.3ASP.NET的組成ASP.NET應(yīng)用程序可編程模板主要是有兩個(gè)高級(jí)可編程模塊構(gòu)成,下面就簡(jiǎn)單介紹一下這兩個(gè)高級(jí)可編程模塊,它們分別是:ASP.NET網(wǎng)絡(luò)表單〔WebForm〕和ASP.NET網(wǎng)絡(luò)效勞〔WebService〕。1.ASP.NET網(wǎng)絡(luò)表單網(wǎng)絡(luò)表單把基于VisualBasic?的表單的高生產(chǎn)性的優(yōu)點(diǎn)帶到了網(wǎng)絡(luò)應(yīng)用程序的開發(fā)中來。網(wǎng)絡(luò)表單支持傳統(tǒng)的將HTML內(nèi)容與角本代碼混合的ASP語法,但是它提出了一種將應(yīng)用程序代碼和用戶接口內(nèi)容別離的更加結(jié)構(gòu)化的方法。引入的網(wǎng)絡(luò)表單控件用于為封裝通用用戶接口元素提供了一種機(jī)制。這些新的特點(diǎn)使得開發(fā)工具在支持VB小應(yīng)用程序的同時(shí),也支持設(shè)計(jì)時(shí)模塊,使得WUSIWYG工具支持網(wǎng)頁(yè)布局。網(wǎng)絡(luò)表單控件負(fù)責(zé)生成用戶接口,典型情況是在HTML表單中。ASP.NET是提供了一套映射傳統(tǒng)的HTML用戶接口小部件〔包括列表框,文本框和按鈕〕的網(wǎng)絡(luò)表單控件和一套附加的更加復(fù)雜的網(wǎng)絡(luò)控件〔如日歷和廣告轉(zhuǎn)板〕。這些控件的一個(gè)重要特點(diǎn)是,它們可以被編寫以適應(yīng)客戶端的能力;同一網(wǎng)頁(yè)把大范圍的客戶端平臺(tái)和表單因素作為目標(biāo)。換句話說,網(wǎng)絡(luò)表單控件能“嗅〞到正在查找表單的客戶,然后返回適宜的用戶經(jīng)驗(yàn)――可能是適合低級(jí)瀏覽器的HTML3.2或是適于IE5.0的動(dòng)態(tài)HTML。考慮到網(wǎng)絡(luò)是一種無狀態(tài)的聯(lián)接模型,網(wǎng)絡(luò)應(yīng)用程序開發(fā)人員所面臨的一個(gè)很復(fù)雜的問題是,他們要對(duì)用戶與基于網(wǎng)絡(luò)的接口的交互作用作出反響。網(wǎng)絡(luò)利用ASP.NET的體系架構(gòu)提供了一套豐富的效勞,以幫助開發(fā)人員建立交互式網(wǎng)頁(yè)。這些效勞的凈作用是使基于組件的、事件驅(qū)動(dòng)的可編程模塊,對(duì)開發(fā)人員來說,非常象客戶端的表單程序設(shè)計(jì)。用戶與網(wǎng)頁(yè)交互作用的狀態(tài)管理的復(fù)雜性被ASP.NET網(wǎng)絡(luò)表單和網(wǎng)絡(luò)表單控件隱藏起來了。對(duì)開發(fā)人員來說,提供的豐富數(shù)據(jù)綁定效勞使得顯示通過數(shù)據(jù)訪問效勞得到的數(shù)據(jù)變得非常容易。代碼與內(nèi)容的別離使ASP.NET網(wǎng)頁(yè)能動(dòng)態(tài)地編譯到受控類中,用以提高性能。每個(gè)引入的請(qǐng)求都被傳遞到一個(gè)新的網(wǎng)頁(yè)實(shí)例,因此開發(fā)人員不需要關(guān)心代碼中的線程平安性。2.ASP.NET網(wǎng)絡(luò)效勞ASP.NET網(wǎng)絡(luò)效勞體系架構(gòu)為用ASP.NET建立網(wǎng)絡(luò)效勞提供了一高級(jí)可編程模板。雖然建立網(wǎng)絡(luò)效勞并不需要使用網(wǎng)絡(luò)效勞平臺(tái),但是它提供許多的優(yōu)點(diǎn)將簡(jiǎn)化開發(fā)過程,并且它使用的編程模型對(duì)用ASP或VB工作的開發(fā)人員來說是很熟悉的。使用這個(gè)可編程模型,開發(fā)人員不需要理解、SOAP或其它任何網(wǎng)絡(luò)效勞標(biāo)準(zhǔn)。開發(fā)人員用ASP.NET生成一個(gè)擴(kuò)展名為.asmx的文件,并把此文件配制為網(wǎng)絡(luò)應(yīng)用程序的一局部,就建立起了一個(gè)網(wǎng)絡(luò)效勞。ASMX文件或者包含對(duì)在其它地方定義的受控類的引用,或者包含這個(gè)類的定義。這個(gè)類是由ASP.NET提供的WebService類所派生。公有的類方法在標(biāo)記上WebMethod屬性后,就會(huì)成為網(wǎng)絡(luò)效勞方法,把請(qǐng)求發(fā)送到ASMX文件中的URL后,這些方法就會(huì)被調(diào)用。你不必手工為你的網(wǎng)絡(luò)效勞建立一個(gè)契約。當(dāng)被調(diào)用者請(qǐng)求時(shí),ASP.NET檢查類的元數(shù)據(jù),以自動(dòng)生成SCL文件。客戶可通過SOAP,GET和POST提交請(qǐng)求。對(duì)方法和參數(shù)進(jìn)行編碼的約定是:對(duì)GET,將被編碼為查詢字符串;對(duì)POST,將被編碼為表單數(shù)據(jù)。GET和POST的機(jī)制不如SOAP有力,但是它們使得客戶在訪問網(wǎng)絡(luò)效勞時(shí)不必支持SOAP。ASP.NET網(wǎng)絡(luò)效勞模型假定了一個(gè)無狀態(tài)效勞結(jié)構(gòu)。無狀態(tài)結(jié)構(gòu)通常比有狀態(tài)結(jié)構(gòu)更具可擴(kuò)展性。每次收到一個(gè)效勞請(qǐng)求后,就生成一個(gè)新對(duì)象,請(qǐng)求被轉(zhuǎn)化為一個(gè)方法調(diào)用,當(dāng)方法調(diào)用返回時(shí)對(duì)象被銷毀。如果這些效勞需要跨請(qǐng)求維護(hù)狀態(tài),那么它們將使用ASP.NET狀態(tài)管理效勞。基于ASP.NET的網(wǎng)絡(luò)效勞在網(wǎng)絡(luò)應(yīng)用程序模型中運(yùn)行,因此它們得到了該模型的所有平安、配制和其它優(yōu)點(diǎn)。ASP.NET網(wǎng)絡(luò)效勞還提供了一個(gè)為在SCL文件中描述的網(wǎng)絡(luò)效勞生成分類的受控代理工具。代理生成器把SCL文件中描述的消息映射成受控類中的方法。代理對(duì)應(yīng)用程序代碼隱藏了所有的網(wǎng)絡(luò)和引導(dǎo)設(shè)備,因此使用網(wǎng)絡(luò)效勞看起來就象使用其它受控代碼一樣。代理將優(yōu)先使用SOAP鏈接網(wǎng)絡(luò)效勞,但是它同樣支持GET和POST機(jī)制。因此GET和POST同樣也能被使用。網(wǎng)絡(luò)效勞為在Internet上綁定應(yīng)用程序提供了一個(gè)利用現(xiàn)存體系架構(gòu)和應(yīng)用程序的簡(jiǎn)單的、靈活的、基于許多標(biāo)準(zhǔn)的模型。網(wǎng)絡(luò)應(yīng)用程序很容易與當(dāng)?shù)亻_發(fā)的效勞或已存在的效勞集成在一起,而不用考慮開發(fā)平臺(tái)、開發(fā)語言或使用的對(duì)象模型,以用于實(shí)現(xiàn)任何組成的效勞或應(yīng)用程序。7.1.4ASP.NET的開發(fā)語言1.ASP.NET的開發(fā)語言簡(jiǎn)介JScript.NET、C#.NET、VisualC++.NET,甚至Delphi。越來越多的語言也都參加到了Microsoft.NET陣營(yíng)中,使用各種語言開發(fā)的ASP.NET應(yīng)用,在接受用戶訪問的時(shí)候,將首先被轉(zhuǎn)換成在.NET平臺(tái)的CLR,然后對(duì)代碼進(jìn)行執(zhí)行。在這些語言中C#.NET是微軟公司推薦進(jìn)行ASP.NET開發(fā)的語言,C#是一種面向?qū)ο笳Z言,這種語言的語法類似于C和C++語言,又融入了Java語言的優(yōu)點(diǎn),保存了開發(fā)這熟悉的C語言的語法,又解決了C語言平安性難以控制的問題。在本書的所有實(shí)例的開發(fā)中,也將使用C#作為開發(fā)語言,讀者可以在實(shí)際的應(yīng)用過程中舉一反三,使用自己熟悉的語言進(jìn)行ASP.NET的開發(fā)。2.C#.NET簡(jiǎn)介C#語言是微軟公司針對(duì).Net平臺(tái)開發(fā)的一種全新的編程語言。盡管C#象是C,和C++語言的升級(jí)語言,但是他不象他的前身那樣,C#是一個(gè)完全面向?qū)ο蟮拈_發(fā)語言。它既有VisualBasic的快速開發(fā)的特點(diǎn),又具有C++的強(qiáng)大的功能。它的風(fēng)格類似與C、C++和Java。如果你是一個(gè)C、C++或者Java的程序員,你會(huì)發(fā)現(xiàn)你可以很快的使用C#進(jìn)行開發(fā)。和VB.NET一樣,C#可以利用公共語言運(yùn)行時(shí)給我們帶來的各種好處。例如:語言的交互性,垃圾回收機(jī)制,增強(qiáng)的平安性能,以及版本兼容。C#是一種完全面向?qū)ο蟮拈_發(fā)語言,因此在C#中最根本的語法元素就是類。和其他的面向?qū)ο笳Z言一樣,類是一類具共同屬性和操作的對(duì)象的集合。一個(gè)類可以從另一個(gè)類繼承,在C#中,類是不可以繼承多個(gè)類的,但是它可以繼承多個(gè)接口。每一個(gè)類都是由其特有的屬性和方法構(gòu)成的,屬性用來保存這個(gè)類的對(duì)象相關(guān)的數(shù)據(jù),方法就是定義類的對(duì)象能夠執(zhí)行的操作,也就是對(duì)象的功能。和其他的面向?qū)ο笳Z言一樣,C#也提供了繼承,接口等其它面向?qū)ο蟮奶匦浴?.1.5小結(jié)7.2ASP.NET根底在本書接下來的內(nèi)容里,本書將利用實(shí)例詳細(xì)地給讀者介紹怎樣使用ASP.NET來進(jìn)行效勞器端動(dòng)態(tài)主頁(yè)的設(shè)計(jì)。7.2.1.NET的安裝與運(yùn)行環(huán)境1.運(yùn)行環(huán)境配置ASP.NET的調(diào)試環(huán)境操作系統(tǒng):Windows2000Professional,Windows2000Server,Windows2000AdvancedServer瀏覽器:IE5.5支持哪幾種語言ASP.NET目前能支持3種與語言,C#〔讀作"CSharp"〕,VisualBasic,andJscrip。使你的機(jī)器支持ASP.NET,必須滿足以下配置:硬件要求:1、CPU:IntelPentiumII300MHz〔最好IntelPentiumIII600MHz〕2、內(nèi)存:96MB〔最好128MB〕3、磁盤空間:250MB〔完全安裝〕155MB〔快速安裝〕4、顯示:800x600,256colors5、CD-ROM:required軟件要求:1、MicroSoftWindows2000+SP12、MicroSoftInternetExplorer5.53、IIS5.04、其它:MDAC2.6ASP.NET的安裝過程很簡(jiǎn)單,只需按照簡(jiǎn)單提示安裝即可。ASP.NET〔NGWSSDK〕的下載地址:://microsoft/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&displaylang=en安裝VS.NET版本的記得必須先安裝以下內(nèi)容:1、windows2000sp12、安裝IE5.53、必須要裝有iis,而且iiS要帶frontpage擴(kuò)展4、frontpage效勞擴(kuò)展的補(bǔ)丁QFE需要注意的是,如果在安裝IIS之前就已經(jīng)安裝好了VS.NETIDE的話,需要重新安裝MS.NETFramework才能在VS.NETIDE中創(chuàng)立ASP.NET應(yīng)用程序。2.運(yùn)行VisualStudio.NETIDE環(huán)境微軟的VS.NETIDE〔IntegrationDesignEnvironment〕是一個(gè)非常豐富的變成環(huán)境,可以進(jìn)行C#、VC++、VB.NET、ASPX等的編程,你甚至也可以編寫ASP文件。首先看到的是IDE,如圖1所示。VS.NETIDE看起來很熟悉,和低版本的VSIDE類似,它在低版本的VSIDE的根底上又有了新的提高。圖1VisualStudio.NET的IDE整體布局然而,IDE的變化絕非是外表性的。所有的.NET語言都使用同一個(gè)IDE,其中的新工具的功能是強(qiáng)大而全面的,用戶可以把任何一個(gè)設(shè)計(jì)窗口設(shè)定為自動(dòng)隱藏〔就象Windows中的任務(wù)條一樣〕,這樣就可以使桌面顯得不太凌亂,如圖2所示:圖2右上角的“圖釘〞按鈕用來控制窗口自動(dòng)隱藏主工作區(qū)是由一系列的標(biāo)簽和窗口組成,也就是說IDE不會(huì)同時(shí)顯示許多的窗口或代碼模塊,在翻開對(duì)象的源代碼時(shí),IDE就會(huì)在相應(yīng)對(duì)象的主區(qū)內(nèi)增加新按鈕。如圖1所示,WebForm1.aspx就是當(dāng)前翻開的代碼模塊。IDE中還有一個(gè)新的被稱作任務(wù)列表的窗口,其中的內(nèi)容包括你和IDE創(chuàng)立的工程。例如,如果在編譯一個(gè)VB工程時(shí)收到一個(gè)錯(cuò)誤信息,VB就會(huì)在任務(wù)列表中創(chuàng)立一個(gè)條目來解釋這個(gè)問題。如圖1所示,最下方的窗口就是任務(wù)列表窗口。用戶還可以直接在任務(wù)列表中添加一個(gè)條目,或者通過在代碼中建立以"TODO:"開頭的注釋把代碼中的一個(gè)位置與任務(wù)聯(lián)系起來。任務(wù)清單是一個(gè)非常強(qiáng)大的工具,它能使開發(fā)者節(jié)約不少的時(shí)間,并有助于開發(fā)者能夠更好地調(diào)試自己的軟件。過去,VB隱藏了創(chuàng)立一個(gè)窗體所必需的全部工作。我們使用IDE創(chuàng)立一個(gè)窗體,并在Initialize事件處理程序中添加代碼,但對(duì)于發(fā)生在這兩者之間的過程那么無能為力。在VB.NET中,窗體成了一個(gè)類,包含創(chuàng)立窗體的全部代碼,一些高級(jí)開發(fā)人員可以通過這些代碼完成一些很"酷"的工作。代碼編輯器還包括一些新的特性,例如可以自動(dòng)地對(duì)編輯的源代碼進(jìn)行"縮進(jìn)"處理,而且可以顯示源代碼的行號(hào),如圖3所示:圖3VS.NETIDE將原本封閉的代碼開放出來在VS.NET的IDE中,提供了非常多便利的功能,幫助開發(fā)者快速平安的完成開發(fā)工作。想要完整地介紹VS.NETIDE的使用可能需要一本書的篇幅,因此,在這里就不詳細(xì)地介紹了,在本書后面的內(nèi)容里,會(huì)將各種常用的功能分別進(jìn)行介紹。7.2.2名字空間〔namespace〕和ASP.NET的文件類型1.什么是名字空間〔namespace〕?對(duì)象一直是面向?qū)ο蟪绦蜷_發(fā)〔OOP〕的中心。在MicroSoft.NET中也不例外,MicroSoft.NET中的VB、VBA、VC++、VBScript等各種語言都是如此,不同的開發(fā)語言有不同的對(duì)象,這些對(duì)象均是各個(gè)語法所提供的的“資源〞,程序開發(fā)人員可以利用這些資源,來編寫所需的系統(tǒng),就相隔房屋的一樣,建筑師使用同樣的素材,然而蓋好的房子可能不盡相同。在過去的ASP中,僅有Server、Request、Response等七個(gè)對(duì)象。而在ASP.NET的對(duì)象庫(kù)中卻分得很細(xì)。例如在ASP.NET網(wǎng)頁(yè)中要通過SQL語句獲得數(shù)據(jù)庫(kù)中的數(shù)據(jù),必須使用“System.Data.sqlClient〞,這是NameSpace名稱。在System.Data.sqlClient下,又有很多類〔Class〕。每個(gè)Class可視為一個(gè)對(duì)象,因?yàn)镃lass下有屬性、方法和事件等所以,最上層的NameSpace是看作是同類型對(duì)象的集合,一個(gè)NameSpace之下可擁有多個(gè)Class。他們之間的關(guān)系如圖4所示,Namespace實(shí)際是一個(gè)具有緊密聯(lián)系的對(duì)象類型的集合,而Class代表了系統(tǒng)中的一個(gè)對(duì)象類型:ASP.NETNameSpaceASP.NETNameSpaceClass1NameSpaceClass2Class3Class42.如何應(yīng)用名字空間〔NameSpace〕?<%@ImportNamespace="System.Globalization"%>〔在ASPX文件中的書寫格式〕<%@ImportNamespace="DataEmployee"%>或者usingSystem.Data;〔在C#文件中的書寫格式〕usingSystem.Data.OldDb;以上表示在ASP.NET網(wǎng)頁(yè)中使用了四個(gè)NameSpace,接下來我們要申明變量,但此變量必須是已引用的四個(gè)NameSpace所屬的Class,如:OleDbConnectionMyConnection;OleDbDataSetCommandMyCommand;在上面的ASP.NET代碼中OleDbConnection及OleDbDataSetCommand類型都是名字空間之下的Class。3.ASP.NET中的文件類型?在ASP.NET中,相對(duì)于以前的ASP來說,增加了很多種文件類型,如表1所示,表1中的每一種文件擴(kuò)展名就代表ASP.NET的一種文件類型:表1ASP.NET中的文件類型文件擴(kuò)展名用途及說明Global.asaxASP.NET系統(tǒng)環(huán)境設(shè)置文件,進(jìn)行應(yīng)用程序初始化的過程。.aspx內(nèi)含ASP程序代碼的文件,瀏覽器可執(zhí)行此類文件,向效勞器提出瀏覽請(qǐng)求.asmx制作WebService的原始文件.sdl制作WebService的XML格式的文件.vb或.cs在非ASP.NET環(huán)境下,執(zhí)行WebService的文件.aspc可重復(fù)使用在多個(gè).aspx的文件,此文件內(nèi)可含有控件.ascx內(nèi)含UserControl的文件,可內(nèi)含在多個(gè).aspx文件中7.2.3C#語言介紹由于篇幅的原因和C#本身與C++語言類似的特點(diǎn),在本書中將不會(huì)對(duì)C#語言的語法進(jìn)行詳盡的介紹。在本節(jié)的內(nèi)容里,將針對(duì)C#自身特殊的地方進(jìn)行介紹。1.C#程序的根本結(jié)構(gòu)C#語言是從C和C++語言演變而來,是一種簡(jiǎn)單、現(xiàn)代、面向?qū)ο蠛皖愋推桨驳木幊陶Z言。C和C++程序員會(huì)很快熟悉它。C#的目標(biāo)是將Visual

Basic的高效率同C++原有的強(qiáng)大功能結(jié)合起來。在此將通過“HelloWorld〞程序講解C#語言的一些根本結(jié)構(gòu)。usingSystem;classHelloWorld{publicstaticvoidMain〔〕{

Console.WriteLine〔"HelloWorld"〕;

}}一個(gè)C#語言編寫的應(yīng)用程序具備的根本結(jié)構(gòu),即:名字空間、類、程序入口〔靜態(tài)Main方法〕。名字空間在前面已經(jīng)講過,它是同類型類的集合,要使用名字空間中的類,首先應(yīng)該在程序中引用名字空間。在C#中引用名字空間要使用“using〞關(guān)鍵字處理,而聲明自定義名字空間使用“namespace〞關(guān)鍵字處理。本例引用了系統(tǒng)類庫(kù)中“System〞名字空間,并且自定義名字空間名為“Hello〞。“usingSystem;〞類是描述一群具有相似特性〔屬性〕、相同行為〔方法〕與意義,且和其他對(duì)象間有共同關(guān)系的對(duì)象。類,通過實(shí)體化過程后成為對(duì)象,即一個(gè)真正可以用于應(yīng)用的程序。本例類名為“HelloWorld〞。Main方法是程序的入口點(diǎn),程序控制在該方法中開始和結(jié)束。該方法在類的內(nèi)部聲明。作為程序入口點(diǎn),由于該方法需要在類被實(shí)體化前存在,那么它必須為靜態(tài)的〔即采用static修飾〕。其中Main方法使用void修飾說明該方法不返回值。寫Main方法時(shí)既可以不使用參數(shù),也可以使用參數(shù)〔本例為不使用參數(shù)〕。在Main方法中可以創(chuàng)立對(duì)象及調(diào)用其他方法。Main方法是HelloWorld類的成員。它具有static修飾符,因此是Hello類的方法而不是此類的實(shí)例的方法在上面的例如中,還應(yīng)用到了Console類。Console類是.NETFramework專門為開發(fā)控制臺(tái)應(yīng)用程序封裝的一個(gè)類,其中包含了控制臺(tái)應(yīng)用程序所需的獲取標(biāo)準(zhǔn)輸入、輸出和錯(cuò)誤流的操作。同時(shí)對(duì)從控制臺(tái)讀取、寫入字符和字符串的應(yīng)用程序提供根本支持。本例中使用了“WriteLine〞方法,即向控制臺(tái)中寫入字符串“HelloWorld〞。2.C#的類本章已經(jīng)提到,C#是一個(gè)完全的面向?qū)ο蟮木幊陶Z言,因此類可以說是C#程序中最主要的組成局部。和其他編程語言類似C#中的類是具有相同數(shù)據(jù)結(jié)構(gòu)和操作的對(duì)象的集合,它們同樣是一個(gè)對(duì)象的集合。下面的代碼將創(chuàng)立一個(gè)person類。publicclassperson{//在這里面可以增加屬性和方法。}現(xiàn)在給上面的person類增加一個(gè)姓名和年齡的屬性。publicclassperson{privatestring_Name;privateint_Age;publicstringName{get{return_Name;}set{_Name=Value;}}publicintAge{get{return_Age;}set{_Age=Value;}}}接下來給上面的類增加一個(gè)ToString〔〕的方法。publicclassperson{privatestring_Name;privateint_Age;publicperson〔〕{////TODO:Addconstructorlogichere//}publicstringName{get{return_Name;}set{_Name=Value;}}publicintAge{get{return_Age;}set{_Age=Value;}}publicstringToString〔〕{return姓名:+_name+,年齡:+_Age;}}這樣就完成了一個(gè)完整的類的定義,需要注意的是類在定義的時(shí)候需要指定他的訪問權(quán)限,這個(gè)設(shè)定是通過類的修飾符來定義的。在C#中,可以有下面的一種或幾種的組合:new、public、protected、internal、private、abstract和sealed,同樣的修飾不能出現(xiàn)兩次以上〔包括兩次〕。7.2.4小結(jié)本節(jié)著重介紹了ASP.NET技術(shù)的相關(guān)根底知識(shí),包括ASP.NET技術(shù)的調(diào)試平臺(tái)的安裝與配置、名字空間的含義和ASP.NET工程中包含的文件類型。最后,本節(jié)還簡(jiǎn)要介紹了本章中用來進(jìn)行ASP.NET開發(fā)的C#語言的相關(guān)根底知識(shí),包括:C#程序的根本結(jié)構(gòu)和C#程序中的類。7.3ASP.NET網(wǎng)絡(luò)表單〔WebForm〕7.3.1網(wǎng)絡(luò)表單〔WebForm〕介紹1.什么是網(wǎng)絡(luò)表單〔WebForm〕?表單〔Form〕在ASP.NET中具有特殊的含義。和HTML的中的Form標(biāo)記不同,在ASP.NET中WebForm那么代表了一個(gè)一個(gè)的Web頁(yè)面。總的看來,F(xiàn)orm就像是一個(gè)容納各種控件的容器,各種控件都必須直接或者間接的和它有依存關(guān)系。因此,有的開發(fā)者稱其為“Web頁(yè)面〞。WEB表單,實(shí)際上是一個(gè)“對(duì)象〞〔Object〕,具有的其特有的屬性和方法。MS.NET架構(gòu)里面一個(gè)比較重要的概念就是“對(duì)象〞:所有的控件都是對(duì)象,甚至數(shù)據(jù)類型都成了對(duì)象;每種數(shù)據(jù)類型都有自己特有的屬性和方法。WEBFORM文件的后綴名是ASPX。當(dāng)瀏覽器第一次請(qǐng)求一個(gè)ASPX文件時(shí),WEBFORM頁(yè)面將被CLR〔commonlanguageruntime〕編譯器編譯。此后,當(dāng)再有用戶訪問此頁(yè)面的時(shí)候,由于ASPX頁(yè)面已經(jīng)被編譯過,所以,CLR會(huì)直接執(zhí)行編譯過的代碼。這和ASP的情況完全不同。ASP只支持VBScript和JavaScript這樣的解釋性的腳本語言。所以ASP頁(yè)面是解釋執(zhí)行的。當(dāng)用戶發(fā)出請(qǐng)求后,無論是第一次,還是第一千次,ASP的頁(yè)面都將被動(dòng)態(tài)解釋執(zhí)行。而ASP.NET支持可編譯的語言,包括VB.NET、C#、Jscript.NET等。所以,ASP.NET是一次編譯屢次執(zhí)行。為了簡(jiǎn)化程序員的工作,ASPX頁(yè)面不需要手工編譯,而是在頁(yè)面被調(diào)用的時(shí)候,由CLR自行決定是否編譯。一般來說,下面兩種情況下,ASPX會(huì)被重新編譯:1〕ASPX頁(yè)面第一次被瀏覽器請(qǐng)求;2〕ASPX被改寫由于ASPX頁(yè)面的編譯特性,使ASPX頁(yè)面的訪問速度要比PHP和ASP頁(yè)面的訪問速度提高很多。2.一個(gè)簡(jiǎn)單的WebForm在ASP.NET中,ASPX文件是最常用的一種文件,微軟公司建議將所有相關(guān)的文件,哪怕是純HTML文件都以ASPX文件的形式來保存,這樣能夠提高訪問的速度。下面就是用前面學(xué)習(xí)的知識(shí)來創(chuàng)立第一個(gè)WebForm。首先在VS.NET中創(chuàng)立新一個(gè)VisualC#工程,如圖4所示,在模板窗口中選擇ASP.NETWeb應(yīng)用程序,然后在下面的“位置〞欄中填入ASP.NET應(yīng)用在效勞器上的位置,填寫的格式是使用URL的方式,或者使用程序的默認(rèn)值。點(diǎn)擊確定按鈕,完成應(yīng)用的創(chuàng)立工作。圖4VS.NETIDE新建工程窗口接下來翻開解決方案管理器,創(chuàng)立eg1.aspx文件,雙擊該文件,在主工作區(qū)就會(huì)顯示該頁(yè)的布局和代碼,通過點(diǎn)擊主工作區(qū)下放的HTML按鈕,就能夠看到eg1.aspx的代碼,把下面的代碼拷貝到eg1.aspx文件中,然后從瀏覽器訪問這個(gè)文件:例1:<!--源文件:eg1.aspx--><formaction="eg1.aspx"method="post"><h3>姓名:<inputid="name"type=text>性別:<selectid="sex"size=1><option>男</option><option>女</option><option>保密</option></select><inputtype=submitvalue="查詢"></form>然后就可以在瀏覽器中觀察eg1.aspx了,如圖5所示,地址的格式如下:://yourhost/yourapp/eg1.aspx圖5例1的執(zhí)行結(jié)果其中yourhost是當(dāng)前應(yīng)用所在的效勞器名,yourapp是文件所在應(yīng)用的名稱。由于我們沒有對(duì)表單提交做任何響應(yīng),所以,當(dāng)按下“查詢〞按鈕后,頁(yè)面的內(nèi)容沒有什么改變。3.ASP.NET中Web頁(yè)的處理過程這一節(jié)我們將深入到內(nèi)部,看看頁(yè)面是怎樣被處理的。和所有的效勞器端進(jìn)程一樣,當(dāng)ASPX頁(yè)面被客戶端請(qǐng)求時(shí),頁(yè)面的效勞器端代碼被執(zhí)行,執(zhí)行結(jié)果被送回到瀏覽器端。這一點(diǎn)和ASP并沒有太大的不同。但是,的架構(gòu)為我們做了許多別的事情。比方,它會(huì)自動(dòng)處理瀏覽器的表單提交,把各個(gè)表單域的輸入值變成對(duì)象的屬性,使得我們可以像訪問對(duì)象屬性那樣來訪問客戶的輸入。它還把客戶的點(diǎn)擊映射到不同的效勞器端事件。了解WEB頁(yè)面的處理過程很重要。這樣你可以仔細(xì)地優(yōu)化你的代碼,提高代碼的效率。每一次頁(yè)面被請(qǐng)求,或者頁(yè)面事件被提交到效勞器,運(yùn)行環(huán)境將執(zhí)行必要的代碼,重建整個(gè)頁(yè)面,把結(jié)果頁(yè)面送到瀏覽器,然后拋棄頁(yè)面的變量、控件的狀態(tài)和屬性等等頁(yè)面信息。當(dāng)下一次頁(yè)面被處理時(shí),運(yùn)行環(huán)境是不知道它的上一次執(zhí)行情況的。在這個(gè)意義上,ASPX頁(yè)面是沒有狀態(tài)的。這也是協(xié)議的特點(diǎn)〔為了加速頁(yè)面的訪問,在頁(yè)面里面可以使用緩存機(jī)制,也就是保存頁(yè)面的執(zhí)行結(jié)果,下一次頁(yè)面被請(qǐng)求時(shí),直接送回上一次的執(zhí)行結(jié)果。〕。在ASP中,當(dāng)頁(yè)面被提交到效勞器端時(shí),只有那些用戶輸入的值被傳遞到效勞器。其他的比方組件的屬性、變量的值,是不會(huì)傳遞的。所以效勞器無法了解組件的進(jìn)一步的信息。在中,頁(yè)面對(duì)象的屬性、頁(yè)面控件的屬性被稱為“viewstate〞〔頁(yè)面狀態(tài)〕。頁(yè)面狀態(tài)在中被受到特別照顧。在實(shí)現(xiàn)上,通過把頁(yè)面的狀態(tài)封裝到一個(gè)隱藏的輸入域,從而可以在不同的頁(yè)面之間實(shí)現(xiàn)傳遞頁(yè)面的狀態(tài)。在頁(yè)面處理的內(nèi)部過程是按照如圖6所示的順序進(jìn)行的:圖6頁(yè)面處理的內(nèi)部過程的順序首先,頁(yè)面的狀態(tài)被恢復(fù),然后觸發(fā)Page_Load事件。在這個(gè)過程中,你可以讀取或者重置頁(yè)面的屬性和控件的屬性,根據(jù)IsPostBack屬性判定頁(yè)面是否為第一次被請(qǐng)求,執(zhí)行數(shù)據(jù)綁定,或者進(jìn)行數(shù)據(jù)庫(kù)連接等操作。第二個(gè)階段是事件處理,也就是處理訪問者在本頁(yè)訪問時(shí)所激發(fā)的各種事件。用戶可以處理特定的事件,也可以在表單需要校驗(yàn)的情況下,根據(jù)IsValid屬性判定頁(yè)面的輸入是否有效。第三個(gè)階段Page_unLoad是在訪問者離開本頁(yè)的時(shí)候開始的,在這個(gè)階段通常進(jìn)行一些清理工作,比方關(guān)閉翻開的文件和數(shù)據(jù)庫(kù)鏈路,或者釋放對(duì)象等。上面我們分析了頁(yè)面處理最重要的幾個(gè)階段。但是實(shí)際上,頁(yè)面的處理過程遠(yuǎn)比上面的復(fù)雜,因?yàn)樵趯?shí)際應(yīng)用中,頁(yè)面上的每一個(gè)控件都需要進(jìn)行適當(dāng)?shù)某跏蓟?.3.2什么是事件?在中,事件是一個(gè)非常重要的概念。所謂事件就是指一個(gè)應(yīng)用程序上的任何組成元素的狀態(tài)因?yàn)橥獠炕蛘邇?nèi)部的原因造成的狀態(tài)的一次改變,開發(fā)者能夠?qū)⒁欢ǖ姆椒ê褪录B接起來,一旦事件發(fā)生,程序就會(huì)執(zhí)行相應(yīng)的方法,作為對(duì)事件的響應(yīng)來處理控件的變化。在ASP.NET中,事件就是頁(yè)面上的控件因?yàn)樵L問者或者自身的原因,其狀態(tài)發(fā)生改變的情況。ASP.NET提供了非常便利的機(jī)制幫助開發(fā)者完成對(duì)事件的處理。下面的例子將說明事件在WebForm中的應(yīng)用。1.事件的處理在一個(gè)WebForm中,可以包含一個(gè)或者多個(gè)Web元素或者控件,每一個(gè)Web元素或者控件都有假設(shè)干可以進(jìn)行處理的消息。在下面的例如中,頁(yè)面包含三個(gè)Web控件,一個(gè)Label控件,兩個(gè)Button控件,用戶可以點(diǎn)擊兩個(gè)Button中的任意一個(gè),點(diǎn)擊的事件將被程序處理,在Label控件上顯示相應(yīng)的信息。例如是由兩個(gè)文件組成,其中“eg2.aspx〞文件是ASP.NET的頁(yè)面文件,“eg2.aspx.cs〞文件是處理eg2.aspx頁(yè)面的相應(yīng)事件的代碼文件。例2:<!--源文件:eg2.aspx--><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><title>WebForm1</title><metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1"><metaname="CODE_LANGUAGE"Content="C#"><metaname="vs_defaultClientScript"content="JavaScript"><metaname="vs_targetSchema"content="://schemas.microsoft/intellisense/ie5"></HEAD><bodyMS_POSITIONING="GridLayout"bgColor="#00ccff"><formid="Form1"method="post"runat="server"><FONTface="宋體"><asp:Labelid="Label1"style="Z-INDEX:101;LEFT:16px;POSITION:absolute;TOP:16px"runat="server"Width="226px"Height="42px"BackColor="Silver"BorderColor="Black"BorderStyle="Double"BorderWidth="1px"ForeColor="Red"><divalign="center">請(qǐng)點(diǎn)擊按鈕</div></asp:Label><asp:Buttonid="Button1"style="Z-INDEX:102;LEFT:264px;POSITION:absolute;TOP:24px"runat="server"Width="88px"Height="32px"Text="按鈕一"></asp:Button><asp:Buttonid="Button2"style="Z-INDEX:103;LEFT:368px;POSITION:absolute;TOP:24px"runat="server"Width="88px"Height="32px"Text="按鈕二"></asp:Button></FONT></form></body></HTML>可以看到在eg2.aspx中,添加了三個(gè)Web控件,分別是asp:Label:Label1、asp:Button:Button1和asp:Button:Button2。在eg2.aspx的第一行代碼中,PageLanguage一項(xiàng)設(shè)定了本頁(yè)的效勞器端代碼使用的是C#,Codebehind中設(shè)定了本頁(yè)的效勞器端代碼保存在中。頁(yè)面初始顯示如圖7所示:圖7eg2.aspx初始顯示/*源文件:eg2.aspx.cs*/usingSystem;usingSystem.Collections;usingSystemponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;I;namespaceCStest{{privatevoidButton1_Click〔objectsender,System.EventArgse〕{按鈕一被點(diǎn)擊了</div>";}privatevoidButton2_Click〔objectsender,System.EventArgse〕{}}}名字空間下的Page類。然后在WebForm1添加了兩個(gè)消息處理函數(shù)非別為Button1_Click和Button2_Click,這兩個(gè)函數(shù)分別響應(yīng)“按鈕一〞和“按鈕二〞的點(diǎn)擊事件。在這兩個(gè)函數(shù)體中,首先改變了Label1控件的ForeColor屬性,也就是改變Label1控件的前景色,這樣顯示出來的字體就會(huì)改變成新設(shè)定的顏色,然后改變Label1控件中顯示的文字,來區(qū)分兩個(gè)按鈕的點(diǎn)擊事件。點(diǎn)擊“按鈕一〞和“按鈕二〞后頁(yè)面情況如圖8和圖9所示:圖8點(diǎn)擊“按鈕一〞后的頁(yè)面顯示圖9點(diǎn)擊“按鈕二〞后的頁(yè)面顯示7.3.3WebForm中的控件1.什么是控件?在前面的例子里,在一個(gè)WebForm中添加了按鈕控件和Label控件,并且給控件添加事件處理函數(shù)來處理訪問者對(duì)控件的操作,那么控件的具體定義是什么呢?在ASP.NET中,一切都是對(duì)象,控件也是WebFrom中能夠容納的對(duì)象的一種,也就是說控件是具有可重用性、具有一定的外觀、具有一定的屬性和方法,能夠完成一定的功能,并且能夠被用戶在WebForm中引用的對(duì)象或者組件,大多數(shù)控件還可以響應(yīng)事件。在eg1.aspx簡(jiǎn)短的代碼中,就是用到五個(gè)控件,它們分別是asp:textbox、asp:dropdownlist、asp:label、Button和Form控件,如圖10所示:圖10Eg1.aspx中使用的控件從eg1.aspx的代碼中可以看到,一個(gè)WebForm最主要的組成局部就是控件,微軟公司為了方便開發(fā)者使用,將控件分為三類,每一類控件都有其自身的特點(diǎn)。2.控件的分類在ASP.NET中的控件主要分為三類:效勞器端控件〔ServerControl〕、HTML控件〔HTMLControl〕和用戶自定義控件〔UserControl〕。效勞器端控件〔ServerControl〕就是指在效勞端存在和運(yùn)行的控件。效勞器端控件也有自己的外觀,在客戶端瀏覽器中,ServerControl的外觀由HTML代碼來表現(xiàn)。ServerControl會(huì)在初始化時(shí),根據(jù)客戶的瀏覽器版本,自動(dòng)生成適合瀏覽器的HTML代碼。以前做網(wǎng)頁(yè)或者做ASP程序時(shí)候,必須考慮到瀏覽器的不同版本對(duì)HTML的支持有所不同,比方Netscape和IE對(duì)DHTML的支持就有所不同。當(dāng)時(shí),解決瀏覽器版本兼容問題的最有效方法,就是在不同版本的瀏覽器中作測(cè)試。現(xiàn)在,由于ServerControl自動(dòng)適應(yīng)不同的瀏覽器版本,也就是自動(dòng)兼容不同版本的瀏覽器,程序員的工作量減輕了許多。常用的效勞器端控件主要有如下幾種:文本輸入控件〔ASP:textbox〕、按鈕控件〔ASP:Button〕、復(fù)選控件〔ASP:CheckBox〕、單項(xiàng)選擇控件〔ASP:RadioButton〕、驗(yàn)證控件、選擇控件和列表控件等。HTML控件比較常見,也就是通常用來制作網(wǎng)頁(yè)的HTML語言中的TAG,但是和以往的HTML不同的是,HTML控件在效勞器端是可見的,也就是可以通過效勞器端運(yùn)行的程序來改變HTML控件的屬性或者處理HTML控件的事件。ASP.NET中提供了增加內(nèi)嵌效勞器控件的功能,使開發(fā)者能夠?qū)掖蔚妮p松增加你所定義的各種控件。事實(shí)上,對(duì)于表單等各種控件,可以不用更改或者稍微更改一下就可以屢次使用的。在通常情況下,把一個(gè)用作效勞器控件的web表單統(tǒng)稱為用戶控件,用一個(gè).ascx為后綴的文件保存起來,這樣的保存使得它不被當(dāng)作一個(gè)web表單來運(yùn)行,當(dāng)開發(fā)者在一個(gè).aspx文件中使用它時(shí),使用Register方法來進(jìn)行調(diào)用。假設(shè)有一個(gè)文件名為saidy.ascx的文件,那么用下面的語句來調(diào)用它:<%@RegisterTagPrefix="Acme"TagName="Message"Src="saidy.ascx"%>上面的TagPrefix標(biāo)記為用戶控件確定一個(gè)唯一的名字空間,TagName為用戶控件確定一個(gè)唯一的名稱,也可以用其它的名字代替“Message〞,Src為確定所包含的文件名稱和路徑。在WebFrom中就可以用下面的語句來調(diào)用這個(gè)自定義控件了:<Acme:Messagerunat="server"/>接下來將通過幾個(gè)例如來分別說明這三類控件的使用方法。3.效勞器端控件〔ServerControl〕的使用在下面的例子eg4.aspx里,將通過一個(gè)電子郵件和密碼的頁(yè)面的構(gòu)建給讀者介紹效勞器端文本輸入控件和驗(yàn)證控件的使用。文本輸入控件目的是讓用戶輸入文本,文本模式是一個(gè)單行的輸入框,但是用戶可以根據(jù)自己的需要把它改成密碼輸入模式或者多行輸入模式。在下面的例子中用單行文本輸入模式和密碼模式來說明。在ASP.NET中,輸入一個(gè)文本,可用下面的語句來表示:<!--輸入郵件地址--><asp:TextBoxid=emailwidth=200pxmaxlength=60runat=server/>第一句為注釋,第二句就是文本輸入控件的引用,開發(fā)者可以設(shè)定輸入框的寬度和文本的長(zhǎng)度,runat=server為表示運(yùn)行于效勞器端。下面來看看輸入控件的校驗(yàn),在這里使用校驗(yàn)控件來完成。使用校驗(yàn)控件,一個(gè)簡(jiǎn)單的語句就可以實(shí)現(xiàn)在普通的html頁(yè)面上的復(fù)雜的JavaScript、VBScript或者其他代碼的驗(yàn)證。首先用戶必須輸入郵件地址:<!--驗(yàn)證郵件的有效性!->不能為空--><asp:RequiredFieldValidatorid="emailReqVal"ControlToValidate="email"ErrorMessage="Email."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat=server>*</asp:RequiredFieldValidator>ControlToValidate="email"屬性為針對(duì)TextBoxid=email的文本框,Display屬性我們定義為“Dynamic〞,即為當(dāng)鼠標(biāo)光標(biāo)所在位置發(fā)生變化時(shí)屬性根據(jù)條件變化。如果輸入為空,那么打印出“*〞字符出來。在通常情況下,郵件地址總會(huì)包含一些特定的字符,在驗(yàn)證的時(shí)候,就可以要求用戶輸入的內(nèi)容中包含我們規(guī)定的字符。<!--驗(yàn)證郵件的有效性!->必須包含有效字符--><asp:RegularExpressionValidatorid="emailRegexVal"ControlToValidate="email"Display="Static"ValidationExpression="^[\w-]+@[\w-]+\.〔com|net|org|edu|mil〕$"Font-Name="Arial"Font-Size="11"runat=server>不是有效郵件地址</asp:RegularExpressionValidator>ControlToValidate="email"語句的作用和扇面介紹的一樣,ValidationExpression="^[\w-]+@[\w-]+\.〔com|net|org|edu|mil〕$"表示在輸入的郵件地址里要包含的內(nèi)容,如果沒有包含這些內(nèi)容,那么打印出“不是有效郵件地址“這個(gè)提示。對(duì)密碼的校驗(yàn)也是同樣的道理,二者主要的差異是,對(duì)于密碼通常要求要確認(rèn)輸入一次,校驗(yàn)兩次輸入的密碼是否相同。用下面的代碼來完成校驗(yàn):<!--輸入確認(rèn)密碼->兩個(gè)密碼是否相等--><asp:CompareValidatorid="CompareValidator1"ControlToValidate="passwd2"ControlToCompare="passwd"Display="Static"Font-Name="Arial"Font-Size="11"runat=server>密碼不相等</asp:CompareValidator>ControlToValidate="passwd2"ControlToCompare="passwd"此語句即為兩個(gè)密碼之間的比較,如果不相等那么打印出“密碼不相等“的提示。下面是例三完整的源代碼:例三:<!--源文件eg3.aspx--><html><body><br><br><br><divalign="center"><h3><fontface="Verdana">電子郵件和密碼驗(yàn)證頁(yè)</font></h3></div><divalign="center"><formmethod="post"runat="server"ID="Form1"><hrwidth="600"size="1"noshade><br><br><!--標(biāo)題--><asp:ValidationSummaryID="valSum"runat="server"HeaderText="按照下面的要求填寫:"DisplayMode="SingleParagraph"Font-Name="verdana"Font-Size="12"/><p/><tableborder="0"width="600"><tr><tdalign="right"><fontface="Arial"size="2">電子郵件:</font></td><td><!--輸入郵件地址--><asp:TextBoxid="email"width="200px"maxlength="60"runat="server"/></td><td><!--驗(yàn)證郵件的有效性!->不能為空--><asp:RequiredFieldValidatorid="emailReqVal"ControlToValidate="email"ErrorMessage="Email."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat="server">*</asp:RequiredFieldValidator><!--驗(yàn)證郵件的有效性!->必須包含有效字符--><asp:RegularExpressionValidatorid="emailRegexVal"ControlToValidate="email"Display="Static"ValidationExpression="^[\w-]+@[\w-]+\.〔com|net|org|edu|mil〕$"Font-Name="Arial"Font-Size="11"runat="server">不是有效郵件地址</asp:RegularExpressionValidator></td></tr><tr><tdalign="right"><fontface="Arial"size="2">密碼:</font></td><td><!--輸入密碼--><asp:TextBoxid="passwd"TextMode="Password"maxlength="20"runat="server"/></td><td><!--輸入密碼->密碼不能為空--><asp:RequiredFieldValidatorid="passwdReqVal"ControlToValidate="passwd"ErrorMessage="Password."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat="server">*</asp:RequiredFieldValidator><!--輸入密碼->包含其中有效字符--><asp:RegularExpressionValidatorid="passwdRegexBal"ControlToValidate="passwd"ValidationExpression=".*[!@#$%^&*+;:].*"Display="Static"Font-Name="Arial"Font-Size="11"Width="100%"runat="server">密碼必須包含〔!@#$%^&*+;:〕</asp:RegularExpressionValidator></td></tr><tr><tdalign="right"><fontface="Arial"size="2">再次輸入密碼:</font></td><td><!--輸入確認(rèn)密碼->--><asp:TextBoxid="passwd2"TextMode="Password"maxlength="20"runat="server"/></td><td><!--輸入確認(rèn)密碼->不能為空--><asp:RequiredFieldValidatorid="passwd2ReqVal"ControlToValidate="passwd2"ErrorMessage="Re-enterPassword."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat="server">*</asp:RequiredFieldValidator><!--輸入確認(rèn)密碼->兩個(gè)密碼是否相等--><asp:CompareValidatorid="CompareValidator1"ControlToValidate="passwd2"ControlToCompare="passwd"Display="Static"Font-Name="Arial"Font-Size="11"runat="server">密碼不相等</asp:CompareValidator></td></tr></table><p/><inputrunat="server"type="submit"value="提交"ID="Submit1"NAME="Submit1"><p/><hrwidth="600"size="1"noshade></form></div></body></html>eg3.aspx的執(zhí)行結(jié)果如圖11所示:圖11頁(yè)面eg3.aspx的執(zhí)行結(jié)果在eg3.aspx的文本輸入控件中進(jìn)行輸入,如果輸入的內(nèi)容與所需要填寫的內(nèi)容不符,比方兩個(gè)密碼不同或者填寫了無效的電子郵件地址,那么將得到如圖12所示的結(jié)果。圖12頁(yè)面eg3.aspx中進(jìn)行不正確輸入的結(jié)果在例三中,使用到了文本輸入控件和三種校驗(yàn)控件,根本上所有效勞器端控件的使用都和上面用到的控件的使用方法相同,就是將控件放置在WebForm中適宜的位置上,然后給控件的屬性設(shè)置適當(dāng)?shù)闹担瑏砜刂瓶丶瓿伤枰墓δ堋=酉聛砜匆幌翲TML控件的使用。4.HTML控件的使用HTML控件的使用和效勞器端控件的使用非常類似,但是其功能相對(duì)效勞器端控件來說較弱,在應(yīng)用中通常是通過事件響應(yīng)函數(shù)對(duì)HTML控件的狀態(tài)變化進(jìn)行處理。例四〔eg4.aspx〕就是典型的HTML控件的使用,其中引用的HTML控件為HTMLTextArea控件。和HTML中的一樣,在ASP.NET中的TextArea也是一個(gè)多行輸入框。TextArea的寬度由它的Cols屬性決定,長(zhǎng)度由Rows屬性決定。TextArea控件的定義如下:<textareaid="TextArea1"cols=40rows=4runat=server/>例4:首先是eg4.aspx文件的源代碼:<!--源文件eg4.aspx--><HTML><HEAD><title>eg4</title></HEAD><bodybgcolor="#ccccff"><h3><fontface="Verdana">HTML控件:HtmlTextArea的使用</font></h3><formrunat="server"ID="Form1"><fontface="Verdana"size="-1">請(qǐng)任意填寫:<br><textareaid="TextArea1"cols="40"rows="4"runat="server"></textarea><inputtype="submit"value="Submit"runat="server"ID="Submit1"><p/><spanid="Span1"runat="server"/></font></form></body></HTML>usingSystem;usingSystem.Collections;usingSystemponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;namespaceCStest{{privatevoidSubmit1_ServerClick〔objectsender,System.EventArgse〕{}}}在Submit1按鈕的消息響應(yīng)程序中,程序取到了TextArea控件中用戶填寫的文字,然后將這些文字賦值給Span1控件的InnerHtml屬性,Span1控件就會(huì)將InnerHtml屬性中的值顯示在頁(yè)面上。在上面的例子中,HTML控件看起來和HTML語言是一樣的,但是html語言書寫和以效勞器端控件的實(shí)現(xiàn)在思維方式上已經(jīng)有了很大的不同。對(duì)于html語言而言,只是一種標(biāo)識(shí);而對(duì)效勞器端html控件而言,卻已演變成為一段程序,一個(gè)對(duì)象。兩者的區(qū)別不僅僅是一個(gè)寫在HTML文件中、一個(gè)寫在ASP.NET文件中。HTML文件依賴于客戶端對(duì)標(biāo)識(shí)的解釋執(zhí)行,HTML控件卻可以被編譯執(zhí)行,兩者在效率上的差異不言而喻。為了提高開發(fā)者所開發(fā)的程序的重用性,ASP.NET還提供了用戶定義控件。接下來就看一看用戶定義控件的使用。5.用戶自定義控件的使用例5:<!--源代碼eg5.ascx--><divalign=center>用戶控件例如<br><ahref="eg1.aspx">例如一</a><br><ahref="eg2.aspx">例如二</a><br><ahref="eg3.aspx">例如三</a><br><ahref="eg4.aspx">例如四</a><br><ahref="eg5.aspx">例如五</a></div>控件外觀如圖13所示:圖13用戶自定義控件eg5.ascx的外觀<%@RegisterTagPrefix="eg5"TagName="linkto"Src="eg5.ascx"%>注冊(cè)完之后,就可以使用下面的代碼在頁(yè)面中進(jìn)行對(duì)用戶自定義控件的引用:<eg5:linktorunat="server"/>eg5.aspx文件的完整源代碼如下:<!--源文件eg5.aspx--><%@RegisterTagPrefix="eg5"TagName="linkto"Src="eg5.ascx"%><!--注冊(cè)小頁(yè)面控件--><HTML><body><BR><BR><BR><divalign="center">用戶自定義控件調(diào)用結(jié)果<BR><BR><eg5:linktorunat="server"ID="link1"/></div><BR><BR></b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論