2. 在ASP网页中创建对象实例
为了理解一般的脚本引擎对象创建方法为什么在ASP网页中使用效果不理想,需进一步对ASP中的环境和ObjectContext对象进行讨论。
使用脚本引擎的一般方法在一个ASP网页中创建一个对象实例时,该对象在当前执行的页面的环境中并未实例化。得不到ObjectContext对象的引用,所以不能使用该对象来访问页面的环境,即不能访问该页面环境中的值。
这意味着该对象不能使用内置的ASP对象,即不能够访问在Request、Response、Application和Session对象的集合中的值,也不能使用内置的ASP对象提供的方法和属性。该对象也不能够与此环境中任何现有的事务进行交互。如果发生错误,不能使用ObjectContext方法放弃一个事务。
当然,你可能不想与该网页的环境进行交互。但是有其他的理由说明使用一般的对象创建方法通常是不明智的。IIS自动地在COM 运行期包装程序hllhost.dll中实例化对象,使得该对象可以在当前的虚拟应用程序中完全地共享和重新使用(缺省的Web网站本身是一个虚拟的应用)。
你在上一章所看到的对一个虚拟应用程序的设置,既允许在Web服务器的内存空间中创建对象,也可以在共享的或独立的进程外DLLHost.dll实例中创建对象。如果使用一般的脚本引擎对象创建方法,将绕过所有的组件隔离和可扩展特性。而在使用ASP Server对象的CreateObject方法时会自动地提供这些特性。
3. Server对象的CreateObject方法
为了试验CreateObject方法,打开示例的Chapter04主菜单页,单击“Using the ASP Server Object”链接,如图4-10所示:
图4-10 示例程序的Chapter04主菜单页
这个链接打开一个名为show_server.asp的网页,该页面可以用来试验所有的Server对象的方法。它同时也显示Server对象唯一的属性ScriptTimeout的值、其缺省值是90秒,如图4-11所示:
图4-11 Server对象的属性和方法
在该页面的“Create an Instance of a Component”区域,有一个文本框,可以在其中键入想要在该网页的环境中创建的对象的ProgID字符串,甚至可以键入一个ClassID数值。这里文本框的缺省值已经设置为一个来自ActiveX数据对象库的公用对象的ProgID:ADODB.Connection。
单击“Server.CreateObject”选项旁的按钮,把该页面提交给其自身,因为所有的控件都在一个带有ACTION属性的<FORM>上,而这个ACTION属性被设置为这个网页的路径和文件名:
…
FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
<P><DIV CLASS="subhead">Create an Instance of a Component</DIV>
<INPUT TYPE="SUBMIT" NAME="cmdCreateObject" VALUE=" ">
Server.CreateObject ("
<INPUT TYPE="TEXT" NAME="txtProgID" SIZE="25" VALUE="ADODB.Connection">
")<P>
…
</FORM>
…
当该页面重新载入时,该页中的一段ASP代码(位于<FORM>段的前面)将查看提交该窗体时,单击了哪个按钮。如果是名称为“cmdCreateObject”的按钮时,该代码将读取文本框中的ProgID字符串。为防止用户输入的ProgID无效而导致执行中止,关闭缺省的脚本错误处理,再尝试使用Server.CreateObject方法创建一个对象的实例。最后,再重新打开缺省的错误处理,通过使用IsObject函数检查是否创建了一个对象实例,并显示一个相应的信息:
QUOT = Chr(34) 'double-quote character
…
'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdCreateObject")) Then
strProgID = Request.Form("txtProgID")
On Error Resume Next
Set objObject = Server.CreateObject(strProgID)
On Error Goto 0
If IsObject(objObject) Then
Response.Write "<B>Results:</B><BR>Sucessfully created object with ProgID of <B>" _
& QUOT & strProgID & QUOT & "</B><HR>"
Else
Response.Write "<B>Results:</B><BR>Failed to create object with ProgID of <B>" _
& QUOT & strProgID & QUOT & "</B><HR>"
End If
End If
…
图4-12所示的是创建ADODB.Connection对象的结果。可以看到该对象已被正常实例化,已可以在代码中使用。
图4-12 ADODB.Connection对象实例化的结果
本章不讨论如何使用这些对象,你可能已经对此很熟悉了。一旦创建了对象实例,就可以像在任何其他情况中一样使用它。调用对象的方法,读取或设置属性,与使用VB时一样;或者用浏览器中客户端的VBScript、JScript使用它。
在接下来的章节中将对对象和组件的使用进行更加详细的介绍。我们将研究由脚本引擎实现的一些对象,以及IIS 5.0/ASP 3.0中的可安装组件,还有一些其他的免费或商用的组件,并讨论在各种情况下如何选择相应的组件。在本书的后面,甚至会说明创建自己的能够在ASP中使用的组件是非常简单的。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



