一、引言
Server端的脚本运行环境,它简单易用,不需要编译和连接,脚本可以在 Server端直接运行,并且它支持多用户、多线程,在 Web开发中得到了广泛的应用。服务器端的组件有别于客户端的组件。客户端的组件是通过网络传输,依靠HTML来起作用,而且只能在IE上有用。但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作。因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器。但是,因为 ASP脚本是纯文本格式,所以恶意者通过源代码可以很容易地看到原本不该看到的页面内容。因此,保护ASP源代码显得非常重要。将ASP代码封装成DLL,不仅加快了ASP代码的执行速度,而且也能保护原代码。当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到标签之间的代码,并且执行它(也可以是之间的代码)。如果这个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 cwinntsystem32article.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=texthtml; charset=gb2312 & vbCrLf Response.Write title文章管理系统-CSSTUDIOtitle & 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.aspid= Response.Write rs(ArticleID) Response.Write & vbCrLf Response.Write Response.Write rs(标题) Response.Write atd & 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=texthtml; charset=gb2312 title文章管理系统-CSSTUDIOtitle 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 RowsRs.PageSize % table width=100% border=0 cellspacing=0 cellpadding=0 tr td width=747 height=20☆a href=view.aspid=% = rs(ArticleID) % % =rs(标题) %atd 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中的很多控件。让我们用组件来扩展我们的程序的功能吧!也希望多多的看到我们中国人的组件。但愿本文能起到抛砖引玉的作用。
作者:csbq
没有相关教程
|