国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

.NET Framework環(huán)境下的ASP網(wǎng)頁(yè)製作(2)(王國(guó)榮)

2024-07-10 12:58:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

ado+與資料控制元件


.net framework所提供的資料庫(kù)存取物件稱(chēng)為ado+(active data object+),雖然有不少觀念與ado相類(lèi)似,但卻是全新的物件,為什麼已經(jīng)有ado了,還要再提供ado+呢?筆者覺(jué)得原因可能有幾:
  • 採(cǎi)用xml做為資料交換格式:由於xml已經(jīng)成為網(wǎng)際網(wǎng)路交換資料的標(biāo)準(zhǔn),這是個(gè)不得不的舉動(dòng)。
  • 延伸資料的範(fàn)圍:在ado底下,任何資料都必須透過(guò)old db或odbc來(lái)存取,ado+ 並無(wú)此一限制,任何程式都可以藉助ado+ 所提供的物件讓自己成為新資料格式的提供者,這因此延伸了可存取之資料的範(fàn)圍。
  • 與資料控制元件的整合:以往我們撰寫(xiě)asp網(wǎng)頁(yè)時(shí),最不方便的地方是資料庫(kù)內(nèi)容的顯示,為了顯示資料庫(kù)的內(nèi)容,大概必須藉助ado的recordset物件逐筆讀取資料錄,然後再逐筆將其顯示出來(lái),程式較冗長(zhǎng),在asp.net網(wǎng)頁(yè)中,我們只要佈置好datagrid、datalist或repeater這一類(lèi)資料控制元件,然後與ado+ 進(jìn)行繫結(jié),datagrid等控制元件就會(huì)自動(dòng)顯示資料庫(kù)的內(nèi)容。參閱圖-5及圖-6就是分別使用datagrid及datalist控制元件顯示資料庫(kù)內(nèi)容的網(wǎng)頁(yè)。

圖-5 http://www.kjedu.com.tw/kjaspx/ch01/aspxpage.aspx 網(wǎng)頁(yè)
圖-6 http://www.kjedu.com.tw/kjaspx/ch01/datalist.aspx

cache與效能的提升


為了提升執(zhí)行效能,asp.net網(wǎng)頁(yè)會(huì)先被編譯成msil儲(chǔ)存在硬碟中,而下次當(dāng)該網(wǎng)頁(yè)再度被瀏覽時(shí),就可以直接執(zhí)行被儲(chǔ)存下來(lái)的msil(細(xì)節(jié)請(qǐng)參閱「執(zhí)行效能的質(zhì)疑」段落的說(shuō)明),除了此一強(qiáng)化執(zhí)行效能的動(dòng)作之外,asp.net所提供的cache(快取記憶體)功能亦可提升執(zhí)行效能。asp.net提供的cache功能分成output cache及data cache兩種。

output cache與網(wǎng)頁(yè)快取



圖-7 output cache與網(wǎng)頁(yè)快取

參閱圖-7,所謂output cache,是在執(zhí)行msil之後,先將結(jié)果寫(xiě)入output cache,然後再將output cache下傳到瀏覽器,而將來(lái)如果瀏覽同一網(wǎng)頁(yè),asp.net會(huì)先判斷該網(wǎng)頁(yè)是否有output cache存在,如果有,則直接將output cache下傳到瀏覽器,不會(huì)經(jīng)過(guò)編譯 .aspx及執(zhí)行msil的過(guò)程,故能提升執(zhí)行效能。
要啟用output cache的方法十分簡(jiǎn)單,只要在 .aspx網(wǎng)頁(yè)的最前面加上以下標(biāo)示即可:

<%@ outputcache duration="秒數(shù)" %>

其中duration表示output cache保留在系統(tǒng)中的秒數(shù),例如:

<%@ outputcache duration="10" %>

結(jié)果網(wǎng)頁(yè)的output cache將會(huì)保留在系統(tǒng)中10秒鐘,而凡是在這10秒內(nèi)瀏覽此一網(wǎng)頁(yè),asp.net就會(huì)直接將output cache下傳給瀏覽器,省略了編譯的動(dòng)作。

data cache與資料快取


除了將整個(gè)網(wǎng)頁(yè)儲(chǔ)存於output cache之外,我們也可以將局部資料儲(chǔ)存於data cache(以下簡(jiǎn)稱(chēng)cache)。cache的用法與application物件很類(lèi)似,例如:

' 將資料或物件存放在application物件中
application("key1") = "這是字串"
application("key2") = obj

' 將資料或物件存放在data cache中
cache("key1") = "這是字串"
cache("key2") = obj

不過(guò)筆者必須說(shuō)明的是data cache所佔(zhàn)用的記憶體隨時(shí)可能會(huì)被釋放(視系統(tǒng)記憶體當(dāng)時(shí)使用的情況),所以每當(dāng)我們要讀取data cache時(shí),要先判斷cache("key") 是否等於nothing,若不等於nothing,表示cache("key") 還存在於系統(tǒng)中,方可讀取。

提供偵錯(cuò)工具


在撰寫(xiě)程式的過(guò)程中,難免會(huì)有錯(cuò)誤產(chǎn)生,如何除錯(cuò)對(duì)任何一個(gè)程式設(shè)計(jì)師來(lái)說(shuō),都是很重要而且是無(wú)可避免的工作。asp的偵錯(cuò)工具十分欠缺,為了改善此一缺失,asp.net提供以下幾種偵錯(cuò)方法:
  • 設(shè)定config.web的customerrors節(jié)區(qū)
  • 使用追蹤(trace)功能
  • 偵錯(cuò)工具程式(debugger)

設(shè)定config.web的customerrors節(jié)區(qū)


當(dāng)網(wǎng)頁(yè)產(chǎn)生錯(cuò)誤而無(wú)法進(jìn)一步編譯或執(zhí)行時(shí),asp.net會(huì)顯示如圖-8之畫(huà)面,此一畫(huà)面只告訴我們程式有錯(cuò),至於哪一行程式錯(cuò)誤,則未顯示。為了讓asp.net顯示進(jìn)一步的錯(cuò)誤訊息,可在config.web檔案中增加customerrors節(jié)區(qū)的設(shè)定,如下:

<configuration>
<customerrors mode="off"/>
</configuration>

結(jié)果瀏覽之後可看到更詳細(xì)的錯(cuò)誤指示畫(huà)面(如圖-9)
圖-8 asp.net網(wǎng)頁(yè)編譯或執(zhí)行錯(cuò)誤的畫(huà)面 (圖略)
圖-9 asp.net網(wǎng)頁(yè)編譯或執(zhí)行錯(cuò)誤的畫(huà)面(錯(cuò)誤訊息較詳細(xì))(圖略)

使用trace追蹤功能


所謂trace功能是在網(wǎng)頁(yè)的最前面加上以下標(biāo)示:

<%@ page trace="true" %>

結(jié)果網(wǎng)頁(yè)被瀏覽之後,將會(huì)額外顯示一些資訊,如圖-10,而這些資訊有助於我們研判程式的狀況,做為偵錯(cuò)時(shí)的參考。
圖-10 trace功能啟用之後的網(wǎng)頁(yè)(圖略)
在圖-10畫(huà)面中,除了網(wǎng)頁(yè)正常顯示的內(nèi)容之外,額外顯示的資訊可分成以下區(qū)段:
  • request details:透過(guò)request方式向?yàn)g覽器所讀取之資料。
  • trace information:事件發(fā)生或程式執(zhí)行的過(guò)程。
  • control tree:網(wǎng)頁(yè)所使用之控制元件及控制元件之間的階層關(guān)係。
  • cookies collection:網(wǎng)頁(yè)所使用的cookie。
  • headers collection:瀏覽器的表頭資訊。
  • server variables:server變數(shù),也就是我們可以透過(guò)request. servervariables() 所讀取的資訊。

除了讓asp.net自動(dòng)顯示以上訊息之外,我們也可以將程式執(zhí)行過(guò)程中的資料顯示在trace information區(qū)段中,方法是呼叫trace.write或trace.warn,例如:

trace.write("uploadfile()", "進(jìn)入uploadfile事件程序")
trace.warn ("uploadfile()", "進(jìn)入for迴圈")

結(jié)果可將訊息輸出到trace information區(qū)段,供我們做為偵測(cè)程式的參考。

偵錯(cuò)工具程式(debugger)


asp.net提供的debugger程式很像vb的操作介面,可以讓我們?cè)O(shè)定中斷點(diǎn)、逐步執(zhí)行程式、觀察變數(shù)及堆疊的情況…等,是偵錯(cuò)的利器。使用debugger之前,須在config.web檔案中增加以下的設(shè)定:

<compilation debugmode="true"/>

接下來(lái)啟動(dòng)c:/program files/microsoft.net/frameworksdk/guidebug目錄的dbgurt.exe,然後利用以下步驟即可偵測(cè) .aspx網(wǎng)頁(yè):
1. 選取dbgurt.exe功能表的「debug -> processes」,待出現(xiàn)「processes」交談窗時(shí),核取「show system processes」及「show processes in all sessions」,然後在「available processes」欄位的最下面找到xspwp.exe(註:如果沒(méi)有看到xspwp.exe,請(qǐng)先啟動(dòng)瀏覽器瀏覽任意 .aspx網(wǎng)頁(yè),然後再按下「refresh」鈕),選取之後,再按下「attach」鈕,過(guò)程如圖-11。
圖-11 dbgurt.exe的「process」交談窗(圖略)
2. 接下來(lái)會(huì)出現(xiàn)「attach to process」交談窗(如圖-12),請(qǐng)按下「ok」鈕。
圖-12 attach to process 交談窗(圖略)
3. 接下來(lái)回到步驟1的「processes」交談窗,請(qǐng)按下「close」鈕。
4. 選取dbgurt.exe功能表的「file -> open -> file」選取您想偵測(cè)的 .aspx檔案,在此您可以選取多個(gè)想要偵測(cè)的檔案。

物件的開(kāi)發(fā)


由於asp.net以vb7為程式語(yǔ)言,所以vb7所有物件導(dǎo)向的功能也都能夠發(fā)揮在asp.net網(wǎng)頁(yè)製作中,而除了程式語(yǔ)言所提供物件導(dǎo)向功能之外,asp.net可以開(kāi)發(fā)一種網(wǎng)頁(yè)專(zhuān)用的物件 -- pagelet(網(wǎng)頁(yè)小配件)。
何謂pagelet(網(wǎng)頁(yè)配件)?以生活中的實(shí)例來(lái)看,當(dāng)我們裝飾耶誕樹(shù)時(shí),往往會(huì)買(mǎi)些小配件,然後將它們佈置在喜歡的位置,pagelet的觀念也是相類(lèi)似的,某些常用的配件,我們可以將它們?cè)O(shè)計(jì)pagelet,讓其他網(wǎng)頁(yè)來(lái)使用,舉個(gè)更實(shí)際的例子,例如我們網(wǎng)頁(yè)中佈置一個(gè)label控制元件及一個(gè)textbox控制元件,其作用就是在網(wǎng)頁(yè)中插入了一個(gè)label類(lèi)型的pagelet及一個(gè)textbox類(lèi)型的pagelet。
本文讓筆者先展示一個(gè)簡(jiǎn)單的pagelet,此一pagelet命名為footer.ascx,如下:(註:pagelet須以 .ascx 為副檔名)

<div align="right">
<hr>
<a href="http://www.kj.com.tw" target="_top">
學(xué) visual basic 找王國(guó)榮</a>
</div>

檢視footer.ascx的內(nèi)容,您會(huì)發(fā)現(xiàn)其中只有html標(biāo)示,完全沒(méi)有asp.net的程式,這樣的 .ascx檔案也能構(gòu)成pagelet嗎?答案是肯定的,最簡(jiǎn)單的pagelet就是只含有html標(biāo)示的 .ascx檔案,接著讓我們來(lái)看看使用這個(gè)這個(gè)pagelet的網(wǎng)頁(yè)usefoot.aspx:

<%@ register tagprefix="kj" tagname="footer" src="footer.ascx" %>
<html>
<body bgcolor="white">
<h3>使用最簡(jiǎn)單的 pagelet -- usefoot.aspx<hr></h3>
<blockquote>
檢視 footer.ascx 的內(nèi)容,您會(huì)發(fā)現(xiàn)其中只有 html 標(biāo)示,完全沒(méi)有
asp+ 的程式,這樣的 .ascx 檔案也能構(gòu)成 pagelet 嗎?答案是肯定
的,最簡(jiǎn)單的 pagelet 就是只含有 html 標(biāo)示的 .ascx 檔案。
</blockquote>
<kj:footer id="footer1" runat="server"/>
</body>
</html>

網(wǎng)頁(yè)瀏覽的結(jié)果如圖-13。

圖-13 usefoot.aspx瀏覽的結(jié)果

除了只含有html標(biāo)示最簡(jiǎn)單的pagelet之外,pagelet也可以含有屬性及方法,對(duì)於含有屬性及方法的pagelet來(lái)說(shuō),其用法與server控制元件完全相同。當(dāng)我們覺(jué)得 .net framework 所提供的server控制元件不夠用時(shí),可以利用製作pagelet的功能來(lái)建立我們自己的server控制元件。

web services


不像asp網(wǎng)頁(yè)只能存取本機(jī)資料庫(kù),asp.net則提供了web services功能讓我們跨越網(wǎng)際網(wǎng)路存取遠(yuǎn)端的資源。在vb6時(shí)代,微軟發(fā)表了rds(remote data service),也可以讓我們存取網(wǎng)際網(wǎng)路上另一部server的資料庫(kù),但它仍有兩大缺點(diǎn):(1) 一般使用者上手不易 (2) 無(wú)法跨越平臺(tái):使用rds跨越網(wǎng)際網(wǎng)路存取資料庫(kù),不管server端或client端,都必須使用windows作業(yè)系統(tǒng)。
web services(web服務(wù))改良了rds的缺點(diǎn),除了變得比較容易上手之外,web services採(cǎi)用xml為資料傳輸?shù)母袷剑沟觅Y料得以跨越平臺(tái),而更重要的是,asp.net網(wǎng)頁(yè)也可以享用這種服務(wù),也可以提供這種服務(wù)。
在作業(yè)模式上,讓筆者舉個(gè)實(shí)例來(lái)說(shuō)明,請(qǐng)參閱圖-14,假設(shè)瀏覽器會(huì)存取server a的網(wǎng)頁(yè),但server a的資料庫(kù)來(lái)自serverx,那麼server x要提供一存取資料庫(kù)之web service,另一方面server a則要建立web資料庫(kù)代理程式,然後透過(guò)web資料庫(kù)代理程式與web service的資料交換(採(cǎi)用xml格式),進(jìn)而達(dá)到存取server x資料庫(kù)的目的。

圖-14 存取web資料庫(kù)(跨越網(wǎng)際網(wǎng)路的資料庫(kù))

結(jié)語(yǔ)


也許過(guò)去兩三年電子商務(wù)真的被高估了,但網(wǎng)頁(yè)製作技術(shù)卻已成為資訊人必備的知識(shí)。雖然自從微軟發(fā)表iis以來(lái),asp一直被低估了,所以只是iis的附屬品,現(xiàn)在很高興asp.net終於從iis之中獨(dú)立出來(lái),而且功能與vb、c#…等程式語(yǔ)言看齊,相信未來(lái)的asp網(wǎng)頁(yè)製作將進(jìn)入另一個(gè)嶄新的世紀(jì)。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兰市| 朝阳市| 邹平县| 大足县| 瑞丽市| 常山县| 林芝县| 沛县| 东安县| 闻喜县| 资源县| 城固县| 清原| 白沙| 车险| 新巴尔虎左旗| 吴江市| 连云港市| 青神县| 重庆市| 泌阳县| 云南省| 大新县| 鄄城县| 商洛市| 乌兰察布市| 敦化市| 辛集市| 安化县| 呼伦贝尔市| 杭锦旗| 内江市| 孟村| 沅陵县| 宁乡县| 合山市| 富阳市| 岳西县| 兴和县| 鄢陵县| 繁峙县|