ASP 3.0高级编程(十三)

编程|高级

1.3 ASP Server对象
正像在前面看到的那样,通过服务器端包含的经ISAPI访问Web服务器的页面,用传统动态页面指令和命令可以做相当多的事情。但同时也有一些明显的限制。
例如,可以从Request.ServerVariables集合检索到所有随同客户端的请求发送过来的HTTP报头的值。它几乎可以与使用SSI #echo匹敌,同时具备的主要优点是把这些值作为字符串返回到代码中(而#echo指令简单地把这些值插入到页面中),因此可以根据自己的愿望来检索和维护这些字符串。许多相同的参数应用于#fsize和#flastmod指令,使用带有VBScript和JScript脚本引擎中的对象的脚本,同样也可以容易地获取这个信息。在后续章节你将看到相关的细节。
#exec指令既非常有用,又受到一定的限制。实际上该指令仅运行系统命令或定制的CGI应用程序,并不能给脚本提供真正的对进程的控制。ASP Server对象提供了一种全新的方法,与#exec指令相比,能够更安全和更容易地运行其他的应用程序或组件。当然,对于一些情况,尤其是在确实需要执行一个操作系统命令或一个原有的CGI应用程序的地方,#exec是无法替代的。
为了研究Server对象,先概要介绍其所有可用的方法和属性,然后再进一步详细地进行讨论。

4.3.1 ASP Server对象成员概述
Server对象是专为处理服务器上的特定任务而设计的,特别是与服务器的环境和处理活动有关的任务。因此提供信息的属性只有一个,却有七种方法用来以服务器特定的方法格式化数据、管理其他网页的执行、管理外部对象和组件的执行以及处理错误。
1. Server对象的属性
Server对象的唯一一个属性用于访问一个正在执行的ASP网页的脚本超时值,如表4-2所示:
表4-2 Server对象的属性及说明
特 性
说 明

ScriptTimeout
整型。缺省值为90。
设置或返回页面的脚本在服务器退出执行和报告一个错误之前可以执行的时间(秒数)。达到该值后将自动停止页面的执行,并从内存中删除包含可能进入死循环的错误的页面或者是那些长时间等待其他资源的网页。这会防止服务器因存在错误的页面而过载。对于运行时间较长的页面需要增大这个值

2. Server对象的方法
Server对象的方法用于格式化数据、管理网页执行和创建其他对象实例,如表4-3所示。
表4-3 Server对象的方法及说明
方 法
说 明

CreateObject(“identifier”)
创建由identifier标识的对象(一个组件、应用程序或脚本对象)的一个实例,返回可以在代码中使用的一个引用。可以用于一个虚拟应用程序(global.asa页)创建会话层或应用程序层范围内的对象。该对象可以用其ClassID来标识,如“{clsid: BD96C556-65A3…37A9}”或一个ProgID串来标识,如“ADODB.Connection”

Execute(“url”)
停止当前页面的执行,把控制转到在url中指定的网页。用户的当前环境(即会话状态和当前事务状态)也传递到新的网页。在该页面执行完成后,控制传递回原先的页面,并继续执行Execute方法后面的语句

GetLastError()
返回ASP ASPError对象的一个引用,这个对象包含该页面在ASP处理过程中发生的最近一次错误的详细数据。这些由ASPError对象给出的信息包含文件名、行号、错误代码等等

HTMLEncode(“string”)
返回一个字符串,该串是输入值string的拷贝,但去掉了所有非法的HTML字符,如<、>、&和双引号,并转换为等价的HTML条目,即<、’>’、’&’、’"’等等

MapPath(“url”)
返回在url中指定的文件或资源的完整物理路径和文件名

Transfer(“url”)
停止当前页面的执行,把控制转到url中指定的页面。用户的当前环境(即会话状态和当前事务状态)也传递到新的页面。与Execute方法不同,当新页面执行完成时,不回到原来的页面,而是结束执行过程

URLEncode(“string”)
返回一个字符串,该串是输入值string的拷贝,但是在URL中无效的所有字符,如?、&和空格,都转换为等价的URL条目,即%3F、%26和+

4.3.2 创建其他对象的实例
在前一章中,讨论了ASP的虚拟应用程序概念,了解了虚拟应用程序通过Application Protection设置为ASP网页中的组件和其他对象提供进程隔离。这延续了第1章的讨论,即ASP的ObjectContext对象如何为ASP网页提供运行环境,以及如何使用在相同的环境中运行的其他组件和对象。
ASP Server对象提供创建这些组件和应用程序实例的功能,因此可用来扩充ASP脚本的能力。通过实现CreateObject方法的一个特定版本来实现这个功能。
1. 在VBScript和JScript中创建对象实例
在VB或VBA中,可使用多种方法创建对象的实例。可以使用New关键字来创建指定类型的一个新对象:
Dim objNewObject As New MyComponent
然而,不能在ASP中用VBScript或JScript这么做,因为这些脚本引擎不能实现数据类型定义。不能声明一个变量为任意指定的数据类型,其变量都是Variants类型,或一个等价的类型(根据使用的脚本语言而定)。
在VB和VBA中另一个方法是使用CreateObject或GetObject方法。CreateObject方法的参数是一个ClassID(通常情况)或一个ProgID字符串,它返回相应类型的一个新对象:
Set objNewObject = CreateObject(“ADODB.Connection”)
当拥有一个指定的文档类型,并且想创建一个可以处理这种文档的对象实例时,通常使用GetObject方法:
Set objExcel = GetObject(“C:\myfiles\sales.xlw”)
也可以指定所需要的对象类型和文件名,在几种对象都能处理该文档类型的情况下,这种做法是非常有用的:
Set objExcel = GetObject(“C:\myfiles\sales.xlw”,”Excel.Application”)
VBScript支持CreateObject和GetObject方法。JScript也有getObject方法,与VBScript中的GetObject工作方式相同。JScript中的ActiveXObject实现了与VBScript的CreateObject方法相同的功能。但这个函数常与JScript的new运算符协同使用:
ObjNewObject = new ActiveXObject(“This.object”);
除了VB的NEW关键字在VBScript和JScript中不予支持以外,能够使用所有这些技术在一个ASP网页中创建对象的实例。然而,能够并不意味着应该,而且大多数情况下不应该在一个ASP网页中使用脚本引擎的对象创建函数。
2. 在ASP网页中创建对象实例
为了理解一般的脚本引擎对象创建方法为什么在ASP网页中使用效果不理想,需进一步对ASP中的环境和ObjectContext对象进行讨论。
使用脚本引擎的一般方法在一个ASP网页中创建一个对象实例时,该对象在当前执行的页面的环境中并未实例化。得不到ObjectContext对象的引用,所以不能使用该对象来访问页面的环境,即不能访问该页面环境中的值。
这意味着该对象不能使用内置的ASP对象,即不能够访问在Request、Response、Application和Session对象的集合中的值,也不能使用内置的ASP对象提供的方法和属性。该对象也不能够与此环境中任何现有的事务进行交互。如果发生错误,不能使用ObjectContext方法放弃一个事务。
当然,你可能不想与该网页的环境进行交互。但是有其他的理由说明使用一般的对象创建方法通常是不明智的。IIS自动地在COM+运行期包装程序hllhost.dll中实例化对象,使得该对象可以在当前的虚拟应用程序中完全地共享和重新使用(缺省的Web网站本身是一个虚拟的应用)。

时间: 2024-08-07 15:51:35

ASP 3.0高级编程(十三)的相关文章

ASP 3.0高级编程(三十三)

编程|高级 7.4.2 VBScript错误处理在VBScript中,可以使脚本解释器不处理其找到的任何错误,并且使用On Error Resume Next语句继续运行下个语句.一旦这个语句已被处理,脚本引擎将继续运行后面的程序,而不理会已经发现的任何错误.然而,这种过程仅适用于顺序执行语句的环境,换句话说,不适用于嵌套的函数或子程序.1. 使用On Error Resume Next语句一个错误在子程序中出现时,如果没有运行On Error Resume Next语句,那么错误将被交给调用它

ASP 3.0高级编程(二十三)

编程|高级 第6章 活动服务器组件在前几章中,我们已经研究了两类不同的对象:一类是ASP对象模型的内置部分,另一类是脚本运行期库提供的对象.本章将介绍第三类能用于ASP的对象,取名为活动服务器组件(或者就称为服务器组件).这些组件在很多场合下就如同在浏览器或在像Visual Basic编程环境中用于客户端脚本中的传统ActiveX控件一样,但是这些组件可在服务器上运行,而不是一个只能运行在客户机上的对象.现在的问题是:这些组件来自哪里?其中一部分是由常规的ASP/IIS安装程序提供的,而另一部分

ASP 3.0高级编程(三十二)

编程|高级 7.2.4 客户端脚本错误到目前为止,我们已了解了来自ASP的错误.然而ASP也经常用于创建包含客户端脚本的网页.如果包含客户端代码的<SCRIPT>元素没有被设置成RUNAT="SERVER"属性,ASP将不考虑服务器,而把网页信息不加改变地传送到客户端.因此,如果打开了一个ASP网页,并且显示的是一个浏览器错误对话框,就不应该在服务器端寻找ASP程序代码的错误.浏览器看不到ASP程序代码,所以不能识别任何错误,如果有一个对话框出现在客户端,那么在客户端代码中

ASP 3.0高级编程(四十)

编程|高级 8.5.1 Errors集合Errors集合包含由单个ADO命令的执行而引起的每一个错误的Error对象.使用Errors集合的原因是由于在一个命令的执行过程中,可能会引起多个错误,OLE DB提供者需要提供一种方式通知客户方已有多个错误发生.关于Errors集合有两个重要的地方需要注意:· 每次执行ADO命令,如果发生错误,就清空错误集,同时代之以新的错误内容.当然,如果没有错误发生,Errors集合不会受到影响.所以,即使ADO命令成功执行,这个集合中也可能含有错误信息.· OL

ASP 3.0高级编程(五)

编程|高级 1. 操作HTTP报头我们已经在几处见到ASP如何创建或修改在响应页面请示时被发送到客户的HTTP报头.在Response对象中有几个属性和方法可帮助我们做到一点.下面是一些报头方法:· 控制缓存和有效期.· 创建状态和定制的HTTP报头.· 指定MIME类型或内容类型.· 添加PICS标签.接下来将简要地研究每一个方面.可在"Response Object"主页(show_response.asp)上,单击相关属性名或方法名,来检查我们所说的属性和方法,如下图所示: 1.

ASP 3.0高级编程(十四)

编程|高级 4.3.3 执行其他的网页ASP 3.0和IIS 5.0的新特性之一就是引入了可编程的服务器端重定向(server-side redirection)的概念.这意味着,可以把一个网页的控制和执行转到另外一个网页,而不需要在客户端使用Response.Rdedirect方法.1. 客户端重定向带来的问题ASP编程人员通常使用Response.Redirect语句把一个页面载入到当前正在执行的网页.然而,许多人没有意识到这条语句不会自动地使服务器立即装入和执行新的网页.其真正做的是把一个

ASP 3.0高级编程(十五)

编程|高级 4.3.4 Server对象的错误处理ASP没有错误处理机制一直受到批评.在VBScript中,有一个On Error Resume Next语句,它使脚本解释器忽略运行期错误并继续脚本代码的执行.接着该脚本可以检查Err.Number属性的值,判别是否出现了错误.如果出现错误,返回一个非零值.在ASP 3.0中,也可以使用On Error Goto 0"转回到"缺省的错误处理.在ASP 2.0中实际也进行这种处理,但是没有相应文档说明.在Jscript中,有一个新的错误处

ASP 3.0高级编程(十七)

编程|高级 第5章 脚本运行期库对象前面章节已经介绍了ASP如何使用在服务器上定义的对象的实例,充分利用所提供的方法和属性扩展ASP的性能.有一系列的对象可供使用,包括脚本对象和标准IIS/ASP安装的组件,以及自己创建的或者从其他供应商处购买的对象.也可以在互联网上各种网站免费下载对象,并在自己的页面上使用.这一章将讨论由ASP脚本环境提供的一般称为"脚本运行期库"(Scripting Runtime Library)的对象.这些对象通过正在使用的脚本引擎提供给代码,与ASP脚本程序

ASP 3.0高级编程(二十八)

编程|高级 6.2.11 Logging Utility组件Logging Utility组件是ASP 3.0的新组件,提供了访问日志文件的方法,这个日志文件是由服务器支持的用于Web和FTP网站的IIS创建的.1. Logging Utility组件的成员Logging Utility组件提供了六种方法,能读取日志文件的内容.把新记录写进已存在的日志文件中.这些方法和上一章讨论的FileSystemObject对象的方法有相似性,如表6-9所示:表6-9 Logging Utility组件的方

ASP 3.0高级编程(二十九)

编程|高级 6.3.2 SA-FileUP组件在很多Web网站上,一个常规要求是,服务器接受客户机发送的文件的能力如何?在IIS 4.0里,Microsoft提供了一个名为Posting Acceptor组件完成这项工作,IIS 5.0和ASP 3.0的标准安装中没有该组件,如果安装Site Server Express的话,则需要包含这一组件.可以从Microsoft Web网站http://www.microsoft.com/windows/software/webpost/post_acc