網路公司裁員、網站關閉、電子報停刊…,經歷電子商務的退潮之後,有人開始質疑電子商務是不是被高估了。也許網際網路不再編織賺大錢的美夢,但經過這幾年的洗禮,網際網路已經成為大眾生活中的一部份,據說台北市的國中生能製作網頁者已經相當普遍,由此可見一斑,當網頁製作變成一般知識之後,想生存於網際網路,夠不夠專業將是決勝因素。
在 .net framework底下,筆者很欣慰asp(active server pages)變得更專業了,簡單地回顧過去的asp,我們至少可以指出幾個缺點:
- 只能使用vb script或java script這兩種程式語言來開發asp。
- 沒有好的偵錯程式(debugger)。
- 網頁結構會隨著程式變大而一團亂。
- ado無法直接與datagrid元件結合。
本期筆者將為您解說asp的新面貌(微軟把這個新的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升級到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?以下是筆者的建議:
- 希望效能更高時:當asp.net網頁第一次被瀏覽時,server會先將其編譯成msil(microsoft intermediate language),並且儲存下來,而再度被瀏覽時,即不再重新編譯(除非 .aspx檔案的內容有所改變),因此可以提升不少效能。此外,asp.net還具備網頁及資料cache功能(見稍後介紹),亦可提昇網頁的回應速度。
- 需要經常維護或修改的網頁:由於asp.net採用vb7為程式語言,具備完整的物件導向功能,有助於網頁的維護。
- 未來新開發的網頁:既然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網頁與其他的程式語言的工作模式都是相同的。
第一次接觸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網頁來的快,整體的比較如下:(>表示較快)
微軟宣稱 .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應用程式不可使用的。
在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控制元件中所輸入的資料。
新闻热点
疑难解答
图片精选