.NET Framework環境下的ASP網頁製作(1) (王国荣)從ASP到ASP.NET程式語言的改變WebForm與Server控制元件

80酷酷网    80kuku.com

  


網路公司裁員、網站關閉、電子報停刊…,經歷電子商務的退潮之後,有人開始質疑電子商務是不是被高估了。也許網際網路不再編織賺大錢的美夢,但經過這幾年的洗禮,網際網路已經成為大眾生活中的一部份,據說台北市的國中生能製作網頁者已經相當普遍,由此可見一斑,當網頁製作變成一般知識之後,想生存於網際網路,夠不夠專業將是決勝因素。

在 .NET Framework底下,筆者很欣慰ASP(Active Server Pages)變得更專業了,簡單地回顧過去的ASP,我們至少可以指出幾個缺點:
  • 只能使用VB Script或Java Script這兩種程式語言來開發ASP。
  • 沒有好的偵錯程式(Debugger)。
  • 網頁結構會隨著程式變大而一團亂。
  • ADO無法直接與DataGrid元件結合。

本期筆者將為您解說ASP的新面貌(微軟把這個新的ASP稱為ASP.NET)。

從ASP到ASP.NET


ASP會變得很紅,恐怕連微軟也覺得意外,因為ASP一直都附屬於IIS,算不上獨立的產品。IIS版本與ASP版本的對應如下:IIS 版本附帶在 IIS 底下的 ASP 版本IIS 3.0ASP 1.0IIS 4.0ASP 2.0IIS 5.0ASP 3.0
有人會用1.0、2.0、3.0來區分ASP的版本,但筆者不以為然,因為從ASP 1.0版到3.0版,微軟並沒有花太多心思來改良ASP,只是因為IIS改版了,所以ASP也跟著做微幅的改版,因此從ASP 1.0版到3.0版,在功能上並沒有顯著的改變,所以不管ASP 1.0、2.0或3.0,筆者都叫它們ASP。
隨著ASP的使用者越來越多,希望ASP更好的聲音也越來越強烈,也許是從善如流,也許是為了推廣 .NET Framework,微軟針對ASP的使用者做了市場調查,找出ASP必須改良的地方,而發展了下一代的ASP,也就是ASP.NET(或者稱為ASP+)。

ASP.NET與ASP的相容性


從ASP升級到ASP.NET,大家最擔心的問題可能是「會不會影響既有ASP網頁的運作」,筆者將ASP作業平台升級到ASP.NET作業平台之後(本文撰寫時所安裝的ASP.NET版本是Beta 1),還沒有發現既有的ASP網頁不能運作或必須修改的。
在實際運作上,當ASP網頁(以 .asp為副檔名)被瀏覽時,IIS會啟動asp.dll來執行ASP網頁,而當ASP.NET網頁(以 .aspx為副檔名)被瀏覽時,IIS則會啟動xspwp.exe來執行ASP.NET網頁,兩者的執行檔案不同,因此不只是安裝ASP.NET之後,不會影響既有ASP網頁的運作,實際上ASP網頁及ASP.NET網頁是並存的。
另一個常問的問題是:需要將現有的ASP網頁轉換成ASP.NET網頁嗎?由於ASP網頁及ASP.NET網頁是並存的,因此運作得很順利的ASP網頁可以暫時不必修改,至於哪些網頁必須採用ASP.NET?以下是筆者的建議:
  1. 希望效能更高時:當ASP.NET網頁第一次被瀏覽時,Server會先將其編譯成MSIL(Microsoft Intermediate Language),並且儲存下來,而再度被瀏覽時,即不再重新編譯(除非 .aspx檔案的內容有所改變),因此可以提升不少效能。此外,ASP.NET還具備網頁及資料Cache功能(見稍後介紹),亦可提昇網頁的回應速度。
  2. 需要經常維護或修改的網頁:由於ASP.NET採用VB7為程式語言,具備完整的物件導向功能,有助於網頁的維護。
  3. 未來新開發的網頁:既然ASP.NET功能優於ASP,未來開發的網頁當然要採用ASP.NET。

程式語言的改變


從ASP到ASP.NET,其中的改變相當多,不過與ASP網頁製作者最有切身關係的應該是程式語言的改變,ASP只接受VB Script及Java Script兩種程式語言,但是對ASP.NET來說,舉凡可以編譯成MSIL的程式語言,都是ASP.NET可以接受的程式語言。
筆者在Run!PC前3期的「.NET Framework -- 微軟新一代的軟體開發環境」一文中介紹過MSIL,它是一種中介語言,介於高階程式語言(例如VB)及機器碼之間的語言,在ASP.NET底下,我們撰寫的程式語言也會先編譯成MSIL,然後MSIL再被編譯成機器碼加以執行,過程如圖-1,ASP.NET也是採用此一模式,除了會輸出資料到瀏覽器之外,ASP.NET網頁與其他的程式語言的工作模式都是相同的。


圖-1 ASP.NET 網頁編譯執行的過程

執行效能的質疑


第一次接觸ASP.NET網頁的人可能會有這樣的疑問:「執行效能好像不如ASP網頁?」,關於這個問題,讓筆者從運作模式來談起,首先請看圖-2,可看出ASP.NET網頁比ASP網頁要多一次的編譯工作。

圖-2 ASP與ASP.NET運作模式的比較

儘管ASP.NET比ASP網頁多一次的編譯工作,但這並不表示ASP.NET的執行效能一定比較差,參考圖-2,ASP.NET階段二的編譯執行速度優於ASP,但ASP.NET階段一的編譯速度卻慢於ASP,簡單地說,ASP.NET階段一及階段二合起來的時間 >ASP執行的時間。
如果從以上的比較來看,ASP.NET確實比ASP慢,但是請再把網頁的瀏覽分成以下兩種情況:(1) 網頁第一次被瀏覽 (2) 網頁第二次被瀏覽,如圖-3,ASP.NET 網頁第一次被瀏覽時,會經過兩階段的編譯,所以速度較慢,但第一次被瀏覽之後,MSIL會被儲存下來,所以當同一網頁第二次被瀏覽時,只須花費從MSIL編譯成機器碼然後執行的時間,結果比ASP網頁來的快,整體的比較如下:(>表示較快)

ASP.NET 網頁第二次被瀏覽 > ASP網頁> ASP.NET 網頁第一次被瀏覽

圖-3 第一次瀏覽及第二次瀏覽的差異

.NET Framework 物件類別的使用


微軟宣稱 .NET Framework有許多好處,但筆者最看重的是 .NET Framework所提供的物件類別,.NET Framework所提供的物件類別多達數百種,包含資料結構、資料庫、繪圖、網路、XML、執行緒、目錄服務、安全性…等,應有盡有。
以往ASP網頁雖然可以使用ActiveX物件,但其實只限定於ActiveX物件中的ActiveX DLL,不像一般應用程式(例如VB程式、C++程式)可以同時使用ActiveX DLL、ActiveX EXE及ActiveX Component等多種ActiveX物件,不過這個現象在 .NET Framework底下已經有所改善,在 .NET Framework所提供的物件類別中,除了少數與螢幕輸出有關的物件類別(例如WinForm及Console)是ASP.NET網頁所不可使用之外,其他物件類別則都是ASP.NET網頁可以使用的。
註:WinForm包含windows(視窗)相關的物件類別、Console則是DOS文字輸出模式的物件類別,對ASP.NET來說,其輸出之標的為瀏覽器,所以不可以輸出資料到Windows視窗及DOS文字視窗,ASP.NET專用的輸出物件類別稱為WebForm,則是Windows應用程式不可使用的。

WebForm與Server控制元件


在ASP的網頁製作中,如果我們想設計一個輸入表單(Form),大概只能使用HTML輸入欄位(或稱為控制元件),ASP.NET在這方面做了很大的加強,在其WebForm裡面,我們可以佈置各種控制元件(統稱Server控制元件),這些控制元件包含:Server控制元件功能CheckBox、CheckBoxList加強HTML核取方塊的功能RadioButton、 RadioButtonList加強HTML選擇鈕的功能TextBox加強HTML文字輸入方塊的功能ListBox 、DropDownList加強HTML下拉式選單的功能Table、TableRow、TableCell加強HTML表格的功能Label加強HTML文字的功能Image、 ImageButton加強HTML圖片的功能LinkButton、 HyperLink加強HTML連結的功能Panel可將控制元件分成多個區塊AdRotator廣告迴旋板Calendar日期的顯示及選擇資料驗證類控制元件可在不必撰寫程式的情況,幫我們驗證使用者所輸入的資料是否正確DataGrid、DataList、Repeater資料庫的顯示
除了提供更豐富的控制元件之外,WebForm的另一個優點是可以記錄網頁的狀態,以往在ASP網頁中,若要記錄Client端的狀態,必須使用Session或Cookie物件,但不管是Session或Cookie物件,都必須在上網者開啟瀏覽器的Cookie功能之下方可運作,ASP.NET改善了此一現象,只要我們將Server控制元件佈置在WebForm之中,WebForm就會記錄所有Server控制元件的狀態(例如控制元件中所輸入的文字)。
記錄控制元件狀態的能力,以須分成多次輸入的表單最為方便,以圖-4的輸入表單為例,若使用ASP的設計,在步驟一及步驟二所輸入的資料必須記錄在Session或Cookie物件中,供步驟三讀取,但是對ASP.NET網頁,只要將步驟一、步驟二、步驟三的Server控制元件佈置在同一個WebForm之中,則不管網頁執行到哪一個步驟,都可以讀取上網者在Server控制元件中所輸入的資料。


圖-4 分成多次輸入的表單

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: