WebClass實現動態WEB程式設計之理論篇 (轉)

worldblog發表於2007-12-04
WebClass實現動態WEB程式設計之理論篇 (轉)[@more@]Class實現動態WEB之理論篇
(作者:蘇紅超 2001年01月10日 15:50)

在前一段時間,我曾經在“用 DLL實現程式設計”一文中詳細探討過如何使用ActiveX DLL技術替代簡單的純ASP來實現核心程式碼和商業邏輯的封裝。適當的利用ActiveX DLL技術在構建動態WEB站點的時候的確能夠帶來很多的好處,這是顯而易見的,但是仍然需要一個單獨的ASP來建立和銷燬我們所編寫的ActiveX DLL,在ASP中大量使用ActiveX DLL是不現實的,並且我們的ASP程式設計仍然不可以像往常的應用那樣進行編寫,因為凌亂的ASP程式碼和HTML程式碼交織在一起,並且,無論是單純的ASP程式還是封裝了ActiveX DLL的ASP程式,一個最大的弊端就是在專案開發過程中的困難,比如很難設定斷點並隨時暫停程式來察看某些變數的值。那有沒有兩全其美的方法呢,既保證開發WEB程式的高,又可以向平常的應用程式那樣可以方便的除錯和編寫呢?答案當然是肯定的,公司在版本之後就引入了“WebClass”的概念,並且在新建專案中增添了名叫“IIS應用程式”的專案型別。WebClass正是微軟公司提出的用來使得程式設計師可以像開發普通應用程式那樣來開發WEB程式的解決方案!
  說起“IIS應用程式”,大家會認為這和ASP程式有何區別呢?ASP不就是執行在IIS上面的WEB應用程式嗎?其實這是微軟命名上面的一點小錯誤,使得大家在名稱上面比較容易混淆。我們現在應該清楚,“IIS應用程式”就是採用WebClass技術用來實現和ASP同樣功能的應用程式,它避免了ASP的種種缺點,比如是透明的、解釋帶來的速度慢。其實WebClass應用程式也是一種VB元件,使用他完成的WEB應用程式將會是編譯之後的,其執行速度有很大提高,同時也避免了原始碼和核心技術及商業機密被洩漏。

  WebClass 在實質上是一個VB元件,確切一點說來講WebClass是一個ActiveX DLL。他使得你可以編寫端程式碼以響應來自的請求。對使用者來說,一個 應用程式好象是由一系列的HTML頁面組成;對開發者來說,一個 IIS 應用程式是由一些被稱為 webclass 的特殊型別組成。WebClass可以直接訪問所有的ASP內建物件(request、response、application、session、server)。任何使用ASP開發的WEB專案都可以在WebClass中實現。由於在WebClass中引入了HTML模版的概念,從而有效的避免了ASP中的程式程式碼和HTML程式碼相互交織帶來的缺陷,很好的實現了商業邏輯層和最終表現層的分離(有些類似當前和的形式),極大的提高了WEB專案的開發效率。

  IIS 應用程式在表面上和 Active Server Pages 應用程式相似。這兩種應用程式都顯示動態的 Web 站點,並且都是在伺服器上而不是在客戶端上執行它們的處理。但是,每一種都有自己獨特的優點:

  (1)Active Server Pages 適合於對製作 Web 頁面感興趣的指令碼開發者,它提供了將指令碼和 HTML 混合起來的獨特能力。

  (2)IIS 應用程式適合於構造基於 Web 應用程式而不是 Web 頁面的 開發者。IIS 應用程式允許複雜的事務處理,並且幾乎任何的瀏覽器或平臺都可以很容易地訪問它。

  使用IIS應用程式來開發WEB專案可以有如下優點:

  (1)熟悉的開發環境和模型。可以利用 Visual Basic向工程新增類(Class)、模組(Model)或任何 Visual Basic ActiveX 部件,因而易於除錯和編寫。

  (2)使用的廣泛性。可以被大多數的瀏覽器支援。

  (3)可重複使用的部件。類似於物件導向程式設計;各個物件之間可互相訪問。

  (4)程式碼和 HTML 相分離:和編寫ASP 應用程式不同,Server 端處理程式和Client端程式分離,便於維護和修改。

  (5)可自定義處理事件,因而編寫方法靈活

  接下來我們來看看WebClass的具體組成部分是什麼:

  Webclass 由html模板和自定義 Webitem 組成。( html模板和自定義 Webitem統稱Webitem)當然不是必須包含模板和自定義的Webitem。

  (1)一個 HTML 模板檔案是與 webclass 相關聯的HTML頁面。當 webclass 收到一個請求時,它可以向瀏覽器傳送用於顯示的HTML頁面。模板和常規HTML頁面的不同僅在於向瀏覽器傳送頁面之前,它常常包含 webclass 可以處理的替換區域(通常是用"WC@"標籤定義的範圍)。這樣就允許自定義自己的響應。

  (2)一個自定義的 webitem 是由一個或多個事件處理程式組成的程式資源。在頁面載入或使用者選擇一個 HTML 元素時,這些事件處理程式被瀏覽器。這些事件處理程式可以對瀏覽器產生一個響應或將處理傳遞到另一個 webclass 的 webitem。

  一個完整的WebClass應用程式的大致流向如下所示:

  A.指定某一個WebClass(比如Test1)作為首先啟動的專案

  B.啟用這個WebClass(Test1)的WebClass_Start事件

  C.在Test1的WebClass_Start事件中呼叫某一個HTML模板的WriteTemplate方法,比如Check. WriteTemplate這裡的Check就是一個屬於Test1這個WebClass的一個HTML模板

  D.在你的這個Check模板中如果有
存在,那就會觸發這個
的ACTION屬性,比如,那麼就會呼叫屬於名為'xxx'的這個WebClass的'ddd'專案(Item);當然這個'xxx'可以是你剛才操作的WebClass本身,即"Test1",同樣,這個"ddd"可以是一個HTML模板或者一個WebItem。

  E.觸發屬於"xxx"這個WebClass的專案"ddd"將會啟用"ddd"本身的ddd_Respond()事件,你就可以在這裡進行一些處理了,比如檢索資料;然後可以再呼叫其它HTML模板的WriteTemplate方法,比如就呼叫本身的ddd.WriteTemplate方法

  F.然後將會呼叫ddd的ProcessTag事件,進行卷標的處理過程,當然你的這個叫ddd的HTML模板中就要有相應的WC@卷標了。

  我們再來看看Webclass中的事件響應。

  1. .Webclass中預定義的事件有3個 : response , processtag , userevent

  .response 事件響應使用者端請求。

  .processtag 事件是作為 WriteTemplate 方法處理的一部分自動發生的。不能單獨被觸發或用來處理響應。

  .userevent 事件: 一個 UserEvent 過程處理 webitem 的所有使用者事件。UserEvent 事件是由URLFor 方法在執行時產生的。所以只有使用了URLFor 方法動態產生的超連結才會觸發UserEvent 事件。

  2. Webclass_start() 事件類似於VB中的Sub Main()。

  所以可以指定一個project 開始的webclass。也可在model 模組中用Sub Main() 來啟動。

  3. 傳送html 到瀏覽器: 將頁面反饋回瀏覽器有兩種方法。

  A.對html模板使用 "writetemplate" 方法。此方法啟用"ProcessTag"事件,從而對模板中相應的內容(用WC@符號標記的部分) 進行替換。

  B.在Customwebitem 事件中動態生成反饋頁面。

如:   with response

.write "

.write""

.write""

.write""

.write"

Hello! Universe!

"

.write""

end with

  4. 從HTML 的中獲取資訊:

  使用Request 物件在一個 HTML
中獲取使用者輸入的資訊。但必須將
標記屬性和webclass中的一個事件連線,提交一個form 就可以激發 webclass 中的這個事件。因此,就可以使用這個事件蒐集和操作資訊。

  5. 動態替換html 模板檔案中的內容:使用3中的writetemplate 方法。

  6. 自定義webitem 事件。

  兩種方法和自定義webitem 事件關聯起來:

  A.用action=webclass.asp?wci=webitem&wce='自定義事件'的方法。

  B.用URLFor (Webitem,自定義事件)方法。

  7. 其他使用方法(如: Cookie,Session物件等) 和 ASP 應用程式中相同。

  WebClass中在傳回給使用者的HTML中可以使用兩種方法建立超級連結,很容易造成混淆,這裡我就詳細講解一下這兩種方法:

  方法一.

  一種是直接使用類似於這樣的格式,這樣當使用者點選這個超級連線的時候,就會傳跳到xxx這個WebClass的sss專案的sss_UserEvent事件當中來,你就可以在這個事件中進行一些處理,而且這種生成超級連線的方法可以在自己的後面帶許多的自定義的引數,比如其中的Test,Me都是我們自定義的引數,可以在轉跳之後頁面中使用Request("Test")方法取出其中的值,這樣就提供了一種在頁面之間傳遞值的解決方法;

  如果你沒有指定WCE引數,比如
那麼將會轉跳到xxx這個WebClass的sss專案(Item)的sss_Respond事件,而不是他的sss_UserEvent事件中!

  方法二.

  第二種方法是使用URLFor方法,URLFor(WebItem_Name,UserEvent_Value)。比如,
" 注意,在這裡要使用兩個雙引號代替一個雙引號。

這樣,就會轉跳到本頁(就是本身的WebClass)中的Check專案(Item)中的Check_UserEvent事件中去。URLFor方法只會觸發UserEvent事件,而不會觸發Respond事件!在Check_UserEvent事件中你可以使用這個事件的EventName引數獲取上面傳來的' CStr(recCheck("QTFTBN"))'這個值。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988152/,如需轉載,請註明出處,否則將追究法律責任。

相關文章