亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

使用VB創建ASP服務器端組件

2024-05-04 11:06:30
字體:
來源:轉載
供稿:網友
使用vb創建asp服務器端組件
 
本篇文章通過與傳統的設計方法相比較,介紹了如何在asp代碼中調用vb組件的方法。在本篇文章中,我們假設讀者具有vb和asp的相關入門知識。

服務器端組件和客戶端組件的比較

服務器端組件和客戶端組件有許多不同之處。服務器端組件是在計算機服務器上注冊的dll文件,客戶端組件則在瀏覽器運行的計算機上注冊,在ie中,這些客戶端組件被稱作activex瀏覽器插件組件。

activex客戶端組件可以使用vb編寫,并通過互聯網或內聯網發送給瀏覽器,生成很精彩的效果。問題是,activex客戶端組件只限于ie,而使用vb編寫的服務器端組件則能夠產生純html代碼,適用于所有的瀏覽器。服務器端組件的最大問題是該組件必須在windows+iis環境中或與iis的api兼容的應用中運行。相比較而言,在服務器端實現這種兼容性似乎更容易一些。

iis服務器端組件駐留在與iis相同的內存空間中,并隨時準備服務器上處理的asp網頁的調用。從理論上說,我們可以在返回瀏覽器的asp代碼中插入任何文本或代碼,但一般來說,大多數服務器端組件被用來處理需要大量時間的計算或數據庫信息查找,然后將所得到的結果以html代碼的形勢返回給瀏覽器。

vb組件的解析

由于本篇文章旨在討論編寫vb組件的基本方法,因此在能夠說明問題的情況下,其中的例子將是十分簡單的。在詳細討論編寫vb組件之前,我們將首先從概念上對vb組件作一番剖析。

在使用vb編寫服務器端的組件時,有三個分層次的概念(在vb和asp代碼中都會用到)需要注意:

·project名字

·class名字

·method名字

vb工程的名字就是project名字。許多開發人員都將project名字看作是組件名字,但vb只將它看作是工程的名字。在我們的例子中,project名字是exampleproject,當然了,我們可以隨意命名自己的工程名字;class名字名字是exampleclass,method名字是examplemethod。

工程名字(組件名字)也可以是由組件代碼編譯后得到的dll文件的名字,該dll文件將包含有被iis用來向瀏覽器返回文本或html代碼的經過編譯的vb代碼。

方法名字指的是管理特定代碼功能的vb代碼部分,例如計算日期或顯示數據庫中所有作者的清單。組件方法有點角個黑盒子,它完成特定的工作或根據輸入的信息返回特定的信息。一般情況下,在一個組件中可以有多個方法。為了更有效地管理組件的方法,可以將方法按照相似的分類組合在一起,這就是組件類的作用。

組件類能夠在內存中生成組件類代碼的一個拷貝,在使用asp代碼創建對象時,它也被稱作對象,這就是實例化。一旦有了組件類代碼實例的對象引用,我們就可以從asp代碼中調用類中包含的方法。

在我們的例子中,工程、類、方法的名字將用來在asp代碼中實例化vb組件,并以方法參數的形式從asp代碼中向vb代碼傳送值,在asp代碼中接收從vb方法中返回的值。

從asp文件中調用vb組件

我們用來調用vb組件的asp文件將使用對象變量保存vb對象的引用。在asp文件中,可以使用asp server對象的createobject()方法創建一個對象,該方法將返回一個它創建的對象的引用。在例子中,我們將使用objreference作為組件的對象變量。下面的代碼顯示asp代碼在實例化vb組件時需要使用組件的工程名和類名(exampleproject和exampleclass)。

實例化vb組件的asp代碼:

set objreference = server.createobject("exampleproject.exampleclass")


vb組件將從asp代碼中接受3個變量的值,并向asp代碼返回一個值,該值將存儲在名字為strmethodreturn的asp變量中。下面的代碼顯示出asp代碼是如何得到由vb組件返回的值的,它向vb方法傳送三個名字分別為param1、param2和parma3的三個參數值:

strmethodreturn = objreference.examplemethod(param1, param2, param3)

param1、param2、param3這三個參數必須與vb組件中方法的定義完全相同,下面是二行實例化vb組件的類、并調用類的方法獲得返回值的asp代碼的例子:


set objreference = server.createobject("exampleproject.exampleclass")
strmethodreturn = objreference.examplemethod(param1, param2, param3)



下面的圖表直觀地顯示了vb組件的工程、類和方法名字是如何與asp文件中的組件實例化代碼協調的。在逐步地學習如何編寫例子中的vb代碼和asp文件時,可以將下面的圖表作為參考。





vb方法的作用

我們例子中簡單的vb組件將獲得用戶的名字和年齡,然后返回一個以天計的用戶的年齡,而且有一個可選項,能夠提醒某個用戶是否已經超過了45歲。

如果我們向組件傳送一個虛構的eric clapton作為方法的第一個參數值,將第二個參數設置為56,我們將得到下面的返回字符串:

eric clapton is over 20440 days old.

如果我們將可選的第三個參數設置為true(這一參數將使方法判斷用戶是否已經超過45歲),我們將會得到下面的返回字符串:

eric clapton is over 20440 days old.

由于使用了三個完全不同的變量━━用戶的姓名、年齡以及表示他們是否超過了45歲,因此我們需要使用三個方法參數將這些信息從asp文件傳送給vb代碼。在vb中,考慮要使用哪些數據類型是十分重要的。我們將使用一個名字為strname的字符串型變量表示用戶的姓名,名字為intage的整型變量表示用戶的年齡,名字為blnageemphasison的布爾型變量表明用戶是否已經超過了45歲。

三個方法參數(傳送給vb組件的方法代碼的變量):

strname (string)
intage (integer)
blnageemphasison (boolean)


在vb中創建服務器端組件

啟動vb后,在“新工程”窗口中雙擊“activex dll”圖標。一旦vb加載了新的activex dll工程,至少會看到二個打開的窗口:工程窗口和屬性窗口。如果有一個窗口顯示不出來,可以從vb的菜單中選擇“查看”菜單項(分別使用“查看”->“工程管理器”、“查看”->“屬性窗口”)。

由于vb對第一個工程和類的缺省命名分別是project1、class1,我們可以將它們分別改為exampleproject 和exampleclass。工程名字的修改可以在工程窗口中進行。在工程窗口中新輸入的工程名字左側有一個帶有+或-的小方框。如果顯示的是+號,選擇該小方框,+號就會變成-號,缺省的類名(class1)就會顯示在工程名字的下面。在工程窗口中選擇缺省的類名,在屬性窗口中將缺省的類名修改為exampleclass。

在保存工程時,vb會將包含類的代碼保存在一個擴展名為cls的文件,工程文件的擴展名為vbp,其中存儲有工程的各種設置、文件名和文件存儲的位置。

服務器端組件的屬性值

在屬性窗口中顯示exampleclass類的屬性,注意instancing屬性的值為“5 multiuse”,如果將工程的類型設置為標準的exe工程,該屬性的值就會隨之發生改變。

在vb的菜單中選擇“工程”->“exampleproject屬性”,就會顯示出工程屬性窗口。在“常規”標簽的右下端的“線程模式”屬性的值應當被設置為“單元線程”,這將使多個訪問者能夠同時使用我們的組件類的不同的實例。另外,選擇“無人值守執行”和“駐留內存”二個選項,避免vb6中的內存泄露問題。

vb方法的代碼

現在我們就需要使用vb的代碼窗口來輸入vb代碼了。如果代碼窗口還是一片空白,那就輸入下面的代碼好了:

option explicit
'它將要求我們必須定義所有的變量。

public function examplemethod(byval strname as string, _
byval intage as integer, _
optional byval blnageemphasison as boolean = false) as string




在上面的代碼中,我們將方法定義成了一個public函數,這意味著該組件之外的任何代碼都能夠調用它,由于是一個函數,它還會向調用它的代碼返回一個值。

public function examplemethod() as string


上面的代碼表示examplemethod()函數將向它的調用者返回一個字符串類型的值。

我們的vb方法帶有3個從asp代碼接受值的參數變量,最后一個參數變量是可選的。所有用來從vb組件之外接收值的參數變量都需要在vb方法的括號間定義和使用,我們可以象在方法內定義的變量那樣使用以這種方式定義為方法參數的變量,二者之間唯一的區別是外面的asp代碼來決定它們的值。

下面是三個變量和它們的數據類型:


byval strname as string
byval intage as integer
optional byval blnageemphasison as boolean = false



上面的代碼定義了三個方法參數的數據類型,指明它們是按值傳送的,而且第三個參數是可選的,如果沒有第三個參數,則其缺省值為false。

然后,我們將在方法的定義中添加一些必要的逗號、空格和底劃線(_),這樣才能符合vb的語法要求。我們將把參數列表放在方法定義的括號中間,得到的方法定義如下:

public function examplemethod(byval strname as string, _
byval intage as integer, _
optional byval blnageemphasison as boolean = false) as string



在vb的代碼窗口輸入上面的方法定義,就會生成一個end function語句。方法的定義和end function之間就是我們編寫自己的代碼的地方了。

我們在方法的主體中添加的第一行代碼就是定義一個字符串變量,用來存儲該方法返回的字符串數據。我們可以不使用字符串變量而使用字符串向調用方法的代碼返回文本數據。

dim strreturnstring as string
下面我們就可以來建立返回的字符串了。我們可以通過方法的參數列表使用由asp代碼傳送的strname變量值。首先將strname參數變量值與字符串“is over”連接起來。接下來我們將使用intage參數變量計算一個已經生存的天數,然后在前面的字符串上再添加“age in days”字符串。需要注意的是,我們需要將intage * 365二個整型數的乘積轉換為字符串,然后才能將它組合在strreturnstring字符串,vb中的cstr()方法可以實現這一目的。

strreturnstring = strname & " is over " & cstr(intage * 365)


如果假設從asp代碼中傳給組件的姓名為eric clapton,年齡參數為56,因此,strreturnstring應當包含下面的內容:

eric clapton is over 20440

我們最終的字符串會根據intage變量的值是否超過45和blnageemphasison變量是否設置為true再添加上

“days old”或“days old”。下面的代碼可以實現該功能:

if blnageemphasison and intage > 44 then
strreturnstring = strreturnstring & " days old."
else
strreturnstring = strreturnstring & " days old."
end if


如果asp代碼沒有將blnageemphasison變量的值作為方法參數傳送給組件,根據我們的方法定義,它的值將被缺省地設置為false。如果它被設置為true,而且intage變量的值大于45,我們將得到下面的輸出:

eric clapton is over 20440 days old.

否則,我們會得到下面的輸出:

eric clapton is over 20440 days old.

為了將上面的字符串返回給調用組件的asp代碼,我們將字符串的值賦給方法的名字:

examplemethod = strreturnstring


完整的方法代碼如下所示:

public function examplemethod(byval strname as string, _
byval intage as integer, _
optional byval blnageemphasison as boolean = false) as string

'///// 建立局部變量
dim strreturnstring as string

'///// 創建返回的變量的值
strreturnstring = strname & " is over " & cstr(intage * 365)

'///// 完善strreturnstring
if blnageemphasison and intage > 44 then
strreturnstring = strreturnstring & " days old."
else
strreturnstring = strreturnstring & " days old."
end if

'///// 返回字符串
examplemethod = strreturnstring

end function


在asp代碼中調用vb方法

在asp代碼中實例化vb對象

我們需要的大部分asp代碼已經在前面的a conceptual overview進行了討論。在asp代碼中,我們仍然需要依次完成下面的工作:

·使用asp server對象的createobject()方法實例化vb組件。

·使用合適的方法參數變量調用組件的方法。

·將從vb方法中返回的字符串值賦給asp變量中的一個變量。

·然后在response.write()方法中使用該變量將字符串發送給瀏覽器。

我們將使用asp文件中的一些代碼對vb組件的類進行實例化,下面是vb組件實例化的代碼:

set objreference = server.createobject("exampleproject.exampleclass")


asp server對象的createobject()方法返回vb代碼對象的地址,因此我們能夠在asp中調用類的任何一個public方法。需要注意的是,作為asp createobject()方法的方法參數的是vb工程和類的名字,objreference用來保持組件的類的對象實例的引用。

在asp文件中使用組件的方法

現在,我們就可以使用組件的類方法examplemethod,得到一個表明一個人以天計的壽命。下面的代碼使用參數的值,并將從方法中返回的字符串的值賦給一個名字為strmethodreturn的變量:

strmethodreturn = objreference.examplemethod("eric clapton", 56, true)


提示:當我們的組件被實例化后,objreference就表示createobject()方法中出現過的exampleproject.exampleclass。盡管我們可以將objreference.examplemethod看作與exampleproject.exampleclass.examplemethod()等同,但我們不能這樣使用。

當然了,我們也可以使用變量而不是直接的值作為方法的參數,選擇的參數變量的名字無須與vb方法參數表中的相同,它們只要與參數表中的非可選參數個數、類型、順序相同就可以了。



aspname = "eric clapton" aspage = 56 aspemphasis = true strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)


使用變量取代值使代碼顯得更清晰,也更具有可管理性,尤其是代碼變得很長時。

現在我們只要在asp response.write()方法中將strmethodreturn返回給訪問asp代碼的瀏覽器即可。下面是完整的asp代碼,在代碼的結束處,我們添加了一行分離組件對象地址的代碼,以清除組件的對象代碼:



<%
'///// 實例化組件對象
set objreference = server.createobject("exampleproject.exampleclass")

'///// 設置作為方法參數的局部變量
aspname = "eric clapton"
aspage = 56
aspemphasis = true

'///// 調用組件的方法,存儲返回值
strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)

'///// 將返回值發送給訪問的瀏覽器
response.write(strmethodreturn)

'///// 清除組件的對象
set objreference = nothing
%>


將上面的asp代碼存儲在一個asp文件中,將會產生下面的字符串輸出:

eric clapton is over 20440 days old.

使asp代碼能夠調用dll文件

對我們的組件的測試就是讓windows知道它的存儲位置以及asp代碼何時調用它。首先,在vb的菜單中選擇“運行”圖標或“運行/開始”,vb就會臨時地向系統注冊該組件。

提示:不能象加載html文件那樣直接使用瀏覽器加載asp文件,asp文件必須通過web服務器被加載到瀏覽器上。

瀏覽器將顯示出“eric clapton is over 20440 days old.”的字樣。

為了使組件能夠在其他的服務器上運行,它必須被編譯成dll文件,然后在服務器上注冊。當然了,如果希望在開發用的計算機永久地使用該組件,也需要進行編譯、注冊。在其他計算機上運行該組件的唯一文件就是編譯得到的dll文件,當然了,這需要計算機已經安裝了vb運行時間庫文件。

如何編譯組件源代碼得到dll文件以及如何在計算機上注冊組件不是本篇文章的討論范圍,我們就不再詳細敘述了。

作為編寫iis服務器端組件的一個副產品,我們可以從任何asp文件和其他vb組件中調用編寫的組件的方法,這將進一步提高代碼的靈活性和模塊化程度。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费小视频| 美女精品视频一区| 日韩久久午夜影院| 视频在线观看99| 日韩毛片在线看| 国产精品久久久久久亚洲影视| 亚洲美女久久久| 色哟哟入口国产精品| 色噜噜狠狠狠综合曰曰曰88av| 久久男人的天堂| 精品久久香蕉国产线看观看亚洲| 久久精品久久久久电影| 97人人模人人爽人人喊中文字| 精品网站999www| 欧美在线激情视频| 午夜精品久久久久久久久久久久久| 操人视频在线观看欧美| 国产一区二中文字幕在线看| 日韩中文在线不卡| 欧美成人午夜影院| 中文字幕精品在线视频| 亚洲最新在线视频| 国内外成人免费激情在线视频| 国内伊人久久久久久网站视频| 亚洲激情久久久| 欧美精品生活片| 精品中文字幕在线2019| 日韩av片电影专区| 欧美综合在线第二页| 中文字幕欧美日韩在线| 91最新在线免费观看| 在线视频一区二区| 1769国内精品视频在线播放| 国内精品久久久久伊人av| 97热精品视频官网| 国产日本欧美一区二区三区| 欧美视频一区二区三区…| 亚洲天堂视频在线观看| 亚洲国产精品视频在线观看| 日韩免费在线观看视频| 日韩中文在线观看| 国产丝袜视频一区| 91精品国产自产在线观看永久| 日韩av在线影院| 欧美日韩综合视频| 精品国产成人av| 国产精品亚洲美女av网站| 欧美激情精品久久久久久蜜臀| 日本成人黄色片| 久久99精品视频一区97| 欧美精品一区二区三区国产精品| 这里只有精品在线观看| 日韩中文字幕久久| 中文字幕亚洲欧美日韩2019| 亚洲国产精品专区久久| 亚洲精品aⅴ中文字幕乱码| 亚洲第一精品久久忘忧草社区| 国产精品96久久久久久又黄又硬| 91精品综合久久久久久五月天| 国产精品久久在线观看| 欧美三级免费观看| 国产美女精彩久久| 国产一区二区三区在线观看视频| 久久久精品免费视频| 欧美日韩激情视频| 国产99久久精品一区二区 夜夜躁日日躁| 欧美性生交大片免费| 国产欧美一区二区三区在线看| 黄色成人在线免费| 日韩精品小视频| 97香蕉超级碰碰久久免费软件| 久久亚洲精品国产亚洲老地址| 亚洲日韩中文字幕在线播放| 亚洲欧美日韩久久久久久| 不卡在线观看电视剧完整版| 欧美日韩国产成人高清视频| 在线观看精品国产视频| 97色伦亚洲国产| 亚洲丁香婷深爱综合| 午夜精品久久久久久久久久久久久| 欧美极品在线播放| 久久国产精品久久精品| 国内精品一区二区三区四区| 国产精品视频大全| 久久久成人精品| 国产精品久久久久久av福利软件| 91中文在线视频| 51色欧美片视频在线观看| 国产精品电影一区| 国产欧美一区二区三区久久人妖| 亚洲免费小视频| 国产在线观看91精品一区| 91在线观看欧美日韩| 国产精品美女在线| 精品人伦一区二区三区蜜桃免费| 亚洲精品中文字幕有码专区| 97超级碰在线看视频免费在线看| 成人黄色免费在线观看| 欧美精品在线免费播放| 日韩av一区在线观看| 久久国产精品久久久久久久久久| 欧美极品第一页| 国产伦精品一区二区三区精品视频| 亚洲激情视频在线| 日韩中文字幕免费看| 亚洲精品国产成人| 久99九色视频在线观看| 91精品久久久久久久久久另类| 欧美激情va永久在线播放| 一区二区三区精品99久久| 欧美激情欧美激情在线五月| 欧美激情视频网站| 国产日韩欧美一二三区| 日韩美女免费观看| 日韩av在线影院| 亚洲国产天堂久久综合网| 久久精品影视伊人网| 久久在线视频在线| 疯狂做受xxxx高潮欧美日本| 日韩精品欧美激情| 亚洲精品日韩激情在线电影| 福利一区福利二区微拍刺激| 91丝袜美腿美女视频网站| 亚洲欧洲日产国码av系列天堂| 国产综合福利在线| 91精品国产沙发| 日韩在线视频免费观看高清中文| 久久成人综合视频| 性欧美亚洲xxxx乳在线观看| 久久偷看各类女兵18女厕嘘嘘| 亚洲一二三在线| 国产精品网红直播| 亚洲久久久久久久久久| 国产精品第三页| 大胆人体色综合| 日韩欧美aaa| 欧洲永久精品大片ww免费漫画| 亚洲老司机av| 日韩电影免费观看中文字幕| 91在线视频成人| 国产在线视频一区| 久久99国产精品久久久久久久久| 大桥未久av一区二区三区| 国产成人一区二| 国产精品入口免费视频一| 国产免费一区视频观看免费| 国产亚洲成av人片在线观看桃| 亚洲xxx大片| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩电影免费观看在线观看| 日韩毛片中文字幕| 久久理论片午夜琪琪电影网| 最新国产成人av网站网址麻豆| 亚洲精品aⅴ中文字幕乱码| 欧洲一区二区视频| 成人国产精品久久久| 欧美日韩国产综合新一区| 91香蕉亚洲精品| 亚洲欧美日韩另类| 久久精品国产精品| 日韩精品在线观看视频| 国产精品久久久久久五月尺| 色午夜这里只有精品| 国产精品青草久久久久福利99|