




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章 Web應(yīng)用程序開發(fā)本章要點(diǎn):什么是Web應(yīng)用程序Web應(yīng)用程序的特點(diǎn)ASP.NET效勞器端控件在Web應(yīng)用程序中訪問(wèn)數(shù)據(jù)庫(kù)8.1Web版的“你好,VisualBasic.NET!〞8.1.1 第一個(gè)Web應(yīng)用程序進(jìn)入開發(fā)環(huán)境后,建立一個(gè)新工程Case8_1,但是這一次與以前不同,要選擇建立的是一個(gè)“ASP.NETWeb應(yīng)用程序〞,如圖8.1所示。應(yīng)用程序建立以后,將會(huì)看到VisualBasic.NET自動(dòng)生成了一個(gè)叫做WebForm1的窗體,這是一個(gè)WebForms窗體,與以前的WindowsForms窗體有許多相似之處,但是由于其運(yùn)行在Web上的特點(diǎn),兩者并不完全相同。最顯著的一點(diǎn)就是它沒(méi)有明顯的邊界,這一點(diǎn)很好理解:可以回想一下,平時(shí)上網(wǎng)看到的網(wǎng)頁(yè)也沒(méi)有如Windows窗體那般明顯的邊界。另外一個(gè)不同點(diǎn)就是在WebForms窗體上只能夠放置Web窗體控件。事實(shí)上,如果看看工具箱,就會(huì)發(fā)現(xiàn)工具箱中顯示的是如圖8.2所示的Web窗體控件頁(yè),而沒(méi)有Windows窗體控件頁(yè)。8.1.2 在瀏覽器中執(zhí)行Web應(yīng)用程序8.1.3 Web應(yīng)用程序如何運(yùn)行由于這是本書的第一個(gè)Web應(yīng)用程序,在這里有必要首先解釋一下Web應(yīng)用程序本身“是什么〞。Web應(yīng)用程序可以看做是一個(gè)或幾個(gè)協(xié)同工作的Web頁(yè)面,如果是幾個(gè)頁(yè)面,它們之間往往會(huì)互相傳遞信息,根據(jù)用戶的輸入做出相應(yīng)的反響。Case8_1雖然只有一個(gè)頁(yè)面,但是也可以看成是這個(gè)頁(yè)面與它自身傳遞信息以做出適當(dāng)?shù)姆错?。事?shí)上,在運(yùn)行這個(gè)程序期間,計(jì)算機(jī)“偷偷地〞做了很多事情:〔1〕按F5鍵,相當(dāng)于在瀏覽器中輸入“://localhost/Case8_1/WebForm1.aspx〞;〔2〕效勞器接受請(qǐng)求,運(yùn)行WebForm1.aspx中的程序,把結(jié)果返回到瀏覽器;〔3〕用戶單擊“SayHello〞按鈕,瀏覽器把請(qǐng)求發(fā)回到效勞器;〔4〕效勞器接受請(qǐng)求,再次運(yùn)行WebForm1.aspx中的程序,把結(jié)果返回到瀏覽器。可以看到,就是這么一個(gè)簡(jiǎn)單的程序,卻包含了瀏覽器與效勞器之間的兩次信息來(lái)回,這也正是Web應(yīng)用程序的特點(diǎn):幾乎每一個(gè)動(dòng)作都會(huì)引起瀏覽器與效勞器的通訊,所以比起本地的應(yīng)用程序來(lái),效率比較低。理解了Web應(yīng)用程序,可能不會(huì)對(duì)程序本身有什么疑問(wèn),因?yàn)樗cWindows應(yīng)用程序太相像了:都是把控件放到窗體上,都是編寫事件代碼,運(yùn)行起來(lái)也幾乎沒(méi)什么區(qū)別。但是,應(yīng)該意識(shí)到,這些外表上的相似性都是WebForms的功績(jī),是它使我們能夠以如此一致的方式創(chuàng)立這兩種完全不同的應(yīng)用程序。在下一個(gè)案例中,會(huì)對(duì)這一切作深入地探討。8.2ASP.NETASP是近些年來(lái)Windows平臺(tái)上使用最廣泛的效勞器端頁(yè)面語(yǔ)言之一。確實(shí),即使你從沒(méi)有做過(guò)Web編程,那也接觸過(guò)它——在常去的網(wǎng)站中,就有很多頁(yè)面帶有“asp〞這個(gè)擴(kuò)展名的。ASP的頁(yè)面嵌入式語(yǔ)言特性,以及它與ActiveX的完美結(jié)合都給程序員帶來(lái)了很大的方便。如果你是一個(gè)ASP程序員,或者對(duì)ASP有所了解的話,那么理解ASP.NET〔原來(lái)叫ASP+〕最快的方法是一句話:“ASP.NET是下一代的ASP,并且是建立在.NET框架上的ASP。〞但是,僅僅這么一句話還是失之偏頗了,因?yàn)锳SP.NET并不是簡(jiǎn)單的對(duì)原有的ASP的補(bǔ)充和增強(qiáng),也不是僅僅加上了一些.NET,而是真正從底層重新創(chuàng)立了的ASP。從外表特征來(lái)看,ASP.NET與ASP相比至少有兩大優(yōu)點(diǎn)?!?〕執(zhí)行速度更快傳統(tǒng)的ASP是純解釋型的,也就是說(shuō)每一次執(zhí)行時(shí),都要先“閱讀〞ASP源代碼,然后“翻譯〞成可執(zhí)行碼,最后才執(zhí)行。而ASP.NET是編譯執(zhí)行的,在第一次執(zhí)行的時(shí)候,“閱讀〞和“翻譯〞的過(guò)程還要進(jìn)行,但是“翻譯〞的結(jié)果被保存下來(lái),在以后就直接執(zhí)行了,除非源代碼做了改變。〔2〕代碼更簡(jiǎn)潔原本400行的ASP代碼完成的功能往往只用20行的ASP.NET代碼就可以完成。以上談到的是一些理論,事實(shí)上,上一個(gè)案例中已經(jīng)用到了ASP.NET。WebForms就是ASP.NET的組成局部。為了讓你有一個(gè)深刻的了解,在這個(gè)案例中將重寫Web版本的“你好,VisualBasic.NET〞。這一次我們不用集成開發(fā)環(huán)境,而是用編寫ASP的傳統(tǒng)方式——使用記事本〔或者其他文本編輯器〕來(lái)完成。8.2.1手工編寫一個(gè)Web應(yīng)用程序<html><scriptlanguage="VB"runat="server">SubbtnHello_Click(SrcAsObject,eAsEventArgs)txtHello.Text="你好,VisualBasic.NET!"EndSub</script><body><formrunat="server"><asp:textboxid="txtHello"runat="server"/><p><asp:buttontext="SayHello"Onclick="btnHello_Click"runat="server"/></form></body></html>8.2.2 手工運(yùn)行Web應(yīng)用程序在上個(gè)案例中曾經(jīng)講過(guò)在瀏覽器中輸入“://localhost/Case8_1/WebForm1.aspx〞可以訪問(wèn)Case8_1的運(yùn)行結(jié)果,這里localhost實(shí)際上就是默認(rèn)網(wǎng)站,它運(yùn)行在本地機(jī)上。IP協(xié)議規(guī)定IP地址指的就是本機(jī),所以如果要運(yùn)行這個(gè)案例,可以在瀏覽器中輸入“:///Case8_2/Case8_2.aspx〞,當(dāng)然輸入“://localhost/Case8_2/Case8_2.aspx〞同樣可以運(yùn)行,二者是等價(jià)的。8.2.3 點(diǎn)評(píng):ASP.NET下面來(lái)看看代碼,這段代碼也許從后面看起來(lái)更好一些,我們先看這一段:<formrunat="server"><asp:textboxid="txtHello"runat="server"/><p><asp:buttontext="SayHello"Onclick="btnHello_Click"runat="server"/></form>你可能會(huì)注意到兩個(gè)顯眼的“asp:〞標(biāo)示,這是ASP前綴,用來(lái)說(shuō)明一個(gè)ASP.NET控件〔也就是WebForms控件〕。這里的兩個(gè)控件〔TextBox和Button〕在上個(gè)案例中已經(jīng)介紹過(guò)了,事實(shí)上集成開發(fā)環(huán)境的工作就是自動(dòng)加上這兩句話。在后面有“runat=server〞的字樣,這說(shuō)明它們都是效勞器端的控件。簡(jiǎn)單地說(shuō),這些控件是運(yùn)行在效勞器端的,而且?guī)椭蛻襞c效勞器進(jìn)行交互。在Button控件中有這樣一句:OnClick="btnHello_Click",這是在聲明事件處理程序,那么事件處理程序在哪里呢?就在頁(yè)面的開頭局部:<scriptlanguage="VB"runat="server">SubbtnHello_Click(SrcAsObject,eAsEventArgs)txtHello.Text="你好,VisualBasic.NET!"EndSub</script>頁(yè)面上的所有函數(shù)、過(guò)程都必須定義在<script>塊中,這與傳統(tǒng)ASP差不多。如果僅僅看這個(gè)過(guò)程本身,根本無(wú)法分辨出這是一個(gè)Windows應(yīng)用程序中的事件處理程序還是Web應(yīng)用程序中的事件處理程序。前面已經(jīng)介紹過(guò),在WebForms的幫助下〔現(xiàn)在可以說(shuō)是在ASP.NET的幫助下〕,這兩者到達(dá)了高度的統(tǒng)一。8.3Web窗體控件8.3.1建立Web日歷程序建立一個(gè)ASP.NETWeb應(yīng)用程序Case8_3。把一個(gè)Calendar控件從“Web窗體〞工具頁(yè)拖曳到Web窗體上,命名為cldDate,注意現(xiàn)在要更改的是(ID)〕而不是(name)。Calendar控件的默認(rèn)樣式非常單調(diào),但是,在它的“屬性〞頁(yè)中可以看到很多可以更改的屬性。8.3.2 運(yùn)行Web日歷程序8.3.3驗(yàn)證控件首先,可以看到,對(duì)ListBox的操作與WindowsForms的ListBox根本相同,這里不再贅述。這里最重要的內(nèi)容是關(guān)于Validator〔驗(yàn)證〕,它們是用來(lái)驗(yàn)證用戶輸入的有效性的,ASP.NET一共提供了5種Validator,分別是ReqiredFieldValidator〔驗(yàn)證某個(gè)輸入是否為空〕,CompareValidator〔將某個(gè)輸入與既定的值相比較〕,RangeValidator〔看某個(gè)輸入是否在既定的范圍內(nèi)〕,RegularExpressionValidator〔看某個(gè)輸入是否滿足給定的正那么表達(dá)式〕,以及CustomValidator〔用戶自定義的驗(yàn)證〕。有了這5種工具,就可以很方便地驗(yàn)證用戶輸入了。在程序中用到了其中兩種,其他的3種在用法上大致相同,都使用ControlToValidate屬性來(lái)設(shè)置要驗(yàn)證的控件,而用其他的屬性〔如RangeValidator的Minimum和Maximum〕來(lái)設(shè)置驗(yàn)證條件。但是同時(shí)也應(yīng)該看到,驗(yàn)證控件不是萬(wàn)能的。在判斷某個(gè)月份的日期是否有效時(shí),Validator就沒(méi)方法很好地完成任務(wù),以至于我們要在效勞器端補(bǔ)充驗(yàn)證代碼.8.4HTML控件第一個(gè)是效率。這一點(diǎn)在后面會(huì)講到,HTML控件根本上就是對(duì)HTML語(yǔ)言中的元素的直接對(duì)應(yīng),與Web窗體控件不同,這些控件在放到頁(yè)面上以后〔如果不把它們轉(zhuǎn)成效勞器控件的話〕,直接作為HTML元素來(lái)處理。換句話說(shuō),不必經(jīng)過(guò)編譯和運(yùn)行的過(guò)程,從而運(yùn)行的速度要快得多。所以,如果對(duì)一個(gè)控件的功能要求很簡(jiǎn)單的話〔比方,放上一個(gè)Label控件,只是為了顯示一行不變的字〕,那么可以考慮HTML控件。第二個(gè)是對(duì)頁(yè)面的控制。由于HTML控件是直接被作為HTML元素處理,所以它們?cè)谶\(yùn)行時(shí)顯示出的外觀與設(shè)計(jì)時(shí)的一模一樣。第三個(gè)是考慮到向下兼容。Web窗體控件在傳統(tǒng)ASP中根本就不存在,所以如果只提供Web窗體控件,那么程序員在把傳統(tǒng)ASP代碼升級(jí)到ASP.NET的時(shí)候就要做相當(dāng)大的改變,而HTML控件減少了這種改變的需要。在這個(gè)案例中,我們會(huì)使用HTML控件編寫一個(gè)簡(jiǎn)單的Web應(yīng)用程序,從中可以看出雖然HTML控件功能簡(jiǎn)單,但是只要善用,它也可以工作得很好。8.4.1 用HTML控件設(shè)計(jì)Web應(yīng)用程序8.4.2 程序運(yùn)行8.4.3點(diǎn)評(píng):效勞器控件這個(gè)程序確實(shí)很簡(jiǎn)單,但是有些東西值得解釋,首先是關(guān)于什么是“作為效勞器控件運(yùn)行〞的問(wèn)題。前面介紹過(guò)HTML控件在不作為效勞器控件運(yùn)行的時(shí)候,就相當(dāng)于一行普通的HTML語(yǔ)句,效勞器對(duì)它不做任何處理,而是原原本本地把它送到瀏覽器中去。事實(shí)上,如果查看程序窗體的HTML代碼,會(huì)看到有這樣一行:<DIVstyle="DISPLAY:inline;Z-INDEX:101;LEFT:240px;WIDTH:208px;POSITION:absolute;TOP:108px;HEIGHT:21px"ms_positioning="FlowLayout">請(qǐng)輸入你的名字</DIV>這就是那個(gè)永遠(yuǎn)不變的Label控件,效勞器根本不把它作為什么“控件〞,而是作為一行文字來(lái)看待,所以它沒(méi)有自己的行為,也沒(méi)有除了HTML元素定義之外的屬性。而如果把HTML控件作為效勞器控件運(yùn)行,效勞器就將對(duì)它進(jìn)行處理,這就是為什么一定要把一個(gè)控件轉(zhuǎn)成效勞器控件才能控制它的行為。在HTML代碼中,TextField控件和Button控件是這樣存在的:<INPUTid="txtName"style="Z-INDEX:102;LEFT:240px;WIDTH:126px;POSITION:absolute;TOP:149px;HEIGHT:25px"type="text"size="15"runat="server"><INPUTid="btnSayHello"style="Z-INDEX:103;LEFT:239px;WIDTH:94px;POSITION:absolute;TOP:195px;HEIGHT:26px"type="button"value="Button"runat="server">注意后面的“runat="server"〞字樣,這標(biāo)志著它們是效勞器控件。而相應(yīng)的,在代碼文件中,也會(huì)看到對(duì)它們的定義: ProtectedWithEventstxtNameAs ProtectedWithEventsbtnSayHelloAs8.5訪問(wèn)數(shù)據(jù)庫(kù)前面已經(jīng)學(xué)過(guò)了使用VisualBasic.NET開發(fā)基于窗口的數(shù)據(jù)庫(kù)應(yīng)用程序,有了ADO.NET的幫助,這個(gè)過(guò)程確實(shí)簡(jiǎn)單。而在Web應(yīng)用程序中,這種簡(jiǎn)單的特性一點(diǎn)也沒(méi)有變,這個(gè)案例就演示如何開發(fā)基于Web的數(shù)據(jù)庫(kù)應(yīng)用程序。事實(shí)上,由于編程模型的統(tǒng)一性,基于Web的數(shù)據(jù)庫(kù)應(yīng)用程序和基于窗口的數(shù)據(jù)庫(kù)應(yīng)用程序在開發(fā)過(guò)程上沒(méi)有太多不同,所以這個(gè)案例只是作為一個(gè)引子,演示出了一種最簡(jiǎn)單的情況,即在瀏覽器中顯示一個(gè)表。在學(xué)習(xí)了這個(gè)案例之后,結(jié)合第7章學(xué)到的知識(shí),就可以開發(fā)出更復(fù)雜的Web數(shù)據(jù)庫(kù)應(yīng)用程序。當(dāng)然,應(yīng)當(dāng)保證自己的機(jī)器上裝有SQLServer數(shù)據(jù)庫(kù),或者至少可以訪問(wèn)到SQLServer數(shù)據(jù)庫(kù)。8.5.1 Web控件上的數(shù)據(jù)綁定8.5.2 程序運(yùn)行8.5.3 Web上的數(shù)據(jù)庫(kù)連接關(guān)于數(shù)據(jù)庫(kù)連接,在第7章已經(jīng)有詳細(xì)的介紹,在這里只是簡(jiǎn)單地把過(guò)程提一下。首先是設(shè)置連接字符串,并且翻開一個(gè)數(shù)據(jù)庫(kù)連接: connMain.ConnectionSt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣密條施工方案
- 尿素脫硝施工方案
- 陜西財(cái)稅知識(shí)培訓(xùn)課件
- 第2單元第2節(jié)《人機(jī)的互動(dòng)》教學(xué)設(shè)計(jì) 2023-2024學(xué)年粵教清華版初中信息技術(shù)七年級(jí)下冊(cè)
- 光伏材料合同范例
- 合同范本運(yùn)用方法
- 年度創(chuàng)新思維與實(shí)踐分享計(jì)劃
- 產(chǎn)品定價(jià)和利潤(rùn)計(jì)劃
- 精細(xì)化管理在急診科的應(yīng)用計(jì)劃
- 安徽省合肥市長(zhǎng)豐縣七年級(jí)生物上冊(cè) 1.1.1 生物的特征教學(xué)實(shí)錄2 (新版)新人教版
- 學(xué)校校園花崗巖鋪設(shè)合同
- 2024年新疆區(qū)公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 老年精神病的藥物護(hù)理
- 南京信息工程大學(xué)《流體力學(xué)Ⅰ》2022-2023學(xué)年第一學(xué)期期末試卷
- 英文在職證明模版
- 大學(xué)生職業(yè)素養(yǎng)訓(xùn)練(第六版)課件 第十二單元養(yǎng)成友善品格
- GB/T 44592-2024紅樹林生態(tài)保護(hù)修復(fù)技術(shù)規(guī)程
- 傳感器技術(shù)-武漢大學(xué)
- 初中數(shù)學(xué)建模研究報(bào)告
- 人教A版(2019)高中數(shù)學(xué)選擇性必修第二冊(cè) 《數(shù)列的相關(guān)概念》教學(xué)設(shè)計(jì)
- 虛勞中醫(yī)護(hù)理方案
評(píng)論
0/150
提交評(píng)論