小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

瀏覽 VB6 網(wǎng)頁類

 hanguofeng 2007-04-23
 

瀏覽 VB6 網(wǎng)頁類

by Matthew Gray - GUI Computing

在進(jìn)行這項(xiàng)課題的研究之前,VB6 WebClasses(網(wǎng)頁類)對(duì)于我來說是充滿神秘的。因此尋找一個(gè)充滿精力的高手來揭開它的面紗是非常艱巨的。但VB6的組件將使得這一困難變得容易解決?;谶@一原因,請(qǐng)跟著我繼續(xù)滿懷信心地閱讀下去,我們將會(huì)對(duì)網(wǎng)頁類及其特點(diǎn)有一個(gè)較為深刻的了解。

在VB6產(chǎn)生以前,創(chuàng)建IIS應(yīng)用的唯一方法是編寫ASP程序,通過使用憑借VB,Delphi或其他語言建立的組件來創(chuàng)建COM DLLs(動(dòng)態(tài)鏈接庫)。(可以參見Jim Karabatsos的文章,VB6——一個(gè)最近問題的首要見解)。對(duì)于同樣的開發(fā)任務(wù),如果你不介意使用一些VBScript和一些Visual Basic的話(當(dāng)然還可能包括一些Delphi),這將是一個(gè)非常好的選擇。這是我個(gè)人的意見,但并不完全是個(gè)人性質(zhì)的。

網(wǎng)頁類改變了一切,使得你可以編寫VB6代碼,該代碼包容在ActiveX DLL中(位于服務(wù)器端),這些DDL可以訪問來自瀏覽器的HTTP請(qǐng)求。這就意味著你可以使用VB6代碼在ASP中做任何事情,并工作于VB6 IDE中,這是一種巨大的獎(jiǎng)賞。

在這種方式下工作意味著你不必了解ASP(許多人也不希望了解),因?yàn)镮IS應(yīng)用只需要?jiǎng)?chuàng)建一頁包含網(wǎng)頁類的ASP網(wǎng)頁(并且只要你不熱衷與此就不必編輯它)。在這之后,所有的任務(wù)都將由新鮮并充滿活力的VB來完成(好象這并沒有打開一個(gè)充滿可能性的世界?)

IIS應(yīng)用的本質(zhì)特點(diǎn)是將許多工作轉(zhuǎn)移到組件的內(nèi)部去完成,從而徹底將用戶接口與應(yīng)用的內(nèi)核部分徹底地分離開。

整個(gè)UI都可以由在HTML中帶有記名標(biāo)簽的HTML/圖形設(shè)計(jì)器來產(chǎn)生(動(dòng)態(tài)數(shù)據(jù)會(huì)在將來替換這些標(biāo)簽)。網(wǎng)頁類在事件中處理這些標(biāo)簽并產(chǎn)生動(dòng)態(tài)的HTML,在寫HTML模板的時(shí)候你可以替換這些標(biāo)簽。然而,網(wǎng)頁類并不局限于產(chǎn)生純粹的HTML。它們可以返回任何有效的MIME類型,包括諸如動(dòng)態(tài)HTML,XML等。

IIS應(yīng)用在這方面的發(fā)展特點(diǎn)十分類似于標(biāo)準(zhǔn)的VB應(yīng)用,如果你注意觀察了以下的一般生命周期:

VB應(yīng)用:創(chuàng)建窗體,編寫代碼,調(diào)試和測(cè)試,打包和發(fā)布。

IIS應(yīng)用:創(chuàng)建HTML文件,編寫代碼,調(diào)試和測(cè)試,打包和發(fā)布。

對(duì)于那些希望遠(yuǎn)離這種做法的人來說,如下的說法聽起來更加合理:

創(chuàng)建HTML文件,重建基于HTML的ASP,編寫VB代碼(DDLs或者其他組件),調(diào)試和測(cè)試,編寫ASP代碼,“調(diào)試”和測(cè)試,打包和發(fā)布——太麻煩了!

那么網(wǎng)頁類又是什么呢?

網(wǎng)頁類是一種用Visual Basic創(chuàng)建的位于Internet 信息服務(wù)器(IIS)上的COM DLL(動(dòng)態(tài)鏈接庫)。網(wǎng)頁類允許你創(chuàng)建服務(wù)器端的應(yīng)用,并能夠處理所有網(wǎng)頁服務(wù)器上的任務(wù),將HTML頁作為用戶接口,支持在任何瀏覽器下進(jìn)行瀏覽。

一般來說,當(dāng)編譯的時(shí)候,網(wǎng)頁類產(chǎn)生一個(gè)相應(yīng)的ASP頁來用于駐留服務(wù)器上的網(wǎng)頁類。這個(gè)ASP頁基本上通過了網(wǎng)頁類并包括它的應(yīng)用、請(qǐng)求、響應(yīng)以及服務(wù)器和會(huì)話對(duì)象,以使得VB可以使用在代碼級(jí)這些對(duì)象(需要注意的是自己進(jìn)行這項(xiàng)工作將會(huì)十分容易,并由此擁有自己的網(wǎng)頁類,但是VB6的網(wǎng)頁類將會(huì)提供比ASP對(duì)象更多的東西(這些我們將在后面看到))。

網(wǎng)頁類的生命周期

Initialise,BeginRequest,EndRequest,Start和Terminate都是網(wǎng)頁類生命中最關(guān)鍵的事件。從事件的名字中可以推斷出,這些事件顯然可以與基于表單應(yīng)用的Load和Unload事件相比較。一個(gè)IIS應(yīng)用的BeginRequest 和EndReques事件可以執(zhí)行一些Load和Unload事件所能夠執(zhí)行的功能,這些事件可以用來初始化你的應(yīng)用程序運(yùn)行所需要的數(shù)值,并在請(qǐng)求結(jié)束之后清除數(shù)據(jù)和其他的值。Begin 和EndRequest事件是網(wǎng)頁類所獨(dú)有的。一個(gè)網(wǎng)頁類可以在其生命進(jìn)程中接收多個(gè)請(qǐng)求。這些事件允許網(wǎng)頁類作為一個(gè)獨(dú)立的實(shí)體去處理每一個(gè)請(qǐng)求。Start事件一般在事件BeginRequest第一次應(yīng)用被激活時(shí)發(fā)生,Terminate事件將告訴運(yùn)行時(shí)間DLL(動(dòng)態(tài)鏈接庫)去清除網(wǎng)頁類的初始值。

注意:如果網(wǎng)頁類的StateManagement屬性被設(shè)置為wcNoState,網(wǎng)頁類將在其每次送一個(gè)響應(yīng)給瀏覽器時(shí)激活Terminate事件。如果網(wǎng)頁類的StateManagement屬性被設(shè)置為wcRetainInstance,網(wǎng)頁類僅僅在其調(diào)用ReleaseInstance方法以后激活Terminate事件。從我的經(jīng)驗(yàn)來說,你將在大部分情況下運(yùn)行于后一種模式。

網(wǎng)頁類包括一些什么呢?

網(wǎng)頁類包括一個(gè)或多個(gè)WebItems,它們可以是如下兩種東西的一種:

模板(HTML模板文件)——與你的網(wǎng)頁類相關(guān)的一個(gè)HTML文件,該網(wǎng)頁類通常包含特殊的標(biāo)簽,數(shù)據(jù)可以在網(wǎng)頁類中通過VB代碼進(jìn)行定制。

Custom WebItems。你建立的Custom WebItems并不與一個(gè)HTML頁面相關(guān),而是被用來產(chǎn)生對(duì)于瀏覽器的一般性響應(yīng)。你也可以在這里建立一個(gè)定制事件,以便當(dāng)頁面下載或用戶選擇了HTML元素時(shí)調(diào)用它(例如,你可以通過你的事件去完成諸如在頁面上增添一個(gè)標(biāo)準(zhǔn)的頁眉、從數(shù)據(jù)庫中讀取數(shù)據(jù)這一類的工作)。

網(wǎng)頁類事件
一個(gè)網(wǎng)頁類可以擁有三種不同類型的事件:

標(biāo)準(zhǔn)網(wǎng)頁類事件。這些事件被包裝在針對(duì)每個(gè)WebItem的網(wǎng)頁類中。當(dāng)被用戶的請(qǐng)求激活時(shí)(例如點(diǎn)擊超鏈接),Respond事件將設(shè)定用戶的缺省操作——如果沒有事件句柄與這個(gè)操作相關(guān),那么響應(yīng)事件將被激活。ProcessTag事件處理模板文件中特定的標(biāo)簽并且將其內(nèi)容用你指定的數(shù)據(jù)替代。UserEvent事件處理在運(yùn)行時(shí)間創(chuàng)建的網(wǎng)頁類事件。

模板事件。這些事件被HTTP請(qǐng)求激活(例如,超鏈接,圖象,確認(rèn)按鈕)。網(wǎng)頁類設(shè)計(jì)器分析了所有的HTML模板并找到產(chǎn)生HTTP請(qǐng)求的標(biāo)簽并顯示它們,從而你可以針對(duì)這些編寫模板事件代碼。

客戶WebItem事件。開發(fā)者編寫這些事件用于與之相關(guān)的WebItems,非常類似于你在VB中編寫的事件。

有用的屬性和方法

下面是你在應(yīng)用中所需要的最普通的屬性和方法:

UrlFor是網(wǎng)頁類在瀏覽器需要調(diào)用一個(gè)特定的模板或WebItem時(shí)用來指定URL的方法。你可以傳給它一個(gè)模板或WebItem的名字或者一個(gè)可選的事件名來代表將被激活的一個(gè)用戶事件。

UrlData主要用來存儲(chǔ)狀態(tài)信息。該數(shù)據(jù)被附加在UrlFor URL的后面,并在可以檢索。WriteTemplate方法能夠處理模板并能夠處理HTML文件中的標(biāo)簽(如果存在的話)。

你可以使用網(wǎng)頁類的NextItem屬性來移動(dòng)處理不同的Webitem。這可能會(huì)激活Respond事件,因?yàn)槟阏{(diào)用了Webitem,在那里你(非常可能)希望調(diào)用WriteTemplate來處理模板中的標(biāo)簽。

狀態(tài)管理

當(dāng)我們使用網(wǎng)頁類的時(shí)候如何進(jìn)行狀態(tài)管理呢?

這里有幾種途徑你可以用來存儲(chǔ)針對(duì)網(wǎng)頁應(yīng)用的狀態(tài):

使用服務(wù)器端網(wǎng)頁類對(duì)象或其他對(duì)象來保存客戶請(qǐng)求之間的狀態(tài)信息。

使用數(shù)據(jù)庫來保存請(qǐng)求之間的狀態(tài)信息。

對(duì)于每一個(gè)請(qǐng)求,你可以利用cookies ,URLData屬性或者隱含的HTML字段將狀態(tài)信息在服務(wù)器和瀏覽器之間進(jìn)行移動(dòng)。

你也可以將這幾種方法結(jié)合起來進(jìn)行使用。很重要的一點(diǎn)是,你需要注意我上面描述過的網(wǎng)頁類的StateManagement屬性。

一個(gè)簡(jiǎn)單的網(wǎng)頁類實(shí)例

是不是覺得這是不可思議的?這里有一個(gè)小的例子,可以帶你走向正確的方向——解釋起來可能有些投機(jī)的成分,但實(shí)際上十分容易編程。

這個(gè)小的應(yīng)用是用來輸出在HTML表格中所有的服務(wù)器變量,因此它是十分基礎(chǔ)的。為了建立它,你需要如下的工具:

      Visual Basic 6.0

      IIS 3.0(或以上版本)或Personal Web Server 3.0(或以上版本)

      HTML 編輯器

      標(biāo)準(zhǔn)的瀏覽器

1.使用合適的HTML編輯器創(chuàng)建一個(gè)HTML的模板。為了動(dòng)態(tài)地插入數(shù)據(jù)例如表格或者任一HTML,你可以通過VB代碼簡(jiǎn)單地將標(biāo)簽放置于你HTML文件中需要插入數(shù)據(jù)的地方并在標(biāo)簽前面加上WC@(注意:你可以在網(wǎng)頁類中改變這個(gè)標(biāo)簽頭):

<WC@ServerVars>Server vars table goes here</WC@ServerVars>

以下是用于這個(gè)例子的HTML文件:

<html>

<head>

<title>WebClasses Server Variables Example</title>

</head>

<body bgcolor="#c1a27d">

<center><H3>Server Variables</H3></center>

<p align="center"><WC@SERVERVARS>Insert

Server vars table Here</WC@SERVERVARS></p>

</body>

</html>

下面在你的網(wǎng)頁類中你可以針對(duì)你實(shí)際的表格來編寫代碼代替這個(gè)標(biāo)簽。

2.啟動(dòng)新的IIS應(yīng)用并將你的項(xiàng)目命名為WCExample。

3.將你的網(wǎng)頁類命名為“clsExample”并將你的NameInUrl屬性置為“default(缺?。?#8221;(這將是你的應(yīng)用的起始頁,即產(chǎn)生的ASP頁用來駐留你的網(wǎng)頁類)。注意:關(guān)于網(wǎng)頁類設(shè)計(jì)器的更多的信息請(qǐng)參見VB6的幫助文件。

4.保存你的項(xiàng)目。

5.將你的HTML模板加入到你的網(wǎng)頁類設(shè)計(jì)器中??梢酝ㄟ^右鍵單擊設(shè)計(jì)器中的類名或網(wǎng)頁圖標(biāo)來進(jìn)行實(shí)現(xiàn)。將模板改名為ServerVars。

6.刪除WebClass_Start()中的代碼并將其替換為

Set WebClass.NextItem = WebClass.ServerVars

這將告訴網(wǎng)頁類通過ServerVars模板啟動(dòng)應(yīng)用。

在ServerVars_Respond()事件中插入如下的代碼:

ServerVars.WriteTemplate

這將告訴網(wǎng)頁類輸出模板并用合適的輸出來代替標(biāo)簽。

7.為了動(dòng)態(tài)地產(chǎn)生服務(wù)器變量表,現(xiàn)在你需要將代碼放置于服務(wù)器的serverVars_ProcessTag事件中。這個(gè)事件將得到上述參數(shù),并通過填寫TagContents參數(shù)來產(chǎn)生“TagContents”。

TagName代表HTML模板中標(biāo)簽的全名。

TagContents是HTML中你準(zhǔn)備用來代替TagName的內(nèi)容。

SendTags是一個(gè)布爾操作符用來允許,它使你能夠決定是否將XML標(biāo)志作為HTML頁的一部分送到客戶端。該參數(shù)缺省設(shè)置為False,但你應(yīng)當(dāng)設(shè)置這個(gè)屬性為True以便于調(diào)試應(yīng)用程序。

8.將如下的代碼拷貝到ServerVars_ProcessTag 事件中:

CDim name As Variant

Select Case TagName

        Case "WC@ServerVars"

         TagContents = "<TABLE BORDER=1>"

         TagContents = TagContents & "<TR><TD><b>Server Variables:</b></TD>"

         TagContents = TagContents & "<TD><b>Value</b></TD></TR>"

         For Each name In Request.ServerVariables

           TagContents = TagContents & "<TR><TD>" & name & "</TD>"

           TagContents = TagContents & "<TD>" & Request.ServerVariables(name)         

           TagContents = TagContents & "</TD></TR>"

         Next

         TagContents = TagContents & "</TABLE>"

        Case Else

         ‘no other tags

         TagContents = "No tags found"

End Select

這個(gè)例子將顯示ASP請(qǐng)求對(duì)象在小站點(diǎn)的使用。

9.編譯你的動(dòng)態(tài)鏈接庫。你需要注意產(chǎn)生的ASP頁(用你的NameInUrl 屬性來命名),并且你的項(xiàng)目DDL現(xiàn)在存在于你的項(xiàng)目目錄下。當(dāng)應(yīng)用程序第一次運(yùn)行時(shí),網(wǎng)頁類的運(yùn)行時(shí)刻組件(MSWCRUN.DLL)將被創(chuàng)建,并且在你的網(wǎng)頁類的生命周期中啟動(dòng)這個(gè)事件。

10.在服務(wù)器上使用你的別名將瀏覽器指向你的ASP頁,并且你將看到如下這類東西:

 

現(xiàn)在僅僅是個(gè)簡(jiǎn)單的例子,但希望它能給你一些在創(chuàng)建IIS應(yīng)用方面的啟迪。

總結(jié)

和其他許多新技術(shù)一樣,網(wǎng)頁類這種方法需要一些時(shí)間來進(jìn)行改善。這也許是一種帶有偏見的觀點(diǎn),但我現(xiàn)在更傾向于結(jié)合使用ASP和VB。之所以做出這種選擇,是因?yàn)橐环矫嬖谶@種結(jié)合的環(huán)境中我自我感覺良好,另一方面,我不敢確信制作服務(wù)器端的DDL使用其他選擇永遠(yuǎn)是最佳的(盡管使用HTML模板確實(shí)在某些情況下也不是很好)。

但是對(duì)于那些不希望借助原始工具進(jìn)行編程的人們來說,網(wǎng)頁類確實(shí)是一種十分適合的非常好的開發(fā)手段。

作者: Matthew Gray

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多