用VB將ASP代碼封裝成DLL
2024-05-04 11:06:14
供稿:網友
摘 要 主要介紹用vb將asp代碼封裝成dll以保護 asp代碼和加快asp代碼的執行速度、節省服務器的資源
關鍵詞 asp,dll,編程
一、引言
server端的腳本運行環境,它簡單易用,不需要編譯和連接,腳本可以在 server端直接運行,并且它支持多用戶、多線程,在 中得到了廣泛的應用。服務器端的組件有別于客戶端的組件。客戶端的組件是通過網絡傳輸,依靠html來起作用,而且只能在ie上有用。但是服務器端的組件是運行在服務器端,它在服務器上執行各種操作。因此,所有的瀏覽器都能享用,它依靠的是服務器而不是瀏覽器。但是,因為 asp腳本是純文本格式,所以惡意者通過源代碼可以很容易地看到原本不該看到的頁面內容。因此,保護asp源代碼顯得非常重要。將asp代碼封裝成dll,不僅加快了asp代碼的執行速度,而且也能保護原代碼。當iis被請求執行一個asp程序,它首先會在asp文件中找到<% %>標簽之間的代碼,并且執行它(也可以是<script runat=server></script>之間的代碼)。如果這個asp程序在先前被調用過,那么它就會用內存中的編譯過的程序來向用戶返回html代碼,如果沒有,那么它就重新編譯。這樣就大大節省了服務器的資源。
二、實現方法
啟動你的vb,選擇activex圖標。這個圖標可以在新建工程找到!vb會提供一個默認的工程名(project1)和類名(class1)。在動手之前請首先確認我們擁有microsoft activex data object 2.0 library,它在我們的程序非常有用。從菜單中選擇"工程",然后在其中選擇"引用",就會出現"引用"窗口從中選擇microsoft activex data object 2.0 library。
現在我們有了我們自己的工程(project1)和類名(class1)。以后我們就會在asp代碼中使用它們的名字來引用這個組件。在asp中我們就這樣引用,如下:
set objreference = server.createobject("projectname.classname")
為了在類中使用asp的方法,你必須在此類中寫上初始和終止這兩個函數。輸入如下代碼:程序清單中class1.cls中的private sub class_initialize()和private sub class_terminate()。
將asp代碼中的關鍵功能制作成動態鏈接庫(.dll),部分隱藏 asp源代碼。 例如:程序清單中的global.bas和class1.cls中輸入的代碼(代碼的主要功能是檢索數據庫中的記錄并顯示出來)。
在vb的下拉菜單中選擇文件→生成article.dll→選擇要保存的目錄。找到article.dll將其復制到系統盤system32文件夾中,最后一步注冊dll文件。在開始菜單中選擇運行輸入regsvr32 c:/winnt/system32/article.dll。
三、程序清單
global.bas中的代碼:
public objcontext as objectcontext
public application as asptypelibrary.application
public server as asptypelibrary.server
public session as asptypelibrary.session
public response as asptypelibrary.response
public request as asptypelibrary.request
class1.cls中的代碼:
private sub class_initialize()
on error resume next
set objcontext = getobjectcontext
set application = objcontext.item("application")
set server = objcontext.item("server")
set session = objcontext.item("session")
set request = objcontext.item("request")
set response = objcontext.item("response")
end sub
private sub class_terminate()
on error resume next
set application = nothing
set server = nothing
set session = nothing
set request = nothing
set response = nothing
set objcontext = nothing
end sub
public sub aspclassinit()
on error goto err
set conn = server.createobject("adodb.connection")
strcon = "provider=microsoft.jet.oledb.4.0;" & _
"data source=" & server.mappath("article.mdb")
conn.open strcon
set rs = server.createobject("adodb.recordset")
sql = "select * from article order by articleid desc"
rs.open sql, conn, 1, 1
response.write "<html>" & vbcrlf
response.write "<head>" & vbcrlf
response.write "<meta http-equiv=""content-type"" content=""text/html; charset=gb2312"">" & vbcrlf
response.write "<title>文章管理系統-csstudio</title>" & vbcrlf
response.write "</head>" & vbcrlf
response.write "<body bgcolor=""#ffffff"" topmargin=""0"">" & vbcrlf
response.write "<table width=""100%"" border=""0"" cellpadding=""2"" cellspacing=""0"">" & vbcrlf
response.write " <tr>" & vbcrlf
response.write " <td width=""742"" height=""20"">文章標題</td>" & vbcrlf
response.write " <td width=""90"">點擊</td>" & vbcrlf
response.write " <td width=""145"">添加日期</td>" & vbcrlf
response.write " </tr>" & vbcrlf
response.write "</table>" & vbcrlf
while not rs.eof and rows < rs.pagesize
response.write "<table width=""100%"" border=""0"" cellspacing=""0"" cellpadding=""0"">" & vbcrlf
response.write " <tr>" & vbcrlf
response.write " <td width=""747"" height=""20"">☆<a href=""view.asp?id="
response.write rs("articleid")
response.write """>" & vbcrlf
|||response.write " "
response.write rs("標題")
response.write "</a></td>" & vbcrlf
response.write " <td width=""94"">"
response.write rs("點擊")
response.write "</td>" & vbcrlf
response.write " <td width=""148"">"
response.write rs("添加日期")
response.write "</td>" & vbcrlf
response.write " </tr>" & vbcrlf
response.write "</table>" & vbcrlf
rs.movenext
wend
response.write "</body>" & vbcrlf
response.write "</html>" & vbcrlf
rs.close
set rs = nothing
conn.close
set conn = nothing
exit sub
err:
if err.number = -13572468 then exit sub
resume next
end sub
使用article.dll后的index.asp中的代碼:
<%dim asptransbuilderobject
set asptransbuilderobject = server.createobject("article.class1")
asptransbuilderobject.aspclassinit
set asptransbuilderobject = nothing%>
使用article.dll前的index.asp中的代碼:
<% set conn=server.createobject("adodb.connection")
strcon = "provider=microsoft.jet.oledb.4.0;" & _
"data source=" & server.mappath("article.mdb")
conn.open strcon %>
<% set rs = server.createobject ("adodb.recordset")
sql="select * from article order by articleid desc"
rs.open sql, conn,1,1 %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>文章管理系統-csstudio</title>
</head>
<body bgcolor="#ffffff" topmargin="0">
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td width="742" height="20">文章標題</td>
<td width="90">點擊</td>
<td width="145">添加日期</td>
</tr>
</table>
<% while not rs.eof and rows<rs.pagesize %>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="747" height="20">☆<a href="view.asp?id=<% = rs("articleid") %>">
<% =rs("標題") %></a></td>
<td width="94"><% = rs("點擊") %></td>
<td width="148"><% = rs("添加日期") %></td>
</tr>
</table>
<% rs.movenext
wend %>
</body>
</html>
<% rs.close
set rs=nothing
conn.close
set conn=nothing %>
四、結論
因為這些代碼是在服務器端運行的,所以客戶端不需要安裝任何東西。這僅僅是用activex dll所能實現的功能的小小的例子。你們可以寫好自己的更大的組件,而且還可以用vb中的很多控件。讓我們用組件來擴展我們的程序的功能吧!也希望多多的看到我們中國人的組件。但愿本文能起到拋磚引玉的作用。
參考文獻
1.david buser,john kauffman等. asp 3初級編程.北京:機械工業出版社,2001
2.richard anderson chris blexrud等. asp 3高級編程. 北京:機械工業出版社,2000
3.alex homer. asp3.0專業web技術.北京:人民郵電出版社,2000