📄 18-1.cfm.htm
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>在Active Server Pages中使用组件</TITLE>
</HEAD>
<BODY LINK="#0000ff">
<B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">在Active Server Pages中使用组件</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> 前面的章节介绍了怎样使用Active Server Pages的内置对象,例如Request对象和 Response对象。Active Server Pages组件和这些对象十分近似。不过,组件和Active Server Pages的结合并不十分紧密,只是来扩展内置对象的核心函数。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 你可以利用你所喜欢的语言,诸如Visual Basic, C++, Java,以及Delphi等等来创建自己的组件。这样做你可以参考本书的第28章。你还可以从第三方公司购买一些现成的组件使用。例如:Software FX公司销售一些可以使你利用Active Server Pages轻松制作图表的组件(参见http://www.softwarefx.com)。最后,微软提供了相当数量的免费的ActiveX组件,你会在这章和下一章来学会一些使用它们的的手段方法。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 在你使用一个组件之前,你需要首先创建一个它的事例,你可以在任何一个ASP文件中随意的运用内置对象的属性、方法、集合,但是对于组件,你必须在特定范围内创建事例来运用它,下面部分,你会学会怎样在页面,session, application的范围 内创建组件事例。</P>
<B><P ALIGN="JUSTIFY"> </P>
</FONT><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">在页面范围内创建组件</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> 很多场合下,你创建的事例实在页面范围内,那么一个组件就只能生存在特定的页面内,这时你不能将这个组件在其他页面中应用,或者去其他页面重新创建,创建这么一种组件,你需要使用Server.CreateObject()方法。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY"> 为了保险起见,不提倡使用VBScript的CreatObject方法以及JSCript的JSCript的新的CreateObject语句来创建组件事例,这样做会带来意想不到的问题,一般都是使用Active Server Pages的Server.CreateObject()方法。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 下面是在页面范围内创建一个组件的例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">Set MyBrow=Server.CreateObject(</FONT><FONT SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MSWC.BrowserType</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 这个脚本就创建了一个浏览器能力检测组件的事例,这个事例赋给变量MtBrow。请注意这里面使用了VBScript的Set语句。因为你在对一个组件的事例进行赋值操作,那么这个Set语句就是必不可少的。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY"> 如果希望对每一个组件的创建都有所了解,那么参见附录A。</P>
<P ALIGN="JUSTIFY"> 这种创建方法和JScript十分类似,不过,在JScript中你必须利用Var语句来进行这种操作。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY"> Jscript和VBScript最大的区别是前者区分大小写而后者不是。编写脚本时请特别注意。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 下面是利用Var语句的例子:</P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">var MyBrow=Server.CreatObject(</FONT><FONT SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MSWC.BrowserType</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 微软提醒您尽量创建页面范围的组件事例,这样对服务器的负担就相对小一些。当页面结束时,该组件事例相应结束,释放所有占用的资源和内存。</P>
<B><P ALIGN="JUSTIFY"> </P>
</FONT><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">在Session范围内创建组件事例</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> 在Session范围内进行这种操作有两种方法,一种还是利用Server.CreatObject()方法,和前面一样,见下面的例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">Set Session(</FONT><FONT SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MyBrow</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)=Server.CreateObject(</FONT><FONT SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MSWC.BrowserType</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 这个脚本将浏览器能力检测组件事例赋给了Session变量MtBrow。那么这个变量就可以随着这个用户在每一个页面中使用。你可以将这个脚本放在Global.asa或者其他任何Active Server Pages中。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 这样创建的缺点是,该对象会立即被创建,即使不去使用,也在白白的占用资源。</P>
<P ALIGN="JUSTIFY">幸好,还有一种在Session范围内进行组件创建的方式,你可以在Global.asa中利用微软的<OBJECT>标记进行创建。如下:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><OBJECT RunAt=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Server</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> SCOPE=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Session</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> ID=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MyBeow</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> ProGid=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MSWC.BrowserType</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3></Object></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 这个例子中使用了HTML的<OBJECT>标记来创建一个浏览器能力检测组件的事例。其中的SCOPE属性指示该组件将在session范围内进行创建。ID属性为这个事例进行认证以区分于其他事例。这样你就可以在你的脚本中进行引用。PROGID被用来限定组件的注册名。这是Server在进行事例创建时进行认证的依据。这和你用Server.CreateObject()方法时指定的名称是一致的。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 当你在Global.asa中使用<OBJECT>对象时,你必须把它放在任何一个事件之外,千万不要把它放在某一个事件的脚本程序中。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY"> 你还可以利用组件注册码来代替注册名,(如果你真的喜欢这样做),这里面需要指定ClassID属性,见下面这个脚本:</P>
<P ALIGN="JUSTIFY"><OBJECT RUANT=Server SCOPE=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Session</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> ID=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MyBrow</FONT><FONT SIZE=3>”</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">CLASSID=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>0ACE4881-8305-11CF-9427-444553540000</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>></OBJECT></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 当一个组件以上述两种任何一种方式创建之后,对于这个Session的用户来说就可以在Session结束前在任何界面操作这个事例的方法、熟悉功能、集合。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 不过,这样对于每一个用户都要创建一个特定的事例,这样在用户较多时对资源的占用就比较可怕了。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 那么你什么时候需要创建一个Session范围内的组件事例呢?在第21章中,你会学会怎样使用Ad Rotator组件,这种组件用于以不同频率显示不同的广告条,如果你希望在相当多的页面上进行这种选择,那么就需要将Ad Rotator组件事例赋给 Session变量。</P>
<B><P ALIGN="JUSTIFY"> </P>
</FONT><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">在Application范围内创建组件</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> 当你在Application范围内创建了组件事例,那么你可以把它当作内置对象进行处理,一旦创建,在任何页面,对于任何用户,使用任何方法、集合以及属性都是可以的。直到这个Application结束(网站服务终止,Global.asa改变,该application卸载)。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY"> 如果一个application范围的组件被创建,那么它的OnStartPage()和OnEndPage方法就无法调用。也许你在使用时会遇到这个问题。</P>
<P ALIGN="JUSTIFY"> 你可以用和创建一个Session范围的组件十分类似的方法创建一个application范围的组件。第一种自然还是利用Server.CreateObject()方法进行,见下例:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">Set Application(</FONT><FONT SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MyBrow</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)=Server.CreateObject(</FONT><FONT SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MSWC.BrowserType</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 这里面,浏览器能力检测组件被赋给了一个application变量。你可以把这个脚本放在Global.asa文件的application_OnStart事件中,也可以在你认为合适的页面中进行。在这个组件事例创建成功后,你就完全可以把它当作Active Server Page的内置 对象来处理。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 你当然还可以利用HTML的<Object>标记进行这种操作,如下:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><OBJECT RUNAT=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Server</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> SCOPE=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Application</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> ID=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MyBrow</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3> </P>
<P ALIGN="JUSTIFY"> PROGID=</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>MSWC.BrowserType</FONT><FONT SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>></OBJECT></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 在上面这个例子中,<Object>被用来创建一个application范围的组件事例。其中的SCOPE属性指定了这是一个application范围的事例而不是Session范围。其他的和上一个小节没有什么区别。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 同样,你可以把<Object>放在Global.asa文件中,不过,再次提醒,千万不要自作聪明的放在任何事件的脚本程序中。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> 什么时候你需要创建一个application范围的组件呢?第17章检测站上用户的那个小节就是个典型的例子,该字典对象的事例用来跟踪所有人的信息,同时覆盖几乎所有页面,因此必须用application范围的变量,否则无法实现。</P></FONT></BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -