文章收藏-FAQ 位置:电脑学习网

使用 VB 将 ASP 代码封装生成 DLL 文件

  一、引言

  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 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中的很多控件。让我们用组件来扩展我们的程序的功能吧!也希望多多的看到我们中国人的组件。但愿本文能起到抛砖引玉的作用。

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822