用VB編寫ActiveX DLL完成ASP編程
發(fā)表時(shí)間:2023-08-15 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]ASP是目前一種廣為應(yīng)用的用來快速構(gòu)建動(dòng)態(tài)WEB站點(diǎn)的編程語言,默認(rèn)的內(nèi)置開發(fā)語言是VBScript,由于ASP和微軟Windows系列操作系統(tǒng)的結(jié)合非常的好,使得ASP已經(jīng)成為了NT開發(fā)平臺(tái)上面進(jìn)...
ASP是目前一種廣為應(yīng)用的用來快速構(gòu)建動(dòng)態(tài)WEB站點(diǎn)的編程語言,默認(rèn)的內(nèi)置開發(fā)語言是VBScript,由于ASP和微軟Windows系列操作系統(tǒng)的結(jié)合非常的好,使得ASP已經(jīng)成為了NT開發(fā)平臺(tái)上面進(jìn)行WEB開發(fā)的首選語言和環(huán)境。他有著簡單易學(xué),方便快速開發(fā)的種種優(yōu)點(diǎn),但是他也有著致命的弱點(diǎn),就是他是腳本語言解釋執(zhí)行的,速度會(huì)受到一定的影響,更為關(guān)鍵的是,使用ASP來開發(fā)完成一個(gè)項(xiàng)目之后,整個(gè)項(xiàng)目在交付客戶使用的時(shí)候,是會(huì)連帶所有的ASP腳本源代碼的,也就無法將商業(yè)程序保密了,源代碼泄漏會(huì)給自己造成很大的損失,雖然微軟也相應(yīng)的推出了用來加密ASP程序的軟件,但是有著諸多的限制,以及會(huì)降低程序運(yùn)行的速度和二次開發(fā)調(diào)試的難度,難道ASP做出來的項(xiàng)目就真的要暴露所有的源代碼嗎?
當(dāng)然了,答案當(dāng)然是否定的,因?yàn)槭澜缟蠜]有絕對(duì)不可能的事情,接下來就跟隨我來看看如何利用VB的ActiveX DLL來實(shí)現(xiàn)將ASP程序封裝起來吧,也就是我們可以使用ActiveX DLL來完成所有ASP能完成的事情,而ActiveX DLL是編譯好的DLL文件,別人是無法得知你的源代碼的,也就保證的自己的商業(yè)機(jī)密和核心技術(shù),并且達(dá)到同樣的效果,使用完全封裝的ActiveX DLL會(huì)比完全適用ASP腳本語言的執(zhí)行速度要快很多,尤其是大運(yùn)算量的時(shí)候跟為明顯!經(jīng)過我們的具體測(cè)試,在操縱10000條數(shù)據(jù)庫記錄的時(shí)候,封裝成為ActiveX DLL的WEB應(yīng)用程序比純ASP代碼的應(yīng)用程序,速度上面要快大約21%左右,在目前國內(nèi)過于緩慢的網(wǎng)絡(luò)來講,速度就是一個(gè)WEB站點(diǎn)的很關(guān)鍵的一部分。并且采用了ActiveX DLL來開發(fā)WEB程序,要比單純使用ASP好得多,畢竟ASP只能使用VBScript來開發(fā),無法享用VB大量的優(yōu)點(diǎn),而ActiveX DLL則可以充分利用VB里面所有的特性。
下面我們先來看看什么是ActiveX DLL吧。ActiveX是微軟提出的廣泛應(yīng)用于Windows系列的一種代碼封裝技術(shù),提高了程序代碼的可重用性,加快了程序項(xiàng)目的開發(fā)速度,一般被稱為“組件”。在VB6的集成開發(fā)環(huán)境當(dāng)中,我們可以看到一下幾種ActiveX項(xiàng)目:
1、ActiveX EXE
這是在“過程外”運(yùn)行的ActiveX/COM服務(wù)器組件,也就是說他們運(yùn)行的過程和初始化組件的客戶機(jī)代碼不同。盡管可以用ASP訪問ActiveX EXE,但是不推薦改動(dòng)IIS元庫,該庫允許所有的可執(zhí)行文件由服務(wù)器上運(yùn)行的腳本代碼啟動(dòng)。
2、ActiveX OCXs
這些特殊的組件把主機(jī)應(yīng)用程序顯示和操作組件所需的附加支持包含在GUI環(huán)境中。還可以把OCX組件放在網(wǎng)頁當(dāng)中。但是,OCX是應(yīng)用程序界面,不可以使用ASP來創(chuàng)建的。
3、ActiveX文檔DLL和ActiveX文檔EXE
Active文檔可以在OLE文件箱應(yīng)用程序中,例如IE或者Office Binder,顯示VB表單。但他們?cè)贏SP不能應(yīng)用。
4、ActiveX DLLs
這些ActiveX/COM組件和初始化組件的客戶機(jī)在同一個(gè)進(jìn)程中運(yùn)行。而我們要討論的ActiveX DLL正是整個(gè)組件。一般微軟的附加組件和其他的一些第三方廠家提供的各種組件都是這種類型的ActiveX DLL,但是并不全是使用VB編寫的,同樣可以使用VC/JAVA等等語言來開發(fā)。
探討完了什么是ActiveX DLL,我們開始正式編寫我們自己的ActiveX DLL,以便來實(shí)現(xiàn)ASP中的同樣功能,眾所周知,ASP內(nèi)置了Response、Request、Server、Session、Application五個(gè)對(duì)象,其實(shí)這五個(gè)內(nèi)置對(duì)象正是IIS控制臺(tái)初始化的五個(gè)ActiveX DLL組件,既然IIS可以初始化這五個(gè)組件用于ASP中,我們當(dāng)然也可以直接在我們的ActiveX DLL中引用這些組件來實(shí)現(xiàn)我們的編程,也就是說我們可以在VB應(yīng)用程序中通過引用這些組件來實(shí)現(xiàn)訪問ASP內(nèi)置對(duì)象的功能。
只要你安裝了PWS4或者IIS4以上的WEB服務(wù)器,你就擁有了一個(gè)名稱叫做“Microsoft Active Server Pages Object”的對(duì)象庫,我們可以在VB的ActiveX DLL應(yīng)用中引用這個(gè)對(duì)象庫,通過引用這個(gè)對(duì)象庫,我們就獲得了一個(gè)對(duì)象(類):ScriptingContext,這個(gè)對(duì)象也正是我們整個(gè)文章探討的核心對(duì)象。對(duì)象庫內(nèi)的關(guān)系如下:
對(duì)象庫 類 類成員
ASPTypeLibrary ScriptingContext Application
Request
Response
Session
Server
通過上面的關(guān)系圖,我們就可以很容易理解類ScriptingContent。下面我們來看一個(gè)具體的例子吧:
1、 使用VB6創(chuàng)建一個(gè)新的ActiveX DLL項(xiàng)目
2、 引用“Microsoft Active Server Pages Object”對(duì)象庫。
3、 創(chuàng)建兩個(gè)組件事件:OnStartPage以及OnEndPage
4、 在事件OnStartPage中創(chuàng)建類ScriptingContent的一個(gè)引用。
5、 實(shí)例化類ScriptingContent。
Test.cls (類實(shí)現(xiàn))
'對(duì)象的聲明
Dim rp as Response
Dim rq as Request
Dim ap as Application
Dim sr as Server
Dim sn as Session
'當(dāng)組件被創(chuàng)建的時(shí)候會(huì)觸發(fā)這個(gè)事件
Public Sub OnStartPage(mysc as ScriptingContent)
'進(jìn)行對(duì)象的實(shí)例化
set rp=mysc.Response
set rq=mysc.Request
set sr=mysc.Server
set ap=mysc.Application
set sn=mysc.Session
rp.write "<br>ActiveX DLL組件已經(jīng)被創(chuàng)建了!<br>"
End Sub
'當(dāng)組件被銷毀的時(shí)候觸發(fā)這個(gè)事件
Public Sub OnEndPage()
Rp.write "<br>ActiveX DLL組件已經(jīng)被銷毀!<br>"
'銷毀對(duì)象
Set rp=nothing
Set rq=nothing
Set sr=nothing
Set ap=nothing
Set sn=nothing
End Sub
'定義我們自己的一個(gè)組件方法
Public Sub HelloWorld()
Rp.write "<H1>Hello,World!</H1>"
End Sub
這樣,我們就創(chuàng)建可以訪問ASP內(nèi)置對(duì)象的ActiveX DLL了。我們命名這個(gè)組件項(xiàng)目為first,在VB中間編譯這項(xiàng)目成為一個(gè)DLL文件first.dll,并且我們?cè)谙到y(tǒng)中注冊(cè)這個(gè)DLL文件。接下來,我們需要一個(gè)簡單的幾乎沒有什么代碼的ASP程序來調(diào)用這個(gè)組件:
test.asp
<html>
<head>
<title>測(cè)試ActiveX DLL</title>
</head>
<body>
<%
Dim testme
'創(chuàng)建我們剛才編譯成功的組件,一旦創(chuàng)建這個(gè)組件,同時(shí)會(huì)在葉面輸出文字“ActiveX DLL組件已經(jīng)被
'創(chuàng)建了!”
set testme=server.createobject("first.test")
'調(diào)用組件的方法
testme.HelloWorld
'注銷組件,在注銷的同時(shí),會(huì)自動(dòng)在葉面顯示“ActiveX DLL組件已經(jīng)被銷毀!”
set testme=nothing
%>
</body>
</html>
通過上面簡單的例子,我們可以看到使用ActiveX DLL同樣可以實(shí)現(xiàn)和ASP同樣的功能,并且?guī)淼拇a保密和程序運(yùn)行更加高效的優(yōu)點(diǎn)。ActiveX DLL和純ASP有著各自的優(yōu)點(diǎn)和缺點(diǎn),只要我們合理的運(yùn)用這兩種技術(shù),比如適當(dāng)?shù)膶⑸虡I(yè)邏輯封裝在ActiveX DLL中,或者在需要保密的地方使用DLL封裝技術(shù),一定可以編寫出高效快速的WEB應(yīng)用程序。