快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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条目,即<、’>’、’&amp;’、’&quot;’等等

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:myfilessales.xlw”)
也可以指定所需要的对象类型和文件名,在几种对象都能处理该文档类型的情况下,这种做法是异常有用的:
Set objExcel = GetObject(“C:myfilessales.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网站本身是一个虚拟的应用)。
你在上一章所看到的对一个虚拟应用程序的设置,既答应在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="&nbsp;&nbsp;&nbsp;">
&nbsp; 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中使用的组件是异常简朴的。
返回类别: 教程
上一教程: 用纯ASP代码实现图片上传并存入数据库中(二)
下一教程: ASP与TXT组合设计程序的实例

您可以阅读与"ASP 3.0高级编程(十三)"相关的教程:
· ASP 3.0高级编程(二十三)
· ASP 3.0高级编程(三十三)
· ASP 3.0高级编程(三十五)
· ASP 3.0高级编程(四十)
· ASP 3.0高级编程(三十一)
    微笑服务 优质保证 索取样品