[转]ASP代码封装成DLL


服务器端组件

首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服 务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器.  

当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到<%%>标签之间的代码,并且执行它(也可以是<script runat=server></script>之间的代码).如果这个ASP程序在先前被调用过,那么它就会用 内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译.这里ASP就比CGI多一点速度优势,因为CGI 是每一个请求都使用一个线程.这样就大大消耗了服务器的资源.

想不想你写的程序自己就能在IIS运行!?!现在你就行了!使用VB5(当然现在是VB6了),你就能建立Dynamic Linked Libraries(DLL文件),它能在IIS上直接运行(如果有asp文件来请求的话).  

系统和软件的要求

你需要一个32位的操作系统来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows 95+PWS+VB 5的环境下开发的.

我们开始吧

启动你的VB,选择ActiveX图标.这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名( class1).我们会将这两个名字都改掉.在改名之前,请首先确认我们拥有Microsoft Active Server Pages ObjectLibrary,它在我们的程序非常有用.从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗 口
从中选择Microsoft Active Server Pages ObjectLibrary.

给工程和类命名

现在我们来根据自己的爱好来为project1和class1来命名吧!给它们命名也是很重要的,我们以后会用这个工程名和类名 来创建这个组件的实例!后面详细介绍.

如何改名,我就不想多说了!
我们的工程名改为Exmaple,类名为Helloword

怎样使用工程和类

现在我们有了我们自己的工程(Example1)和类名(Hello
World).以后我们就会在ASP代码中使用它们的名字来 引用这个组件.在ASP中我们就这样引用,如下:

Set ObjReference=Server.CreateObject("ProjectName.ClassName")

对于我们工程的引用就是:
SetObjReference=Server.CreateObject("Example1.HelloWorld")
现在我们就能用ObjReference来调用我们在组件中所创建的函数,子程序.下面我们会来写一个SayHello的子程序 ,我们执行它的代码如下:

<%
Set ObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

为了在Helloword类中使用ASP的方法,你必须在此类中写一个OnStartPage
子函数.如下:

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
  Set MyScriptingContext=PassedScriptingContext
EndSub

现在,无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们 使用.这个ScriptingContext包括了全部的ASP方法和属性.实现上,这使得我们有能力访问所有ASP的对象.看 下面的代码:

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
  Set MyScriptingContext=PassedScriptingContext
  Set MyApplication=MyScriptingContext.Application
  Set MyRequest=MyScriptingContext.Request
  Set MyResponse=MyScriptingContext.Response
  Set MyServer=MyScriptingContext.Server
  Set MySession=MyScriptingContext.Session
End Sub

以后我们就能用在VB中用MyApplication来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在OnStartPage之前来申明这些变量:  

Private MyScriptingContext As ScriptingContext
Private MyApplication As Application
Private MyRequest As Request
Private MyResponse As Response
Private MyServer As Server
Private MySession As Session

使用ASP的对象

我们的变量现在就能像标准的ASP对象来使用了!比如,我们经常在ASP中用Request.form()来收集提交表单的数据 .现在我们在我们的VB中实现这个功能,代码如下:

用ASP中实现:
<%
MyTempVariable=Request.Form("userName")
Response.Write("youentered"&MyTempVariable&"asyourus ername")
%>

在VB中实现:

MyTempVariable=MyRequest.Form("userName")
My Response.Write("youentered"&MyTempVariable&"asyourus ername")

通过使用MyResponse来代替Response,我们能够使用所有Response的方法,当然,MyResponse这 个名字可以随便来取,你甚至可以就取Response.
另一件我们得注意的是,我们得在我们的建立的类中,写上OnEndPage子函数,这个OnStartPage是相反的!OnS tartPage是创建对象,OnEndPage是消毁对象.

Public Sub OnEndPage()
  Set MyScriptingContext=Nothing
  Set MyApplication=Nothing
  Set MyRequest=Nothing
  Set MyResponse=Nothing
  Set MyServer=Nothing
  Set MySession=Nothing
End Sub

SayHello方法

我们来建立一个子函数,用于显示"HolleWorld".这个SayHello方法只是HelloWorld这个类中一个子函 数,我们以后会在ASP中用以下的显示这个方法

<%
Set ObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

SayHello的程序,很简单的!

Public Sub SayHello()
  MyResponse.Write("HelloWorld")
End Sub

现在一个小型的组件编写完成,剩下的工作就是编译这个组件,在"工程"菜单中保存它,取什么名字都可以,我们用Exmaple1 .vbp吧!然后就用在菜单中选择"makeexmaple1.dll",将其编译成DLL文件.一个组件就真正完成了!  

注意,编译了此组件那么你就得先把你的PWS关掉,然后再编译此组件.否则VB就会告诉你些组件在使用中.

在ASP中使用我们的自己的组件.

当你更正了在编译中的错误,成功地编译了example1这个工程,现在你就得拿出你最喜欢的HTML编辑器来写下下面的语句, 保存为ASP文件.

<HTML>
<HEAD>
<TITLE>Example1</TITLE>
</HEAD>

<BODY>

<%
Set ObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

</BODY>
</HTML>

运行后即可看到结果:

HelloWorld

注册组件

如果你想和你的朋友,邻居分享你的组件,那么你就得在你的系统上注册你的组件.我们一般使用Regsvr32.exe来注册组件 .注册后你的组件会出现在Win95/Win98的windows/system目录中.下面是一个注册的例子:  

egsvr32.exe C:\wwwroot\Example1\Example1.dll

在你的系统中,VB会自动给你注册,所以你很少用到Regsvr32.exe

这里只是写了一个非常小的组件,你可以写好自己的更大的组件,而且还可以用VB中的很多控件.

注意:每重新编译一次组件,都要重新启动iis,并且重新注册组件!!!!!!!


下面是测试成功的代码(工程名example,类名test1)


Option Explicit
Private Context As ScriptingContext
Private Application As Application
Private Response As Response
Private Request As Request
Private Session As Session
Private Server As Server

Public Sub OnStartPage(PassedscriptContext As ScriptingContext)
Set Context = PassedscriptContext
Set Application = Context.Application
Set Request = Context.Request
Set Response = Context.Response
Set Server = Context.Server
Set Session = Context.Session

End Sub
Public Sub hello()
Response.Write "hello world"
End Sub


Public Sub OnEndPage()
Set Application = Nothing
Set Request = Nothing
Set Response = Nothing
Set Server = Nothing
Set Session = Nothing
Set Context = Nothing
End Sub


test.asp代码


<%
dim t
set t=server.createobject("example.test1")
t.hello()
%>

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: asp 封装 DLL
相关日志:
评论: 0 | 引用: 0 | 查看次数: 394
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 20 字 | UBB代码 关闭 | [img]标签 关闭