SP编程人员总是要使用到组件---其实就是以下5个ASP内建对象:Response, Request, Session, Application
和 Server,它们存在与ASP.DLL组件文件中,是WEB动态应用程序开发的基础。利用它们,花费很少的工作量就能完成一定的任务。
编写脚本可以很完美地操作这些组件对象,从而建立定制的WEB站点。但是,单单利用这些基本组件和脚本,还不能完成所有想做的事情,因此,就要考虑使用其他的组件。
许多其他组件都非常有用,比如ADO组件对于数据库的存取、运行时间脚本组件对于文件系统的存取。这些组件的共同一点就是:使用它们可以存取的对象,是用简单的代码所不能做到的。
然后,如果再找不到一个能满足任务的组件,就要考虑编写了。这篇文章就将讨论在Visual Basic中实现编写组件的方法。
用Visual Basic编写第一个ASP组件
这里要编写的组件的功能是:简单地给每个访问者一个唯一的ID号,以便日后调用。程序将检查浏览器页面请求,获取一个特殊的Cookie:VID(访问者标识符Visitor
IDentifier);如果找到这个cookie值,就设置它的到期时间为从此3个月后;如果没有找到,组件就创建一个唯一的标识符,并将之存储为cookie,设置它的到期时间为从此3个月。
产生唯一的号码
创建GUID(唯一保证识别号)的代码可以从微软知识库中找到。如果机器中安装了MSDN,那么其详细资料位于:Knowledge Base
/ visual Basic for Windows / HOWTO: Use API to Generate a GUID with VB。
下面将详细讨论创建GUID的代码。这里将要制作的组件包含一个叫做GetGUID的方法,它返回代表一个GUID的16进制字符串。
在ASP页面中使用组件
要实现组件要完成的任务“设置Cookie和到期时间”,需要在页面主体(Body)送到浏览器之前,在HTTP头部完成GUID的计算。执行下面的代码将足够为浏览器设置一个永久的GUID。
< %@ LANGUAGE="VBSCRIPT" % >
< %
Dim oCookieSetter
Set oCookieSetter = Server.CreateObject ("ASPToday.VisitorID")
% >
$#@60; HTML $#@62;
...
创建这个独立组件的简单对象,足够可以完成要求的任务。但是在研究它之前,需要提到一些你可能注意到的事情:这里的代码使用了ASP服务对象的CreateObject方法,而不? Script中的相关函数:
< %@ LANGUAGE="VBSCRIPT" % >
< %
Dim oCookieSetter
下面的代码将不会生效 !!!!
Set oCookieSetter = CreateObject ("ASPToday.VisitorID")
% >
$#@60; HTML $#@62;
....
这样做,就保证了Server.CreateObject方法不仅创建了一个组件的实例,而且将检查组件的一对方法:OnStartPage()和
OnEndPage(),它们将在适当的时候被执行。这是创建ASP组件、访问ASP内在对象的关键。
Visual Basic工程
创建组件的步骤是:启动Visual Basic,在对话框提示时,选择要创建的工程类型,这里选择ActiveX DLL:
设置工程的属性
创建工程的名字为Project1,它包含一个单独的类模块叫做class1。这些就足够了。点击菜单“Project/Project1 Properties”,在出现的如下所示画面中设置工程的属性:
在General/Tab页面上有一对需要注意的信息。首先,工程名Project Name已经改变为ASPToday,这将形成调用名字的第一个部分,这个调用的名字就是被ASP页面使用的CreateObject的名字。这里还选择了Unattended
Execution选项,从而禁止了图形界面的交互(比如错误信息对话框),这么做,有可能导致IIS错误。
在Make页面唯一发生重要变化的是设置Auto Increment选项,这样做,当程序编译后,组件的版本号就会提升。调试程序时,知道组件的版本号是非常有用的,特别是当拥有一个source
safe系统时,不过这是另外的话题。
编译(Compile)页面是选择让编译器如何创建组件的地方。在这里选择Optimize For Small Code,因为我要让Web服务器得到它能得到的最多内存。这个页面真正重要的选项是DLL基础地址,这和计算机调入组件相关的代码库的方式有关。做为一个32位的系统,会留下2兆字节的内存装入代码。你要设置的基础地址必须是建立在64K基础上,用英语方式表达出来就是需要设置类似
&Hxxxx0000 的数值,xxxx表示从1100到7FFF的16进制数字。
你也许要问,这是为什么呢?原因是系统在运行时间装入代码库的方式。如果用许多不同的程序库一直要装入同样的内存地址,系统就必须浪费时间和资源挑拣出哪些位于哪儿。如果编写组件时(这些组件将会一起使用)设置成不同的基础地址,那么在运行时就不会导致性能阻塞。
在Component页面,初始的版本兼容性默认是Project compatibility,如果不编译成第一个版本,这将会是不错的。当编译时,为了有利于注册表,就应该改变为Binary
Compatibility,如上图所示。请查阅在线帮助得到关于这个复杂项目的详细资料。
设置工程的引用
完成了工程属性的选择,下一步就是设置组件运行的ASP环境。通过引用对话框实现这一步。选择菜单“Project / References”,出现一个对话框,选择组件需要的库,在这里选择“Microsoft
Active Server Pages Object Library”。
通过上述引用,在程序中就可以访问ScriptingContext对象,从而能够使用在ASP页面中的5个对象:Request, Response,
Session, Application 和 Server。
如果在列表中找不到“Microsoft Active Server Pages Object Library”,点击“Browse”按钮定位寻找。ASP库引用实际上就是一个后缀为.tlb的文件,默认的路径应该位于:\Program
Files\Microsoft Visual Studio\ Common IDE\IDE98\ASP.TLB。
|