.NET Framework環境下的ASP網頁製作(2)(王国荣)

ADO+與資料控制元件

.NET Framework所提供的資料庫存取物件稱為ADO+(Active Data Object+),雖然有不少觀念與ADO相類似,但卻是全新的物件,為什麼已經有ADO了,還要再提供ADO+呢?筆者覺得原因可能有幾:
  • 採用XML做為資料交換格式:由於XML已經成為網際網路交換資料的標準,這是個不得不的舉動。
  • 延伸資料的範圍:在ADO底下,任何資料都必須透過OLD DB或ODBC來存取,ADO+ 並無此一限制,任何程式都可以藉助ADO+ 所提供的物件讓自己成為新資料格式的提供者,這因此延伸了可存取之資料的範圍。
  • 與資料控制元件的整合:以往我們撰寫ASP網頁時,最不方便的地方是資料庫內容的顯示,為了顯示資料庫的內容,大概必須藉助ADO的Recordset物件逐筆讀取資料錄,然後再逐筆將其顯示出來,程式較冗長,在ASP.NET網頁中,我們只要佈置好DataGrid、DataList或Repeater這一類資料控制元件,然後與ADO+ 進行繫結,DataGrid等控制元件就會自動顯示資料庫的內容。參閱圖-5及圖-6就是分別使用DataGrid及DataList控制元件顯示資料庫內容的網頁。

圖-5 http://www.kjedu.com.tw/kjaspx/ch01/AspxPage.aspx 網頁
圖-6 http://www.kjedu.com.tw/kjaspx/ch01/DataList.aspxCache與效能的提升

為了提升執行效能,ASP.NET網頁會先被編譯成MSIL儲存在硬碟中,而下次當該網頁再度被瀏覽時,就可以直接執行被儲存下來的MSIL(細節請參閱「執行效能的質疑」段落的說明),除了此一強化執行效能的動作之外,ASP.NET所提供的Cache(快取記憶體)功能亦可提升執行效能。ASP.NET提供的Cache功能分成Output Cache及Data Cache兩種。

Output Cache與網頁快取


圖-7 Output Cache與網頁快取

參閱圖-7,所謂Output Cache,是在執行MSIL之後,先將結果寫入Output Cache,然後再將Output Cache下傳到瀏覽器,而將來如果瀏覽同一網頁,ASP.NET會先判斷該網頁是否有Output Cache存在,如果有,則直接將Output Cache下傳到瀏覽器,不會經過編譯 .aspx及執行MSIL的過程,故能提升執行效能。
要啟用Output Cache的方法十分簡單,只要在 .aspx網頁的最前面加上以下標示即可:
<%@ OutputCache Duration="秒數" %>

其中Duration表示Output Cache保留在系統中的秒數,例如:

<%@ OutputCache Duration="10" %>

結果網頁的Output Cache將會保留在系統中10秒鐘,而凡是在這10秒內瀏覽此一網頁,ASP.NET就會直接將Output Cache下傳給瀏覽器,省略了編譯的動作。

Data Cache與資料快取

除了將整個網頁儲存於Output Cache之外,我們也可以將局部資料儲存於Data Cache(以下簡稱Cache)。Cache的用法與Application物件很類似,例如:

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

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

不過筆者必須說明的是Data Cache所佔用的記憶體隨時可能會被釋放(視系統記憶體當時使用的情況),所以每當我們要讀取Data Cache時,要先判斷Cache("key") 是否等於Nothing,若不等於Nothing,表示Cache("key") 還存在於系統中,方可讀取。

提供偵錯工具

在撰寫程式的過程中,難免會有錯誤產生,如何除錯對任何一個程式設計師來說,都是很重要而且是無可避免的工作。ASP的偵錯工具十分欠缺,為了改善此一缺失,ASP.NET提供以下幾種偵錯方法:
  • 設定config.web的customerrors節區
  • 使用追蹤(Trace)功能
  • 偵錯工具程式(Debugger)

設定config.web的customerrors節區

當網頁產生錯誤而無法進一步編譯或執行時,ASP.NET會顯示如圖-8之畫面,此一畫面只告訴我們程式有錯,至於哪一行程式錯誤,則未顯示。為了讓ASP.NET顯示進一步的錯誤訊息,可在config.web檔案中增加customerrors節區的設定,如下:

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

結果瀏覽之後可看到更詳細的錯誤指示畫面(如圖-9)
圖-8 ASP.NET網頁編譯或執行錯誤的畫面 (圖略)
圖-9 ASP.NET網頁編譯或執行錯誤的畫面(錯誤訊息較詳細)(圖略)

使用Trace追蹤功能

所謂Trace功能是在網頁的最前面加上以下標示:

<%@ Page Trace="True" %>

結果網頁被瀏覽之後,將會額外顯示一些資訊,如圖-10,而這些資訊有助於我們研判程式的狀況,做為偵錯時的參考。
圖-10 Trace功能啟用之後的網頁(圖略)
在圖-10畫面中,除了網頁正常顯示的內容之外,額外顯示的資訊可分成以下區段:

  • Request Details:透過Request方式向瀏覽器所讀取之資料。
  • Trace Information:事件發生或程式執行的過程。
  • Control Tree:網頁所使用之控制元件及控制元件之間的階層關係。
  • Cookies Collection:網頁所使用的Cookie。
  • Headers Collection:瀏覽器的表頭資訊。
  • Server Variables:Server變數,也就是我們可以透過Request. ServerVariables() 所讀取的資訊。

除了讓ASP.NET自動顯示以上訊息之外,我們也可以將程式執行過程中的資料顯示在Trace Information區段中,方法是呼叫Trace.Write或Trace.Warn,例如:

Trace.Write("UploadFile()", "進入UploadFile事件程序")
Trace.Warn ("UploadFile()", "進入For迴圈")

結果可將訊息輸出到Trace Information區段,供我們做為偵測程式的參考。

偵錯工具程式(Debugger)

ASP.NET提供的Debugger程式很像VB的操作介面,可以讓我們設定中斷點、逐步執行程式、觀察變數及堆疊的情況…等,是偵錯的利器。使用Debugger之前,須在config.web檔案中增加以下的設定:

<compilation debugmode="true"/>

接下來啟動C:\Program Files\Microsoft.Net\FrameworkSDK\GuiDebug目錄的DbgUrt.exe,然後利用以下步驟即可偵測 .aspx網頁:
1. 選取DbgUrt.exe功能表的「Debug -> Processes」,待出現「Processes」交談窗時,核取「Show system processes」及「Show processes in all sessions」,然後在「Available processes」欄位的最下面找到xspwp.exe(註:如果沒有看到xspwp.exe,請先啟動瀏覽器瀏覽任意 .aspx網頁,然後再按下「Refresh」鈕),選取之後,再按下「Attach」鈕,過程如圖-11。
圖-11 DbgUrt.exe的「Process」交談窗(圖略)
2. 接下來會出現「Attach to process」交談窗(如圖-12),請按下「OK」鈕。
圖-12 Attach to process 交談窗(圖略)
3. 接下來回到步驟1的「Processes」交談窗,請按下「Close」鈕。
4. 選取DbgUrt.exe功能表的「File -> Open -> File」選取您想偵測的 .aspx檔案,在此您可以選取多個想要偵測的檔案。

物件的開發

由於ASP.NET以VB7為程式語言,所以VB7所有物件導向的功能也都能夠發揮在ASP.NET網頁製作中,而除了程式語言所提供物件導向功能之外,ASP.NET可以開發一種網頁專用的物件 -- pagelet(網頁小配件)。
何謂Pagelet(網頁配件)?以生活中的實例來看,當我們裝飾耶誕樹時,往往會買些小配件,然後將它們佈置在喜歡的位置,Pagelet的觀念也是相類似的,某些常用的配件,我們可以將它們設計Pagelet,讓其他網頁來使用,舉個更實際的例子,例如我們網頁中佈置一個Label控制元件及一個TextBox控制元件,其作用就是在網頁中插入了一個Label類型的Pagelet及一個TextBox類型的Pagelet。
本文讓筆者先展示一個簡單的Pagelet,此一Pagelet命名為Footer.ascx,如下:(註:Pagelet須以 .ascx 為副檔名)
<Div align="right">
<Hr>
<A href="http://www.kj.com.tw" target="_top">
學 Visual Basic 找王國榮</A>
</Div>

檢視Footer.ascx的內容,您會發現其中只有HTML標示,完全沒有ASP.NET的程式,這樣的 .ascx檔案也能構成Pagelet嗎?答案是肯定的,最簡單的Pagelet就是只含有HTML標示的 .ascx檔案,接著讓我們來看看使用這個這個Pagelet的網頁UseFoot.aspx:

<%@ Register TagPrefix="kj" TagName="Footer" Src="Footer.ascx" %>
<Html>
<Body BgColor="White">
<H3>使用最簡單的 Pagelet -- UseFoot.aspx<HR></H3>
<Blockquote>
檢視 Footer.ascx 的內容,您會發現其中只有 HTML 標示,完全沒有
ASP+ 的程式,這樣的 .ascx 檔案也能構成 Pagelet 嗎?答案是肯定
的,最簡單的 Pagelet 就是只含有 HTML 標示的 .ascx 檔案。
</Blockquote>
<kj:Footer id="Footer1" runat="server"/>
</Body>
</Html>

網頁瀏覽的結果如圖-13。

圖-13 UseFoot.aspx瀏覽的結果

除了只含有HTML標示最簡單的Pagelet之外,Pagelet也可以含有屬性及方法,對於含有屬性及方法的Pagelet來說,其用法與Server控制元件完全相同。當我們覺得 .NET Framework 所提供的Server控制元件不夠用時,可以利用製作Pagelet的功能來建立我們自己的Server控制元件。

Web Services

不像ASP網頁只能存取本機資料庫,ASP.NET則提供了Web Services功能讓我們跨越網際網路存取遠端的資源。在VB6時代,微軟發表了RDS(Remote Data Service),也可以讓我們存取網際網路上另一部Server的資料庫,但它仍有兩大缺點:(1) 一般使用者上手不易 (2) 無法跨越平台:使用RDS跨越網際網路存取資料庫,不管Server端或Client端,都必須使用Windows作業系統。
Web Services(Web服務)改良了RDS的缺點,除了變得比較容易上手之外,Web Services採用XML為資料傳輸的格式,使得資料得以跨越平台,而更重要的是,ASP.NET網頁也可以享用這種服務,也可以提供這種服務。
在作業模式上,讓筆者舉個實例來說明,請參閱圖-14,假設瀏覽器會存取Server A的網頁,但Server A的資料庫來自ServerX,那麼Server X要提供一存取資料庫之Web Service,另一方面Server A則要建立Web資料庫代理程式,然後透過Web資料庫代理程式與Web Service的資料交換(採用XML格式),進而達到存取Server X資料庫的目的。

圖-14 存取Web資料庫(跨越網際網路的資料庫)

結語

也許過去兩三年電子商務真的被高估了,但網頁製作技術卻已成為資訊人必備的知識。雖然自從微軟發表IIS以來,ASP一直被低估了,所以只是IIS的附屬品,現在很高興ASP.NET終於從IIS之中獨立出來,而且功能與VB、C#…等程式語言看齊,相信未來的ASP網頁製作將進入另一個嶄新的世紀。

时间: 2024-10-10 19:35:40

.NET Framework環境下的ASP網頁製作(2)(王国荣)的相关文章

.NET Framework環境下的ASP網頁製作(1) (王国荣)

網路公司裁員.網站關閉.電子報停刊-,經歷電子商務的退潮之後,有人開始質疑電子商務是不是被高估了.也許網際網路不再編織賺大錢的美夢,但經過這幾年的洗禮,網際網路已經成為大眾生活中的一部份,據說台北市的國中生能製作網頁者已經相當普遍,由此可見一斑,當網頁製作變成一般知識之後,想生存於網際網路,夠不夠專業將是決勝因素. 在 .NET Framework底下,筆者很欣慰ASP(Active Server Pages)變得更專業了,簡單地回顧過去的ASP,我們至少可以指出幾個缺點: 只能使用VB Scr

用 PerlScript 寫 ASP 網頁

perl 用 PerlScript 寫 ASP 網頁 大部分的 ASP 網頁開發者都是使用 VBScript 來撰寫 ASP 應用程式, 當然這並不是唯一的選擇, 你還可以使用 JScript, 或者是本篇文章所要介紹的 PerlScript PerlScript 不像 VBScript 幾乎是口語化的語言, 它的寫法是比較接近 C , 如果你是 UNIX 管理者, 對於 Perl 絕對不會陌生, 可以按內講在 UNIX 的世界, Perl 的使用者有一種宗教的狂熱非常的忠誠, 這些人通常也對

王国荣之ASP+与VB.Net问答QA总汇

asp+ 現在的 VB7 (Beta 1)與將來發表的 VB7(正式版),在用法上會不會有很多不一樣的地方?  -------------------------------------------------------------------------------- 文件日期:2001/01/29  程式語言的基本屬於 .NET Framework 較底層的部分,如果這個部分會有很大的變動,架構在 .NET Framework 上面的工具其變動將更大,因此,據研判將來 VB7 在語法上的變

asp.net-AS.NET中用response下載,在瀏覽器彈出下載介面後,文件下載完,原網頁刷新問題

问题描述 AS.NET中用response下載,在瀏覽器彈出下載介面後,文件下載完,原網頁刷新問題 在網上找了一些方法,都不能實現下載完原網頁刷新一遍!!!!有沒網友瞭解這一塊的,謝謝! using (MemoryStream stream = new MemoryStream()) { workbook.Write(stream); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; R

在linux上建jsp環境

老早就在國外的網站上看到Jsp(Java Server Pages)的介紹,說它如何如何的好, 如何如何的強大,可是只知道jsp這玩意不錯,卻一直沒有機會用上.聽說unix下 配置jsp環境頗爲複雜,因此一直沒敢去碰.後來在臺灣的站點上找到了一份臺灣老 寫的在Linux下配置jsp環境的文章,如獲至寶,於是就馬上操刀上陣,想試試如何. 可惜照樣子畫葫蘆未果. 於是到國內幾個大的bbs內到處查找,尋訪幾個前輩,找到一些零碎的配置方法. 這些方法大都是gnujsp0.9x/1.0配合ApacheJs

生產環境不能安裝VS和SPD, 請問怎樣把workflow配置到生產環境呢?

问题描述 我在開發環境,使用SPD2013寫了一個workflow,客戶通過了....我才想起我不懂怎樣配置Workflow!在生產環境又不能安裝VS和SPD.在沒有VS和SPD之下,該如果配置上去呢?P.S.在開發環境我寫workflow的ID是test.comadmin,在生產環境是不存在的 解决方案 解决方案二:SPD不需要安装在生产环境,可以连接到生产环境的站点.在Opensite的时候,指定生产环境的站点URL.解决方案三:对呀,楼上说的对,可以连接生产环境的站点,有权限就行解决方案四

在linux上建jsp環境_JSP编程

老早就在國外的網站上看到Jsp(Java Server Pages)的介紹,說它如何如何的好, 如何如何的強大,可是只知道jsp這玩意不錯,卻一直沒有機會用上.聽說unix下 配置jsp環境頗爲複雜,因此一直沒敢去碰.後來在臺灣的站點上找到了一份臺灣老 寫的在Linux下配置jsp環境的文章,如獲至寶,於是就馬上操刀上陣,想試試如何. 可惜照樣子畫葫蘆未果. 於是到國內幾個大的bbs內到處查找,尋訪幾個前輩,找到一些零碎的配置方法. 這些方法大都是gnujsp0.9x/1.0配合ApacheJs

IIS6下部署ASP.NET MVC应用程序

通常在IIS6下部署ASP.NET MVC应用程序的时候,都是直接设置把所有请求都交由ASP.NET的ISAPI处理.MVC是基于ASP.NET的,框架默认对于任何请求都会优先检查物理路径是否存在物理文件,如果存在的话就不通过MVC的路由机制,否则才走路由. 因此,如果在不考虑控制静态资源权限的情况下,可以设置静态资源不通过ASP.NET的ISAPI,而直接由IIS处理,通过这种方式提升一些性能.本文围绕这个主题,详解部署过程. 0.在设计MVC网站的时候,把静态资源统一放在一个文件夹下,建议目

【dotnet跨平台】最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】

[dotnet跨平台]最新版dotnet-cli下的ASP.NET Core和asp.net mvc[RC2尝鲜] RC1是http://get.asp.net里面提供的https://docs.asp.net/en/latest/getting-started/index.html,使用旧的ASP.NET Core 1.0.这个版本会使用dnvm,dnu restore和dnx web等,而RC2则不需要,RC2只需要dotnet restore和dotnet run,无论是对控制台程序还是w