分享
 
 
 

用VB将ASP代码封装成DLL

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

摘 要 主要介绍用VB将ASP代码封装成DLL以保护 ASP代码和加快ASP代码的执行速度、节省服务器的资源

关键词 ASP,DLL,编程

一、 引言

Server端的脚本运行环境,它简单易用,不需要编译和连接,脚本可以在 Server端直接运行,并且它支持多用户、多线程,在 Web开发中得到了广泛的应用。服务器端的组件有别于客户端的组件。客户端的组件是通过网络传输,依靠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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有