您现在的位置: 365建站网 > 365文章 > 2.1 常用ASP内置对象

2.1 常用ASP内置对象

文章来源:365jz.com     点击数:3828    更新时间:2009-07-15 14:34   参与评论

本章介绍ASP开发中常用到的一些基本知识,包括对7个ASP内置对象的介绍,以及在它们的使用过程中应当注意的问题,使用ADO连接数据库的基础知识以及ADO连接不同数据库的方法,常用SQL语句的使用方法,最后给出了在开发中常用的一些模块,使用这些模块可以大大增强程序功能和加快开发速度。本章作为开发ASP时的一个参考,目的是提供一些比较全面和系统的知识,以便读者在开发时可以随时查阅。

2.1  常用ASP内置对象

ASP内置对象是ASP的核心,ASP的主要功能都建立在些内置对象的基础之上。关于ASP内置对象的介绍有很多资料,下面仅就与开发关系最密切的知识做一重点介绍,并对在使用过程中容易出错的知识点给出详细的解释和说明。读者在开发时,最方便的参考资料还是IIS自带的文档或MSDN,因为来自那里的信息才最权威,最真实。

下面分别介绍在IIS 5.1的文档中,提到的ASP的7个内置对象的功能。

2.1.1  7个ASP内置对象介绍

1.Application对象——应用程序内共享信息

可以使用 Application 对象在应用程序的所有访问者间共享信息,此处的应用程序与在IIS中所创建的一个应用程序所对应(如何创建应用程序请参见第1章)。

2.Request对象——获取客户端传入信息

可以使用 Request 对象来获取客户端传来的任何信息。包括通过 POST 方法或 GET 方法、cookies 以及客户端证书从 HTML 表单传递的参数。通过 Request 对象也可以访问发送到服务器的二进制数据,如文件上载。

3.Response对象——向客户端发送信息

可以使用 Response 对象来控制发送给客户端的信息。这包括直接发送信息到浏览器、重定向浏览器到其他URL或设置cookie值。

4.Server对象——服务器本地操作

通过Server对象可以访问服务器上的方法和属性。最常用的方法就是用来创建COM组件的Server.CreateObject方法。其他方法可对字符串应用URL或HTML编码、将虚拟目录映射到物理路径,以及设置脚本超时期间等。

5.Session对象——存储单个用户会话信息

可以使用Session对象来存储特定会话(Session)所需的信息,当一个客户端访问服务器时,就会建立一个会话。当用户在应用程序不同页面间跳转时,不会丢弃存储在 Session 对象中的变量,这些变量在用户访问应用程序页的整个期间都会保留。可以使用 Session 对象来显式结束会话并设置闲置会话的超时时限。

准确地说,是服务器会对每一个独立的浏览器建立一个会话,当你分别启动两个浏览器访问同一网址时,就会在服务器端创建两个不同的会话,但使用window.open等方法新开的浏览器子窗口与其父窗口共享一个会话。

6.ObjectContext对象——事务处理

可以使用ObjectContext对象来提交或中止由ASP脚本启动的事务。

7.ASPError对象——错误信息

可以使用 ASPError 对象来捕捉 ASP 错误并向用户返回详细的信息描述。

下面分别介绍每个对象的成员及其使用方法。

[NextPage]

 

2.1.2  Application对象

Application对象通常用来实现以下功能。

l          存储应用程序级全局变量。

l          锁定与解锁全局变量。

l          网站计数器。

下面来看实现这些功能的具体方法。

1.成员说明

Application对象包含的集合、方法和事件见表2-1。

表2-1  Application对象包含的集合、方法和事件

类    型

名    称

说    明

集合

Contents

没有使用<OBJECT>元素定义的存储于Application 对象中的所有变量的集合。可以省略Contents直接访问,如:Application("NumVisits")

StaticObjects

使用<OBJECT>元素定义的存储于Application对象中的所有变量的集合

方法

Contents.Remove

通过传入变量名来删除指定的存储于Contents中的变量

Contents.RemoveAll

删除全部存于Contents中的变量

Lock

锁定在Application中存储的变量,不允许其他客户端修改,调用Unlock或本页面执行完毕后解锁

Unlock

手动解除对Application变量的锁定

事件

Application_OnStart

声明于global.asa中,应用程序首次执行时触发

Application_OnEnd

声明于global.asa中,应用程序结束时触发

(1)在Application对象中存储对象时,仍要用Set关键字,使用时可以直接用Application对象调用其方法。如:

Set Application("myObj") = Server.CreateObject("MyComponent")

Application("myObj").myMethod

(2)调用Lock方法的效果是累计的,即调用几次Lock方法,需要对应调用几次Unlock方法来解锁,如果调用UnLock方法次数小于Lock方法次数,则存储于Application对象中的变量仍处于锁定状态,当然,当此页面执行完毕后,会自行解锁。

2.应用范例

Application对象的应用比较简单,在程序设计时使用得也相对比较少,关于它的使用方法参见例程2-1。

例程2-1  Application对象的使用范例

<%

         '在Application对象中存储字符串和数字

         Application("greeting") = "Welcome to My Web World!"

         Application("num") = 25

         '在Application对象中存储数组及使用方法

         Dim MyArray(5)

         MyArray(0) = "hello"

         MyArray(1) = "some other string"

         Application("StoredArray") = MyArray

         '使用数组,需要先取出来后,再用下标引用

         LocalArray = Application("StoredArray")

         LocalArray(1) = " there"

         '在Application中存储对象(MyComponent对象为虚构对象)

         Set Application("myObj") = Server.CreateObject("MyComponent")

         '直接用Application对象调用某一对象的方法

         Application("myObj").myMethod

         '取出对象后再调用其方法

         Set MyLocalObj = Application("myObj")

         MyLocalObj.myMethod

         '对Application中变量的锁定与解锁

         Application.Lock

         Application("NumVisits") = Application("NumVisits") + 1

         Application("datLastVisited") = Now()

         Application.Unlock

%>

3.典型错误用法

Application对象虽然使用简单,但在使用时,仍要注意一些常犯的错误,下面列举几种比较典型的错误使用方法。

1)在Application对象中不能存储ASP内置对象

如下语句是错误的:

<%

         Set Application("var1") = Session

         Set Application("var2") = Request

         ……

%>

2)不能通过下标直接来引用存储于Application中的数组

如下语句是错误的:

<% Application("StoredArray")(3) = "new value" %>

3)不要将数据库连接对象存储于Application中

在没有讲ADO的使用时,谈这个似乎有些过早,而且这样做也不会导致编译和执行错误,但却对数据库操作的效率有十分有害的影响。因为让多个客户端共用一个数据库连接,固然节省了资源,但当用户数稍多之后数据库连接必然会成为整个应用程序的瓶颈,比较好的解决办法是使用数据库连接池来实现,详细方法参见关于ADO的介绍和对数据库连接优化的部分。

[NextPage]

 

2.1.3  Request对象

Request对象通常用来实现以下功能。

l          读取网址参数。

l          读取表单传递的数据。

l          读取Cookie的数据。

l          读取服务器环境变量。

l          上传文件。

下面来看实现这些功能的具体方法。

1.成员说明

Request对象包含的集合、属性和方法见表2-2。

表2-2  Request对象包含的集合、属性和方法

 

类    型

名    称

说    明

 

集合

ClientCertificate

客户证书集合

 

Cookies

客户发送的所有Cookies值的集合

 

Form

客户提交的表单(Form)元素的值,变量名与表单中元素的name属性一致

 

QueryString

URL参数中的值,如果Form的Method属性设为“GET”,则会把所有的Form元素名称和值自动添加到URL参数中

 

ServerVariables

预定义的服务器变量

 

属性

TotalBytes

客户端发送的HTTP请求中Body部分的总字节数

方法

BinaryRead(count)

从客户端提交的数据中获取count字节的数据,返回一个无符号型的数组

(1)如果要查询的变量在以上5个集合中都不存在,则返回空(EMPTY)。

(2)在以上5个集合中查找变量值时,虽然可以省略集合名,直接用Request(variable)来获取变量值,但MS以及其他专业人士强烈反对这种做法,因为这会使查询效率降低,而且会由于变量重名而带来让人费神的逻辑错误,建议在查询时指明集合名称。例如:

推荐:

Request.Form ("username")

反对:

Request.(" username")

如果非要使用省略集合名称的方法,当一个变量在不止一个集合中存在时,那么服务器要找到并返回这个变量就要在全部集合中检索,对于集合的自动检索顺序是:

l          QueryString

l          Form

l          Cookies

l          ClientCertificate

l          ServerVariables

(3)使用Request.Form时有两个局限性:其一是只能接收小数据量的数据,具体为当由Form提交的数据字节数大于100KB时,便无法使用Request.Form了;其二是Request.Form与Request.BinaryRead不能同时使用,否则会发生错误。

2.应用范例

关于Reguest对象的使用方法参见例程2-2。

例程2-2  Reguest对象的使用范例

<%

         '使用ClientCertificate的范例,注:由于ClientCertificate使用较少,

         '而且内容比较烦琐,在此只做简单介绍,读者可以参考IIS 5.1文档,查看其具体用法

         strIssuer = Request.ClientCertificate("Issuer")

         strSubject = Request.ClientCertificate("Subject")

         'Cookeis的简单使用方法

         strMyCookie = Request.Cookies("myCookie")

         '例如对这样的URL:http://localhost/login.ASP?username=admin&key=AKgHmOLU

         '使用Request.QueryString方法

         strUserName = Request.QueryString("username")

         strKey = Request.QueryString("key")

         '例如对这样的URL:http://localhost/login.ASP,该URL没有参数

         '使用Request.Form方法

         strUserName = Request.Form("username")

         strPassword = Request.Form("password")

         strKey = Request.Form("key")

         'Request.ServerVariables的参数有几十个服务器环境变量可以使用,

         '下面用REMOTE_ADDR来获得客户端的IP

         strIP = Request.ServerVariables(REMOTE_ADDR)

%>

3.典型错误用法

Request对象使用时一般出现语法性错误的情况比较少,更多的情况是如何合理使用它来提高应用程序效率。在MSDN中的一篇名为“25+ ASP Tips to Improve Performance and Style”的文章中,给出了28条优化ASP性能的建议,其中有一条是关于Request对象优化的,大致思想如下。

(1)尽量不要使用服务器变量。

访问服务器变量会使 Web 站点向服务器发出一个特殊请求,并收集所有服务器变量,而不只是所请求的那个变量。所以第一次请求服务器变量时,就会使性能受到影响。后面再对其他服务器变量的请求,则不会对性能产生影响。

(2)避免使用非限定的Request对象。

这个前面已经提到,建议使用集合名称来查询对象,而不要使用类似Request("Data")的形式。

[NextPage]

 

2.1.4  Response 对象

Response对象通常用来实现以下功能。

l          输出内容到网页(客户端)。

l          网页重定向(尽量使用Server.Transfer代替它)。

l          写入Cookie。

l          下载文件。

下面来看实现这些功能的具体方法。

1.成员说明

Response对象包含的集合、属性和方法见表2-3。

表2-3  Response对象包含的集合、属性和方法

类    型

名    称

说    明

集合

Cookies

设置客户端Cookie的值,如果指定名称不存在,则创建之,如果存在,则更新它的值

(续表)

类    型

名    称

说    明

属性

Buffer

是否启用缓存,此句必须放在ASP文件的第一行。启用Buffer之后,只有所有脚本执行完毕后才会向客户端输出

CacheControl

设置代理服务器是否可以缓存ASP,以及缓存的级别

Charset

设置字符集,如简体中文为“gb2312”,与在网页中的meta段写charset=gb2312具有相同作用

CodePage

表示消息正文所使用的代码页,例如简体中文是936

ContentType

设置HTTP内容类型,如“text/html”

Expires

设置或返回一个页面缓存在浏览器中的有效时限,以分钟计算

ExpiresAbsolute

设置页面缓存在浏览器中到期的绝对时间

IsClientConnected

判断客户端是否已经断开连接

LCID

设定或获取日期、时间或货币的显示格式

Status

设置服务器的返回状态,以一个三位数加简要说明的格式,

如Response.Status = "401 Unauthorized"

方法

AddHeader(HeaderName, HeaderValue)

向HTTP头中加入额外的信息,其中HeaderName可以重复,信息一但加入,无法删除

AppendToLog

向Web 服务器手动加入一条日志

BinaryWrite

向HTTP输出流中写入不经过任何字符转换的数据,用于各客户端传送图片或下载文件

Clear

清空缓存

End

停止处理ASP文件,直接向客户端输入现在的结果

Flush

向客户端立即发送缓存中的内容

Redirect

向浏览器发送一个重定向的消息,浏览器接收到此消息后重定向到指定页

Write

向HTTP输出流中写入一个字符串

(1)为让网站国际化,建议显式设置Codepage属性。系统查找CodePage的顺序是:

l          Response.CodePage。

l          Session.CodePage。

l          页面@CodePage指令。

l          虚拟目录设置Metabase属性AspCodePage。

l          以上都没有设置时,取默认值ANSI。

(2)在调用Response.End时,会自动调用Response.Flush,将缓存中现有内容向客户端发送,如果不希望这样做,可以先调用Response.Clear清空缓存。

(3)注意Response.Redirect只是向浏览器发送一个重定向的消息,浏览器根据消息中的URL再次向服务器发出新的请求,因此浏览器与服务器之间存在两次往返,降低了效率并加长了用户的等待时间,建议使用Server.Transfer,它的功能是直接将处理移交到另一页,而不需要浏览器再次发送请求。

2.应用范例

Response对象的属性和方法较多,但最常使用的却比较集中,下面仅就其中使用率最高的几个属性和方法做简要示范,如例程2-3所示。

例程2-3  Response对象的使用范例

<%

         '使用缓存

         Response.Buffer = True

         '设置字符集

         Response.CharSet = "gb2312"

         '设置代码页

         Response.CodePage = 936

         '设置文档类型

         Response.ContentType = "text/HTML"

         '设置缓存过期时间,如果设为-1,则立即过期

         Response.Expires = -1

         '用IsClientConnected判断客户端是否仍连接

         If Response.IsClientConnected Then

                  '获取SessionID

             SessionID = Session.SessionID

             Response.Write "SessionID=" & SessionID & "<br>"

         End If

         '向客户端输入信息

         Response.Write "这是一个演示Respose对象用法的例程式"

         '注意:启用下面两句后客户端将得不到任何信息

         'Response.Clear()

         'Response.End()

%>

3.典型错误用法与注意事项

Response对象的属性和方法虽然很多,但在使用时一般不容易出错,而涉及更多的是如何优化的问题。下面就初学者常犯的错误与注意事项加以说明,详细的优化方法请参考本书第3章“创建高性能的ASP应用程序”中的内容。

(1)在向客户端输出部分内容后不能再调用Response.Redirect方法。

在IIS 5.0中虽然默认缓冲是打开的,但如果在这之前执行了Response. Buffer =False或Response.Flush语句之后,再调用Response.Redirect方法,将会出错,因为Response.Flush会将缓冲中的现有数据向客户端输出。

(2)当输出较多时,适时使用Flush方法。

因为虽然缓冲可以在整体上加快ASP处理速度,但在缓冲内容输出之前,也会造成客户端没有任何迹象的等待,当输出内容较多时此问题尤为严重,所以在适当的时候向客户端输出一些内容是有必要的。

(3)尽可能使用Server.Transfer代替Response.Redirect。

这个原因前面已经说过了,请参见Response对象。

(4)使用CodePage使你的网站走向国际化。

[NextPage]

 

2.1.5  Server对象

Server对象通常用来实现以下功能。

l          创建组件实例。

l          获取服务器的物理路径。

l          对字符串进行HTML编码。

l          转向执行其他ASP文件。

下面来看实现这些功能的具体方法。Server对象包含的属性和方法见表2-4。

表2-4  Server对象包含的属性和方法

类    型

名    称

说    明

属性

ScriptTimeout

设置脚本超时。当一个ASP页面在一个脚本超时期限之内仍没有执行完毕,ASP将终止执行并显示超时错误

方法

CreateObject

创建一个服务器组件的实例,如果此组件中实现了OnStartPage 和 OnEndPage方法,那么在调用CreateObject创建实例时将会执行OnStartPage方法

Execute

用来执行一个ASP文件,被执行的ASP文件被看做是当前调用Execute方法的ASP文件的一部分

GetLastError

返回一个ASPError对象,用来描述错误的详细信息。值得注意的是,必须向客户端发送一些数据后这个方法才会起作用

HTMLEncode

将输入的HTML字符串换为HTML编码,如输入“<p>”,输出“&lt;P&gt;”

MapPath

将虚拟路径映射为绝对路径。如使用Access数据库时,为防止下载,将其放在站点应用程序之外,然后通过此方法找到数据库在服务器上的绝对路径

Transfer

停止执行此ASP文件,转向执行另外一个ASP文件。如想用此方法代替Response.Redirect方法,需要在调用Transfer方法前调用Response.Clear清空缓存

URLEncode

将输入的字符串进行URL编码,如输入“http://www.trfsoft.com”,输出“http%3A%2F%2Fwww%2Etrfsoft%2Ecom”

(1)Execute和Transfer方法都不会清空当前页面向缓冲输出的内容而直接转向执行另一页,不同的是,Execute执行完后会返回继续执行下面的语句,而Transfer会完全放弃它下面的语句。

(2)这里最常用的是CreateObject和MapPath两个方法。

2.1.6  Session对象

Session对象通常用来实现以下功能。

l          存储与某次访问相关的信息。

l          设置这个访问的代码页,日期格式等。

l          处理访问开始与结束事件。

下面来看实现这些功能的具体方法。Session对象包含的集合、属性、方法和事件见表2-5。

表2-5  Session对象包含的集合、属性、方法和事件

类    型

名    称

说    明

集合

Contents

使用脚本命令(赋值语句)向Session中存储的数据,可以省略Contents而直接访问,如:Session("var")

StaticObjects

使用<OBJECT>标记定义的存储于Session对象中的变量集合。运行期间不能删除

属性

CodePage

设置当前Session的代码页,参见Response对象的CodePage属性

LCID

设定当前Session的日期、时间或货币的显示格式,参见Response的LCID属性

SessionID

返回Session的唯一标识

Timeout

设置Session的超时时间,以分钟为单位,在IIS中默认设置为20分钟

方法

Abandon

当ASP文件执行完毕时释放Session中存储的所有变量,当下次访问时,会重新启动一个Session对象。如果不显式调用此方法,只有当Session超时时才会自动释放Session中的变量

Contents.Remove

删除Contents集合中的指定变量

Contents.RemoveAll

删除Contents集合中的全部变量

事件

Session_OnEnd

声明于global.asa中,客户端首次访问时或调用Abandon后触发

Session_OnStart

声明于global.asa中,Session超时或者调用Abandon后触发

(1)Session.Abandon调用后,在本ASP页内存储于Session中的变量仍可以使用,直到下一次请求,即访问下一个ASP页面时才会生效,此时SessionID值已改变,并且会再次执行Session_OnStart过程。在Session.Abandon后调用Server.Execute和Server.Transfer时,由于是发生在同一次请求中,所以Session中的变量仍有效。

(2)Contents.RemoveAll方法用于删除Contents集合中的全部变量,它的作用效果是即时的,并且不会放弃(Abandon)当前Session对象,即下次请求时SessionID不变。

(3)Session对象常使用的是变量的存取,如Session("UserName") = strName。

 

2.1.7  ObjectContext对象

ObjectContext对象通常用来实现以下功能。

l          放弃一个事务。

l          接受一个事务。

下面来看实现这些功能的具体方法。ObjectContext对象包含的方法和事件见表2-6。

表2-6  ObjectContext对象包含的方法和事件

类    型

名    称

说    明

方法

SetAbort

放弃当前事务

SetComplete

此方法只是说明可以接受此事务,不必放弃,并不是立刻接受此事务。只有当前文件执行完毕,或者所有参与此事务的组件都调用SetComplete,才接受此事务

事件

OnTransactionAbort

放弃此事务时触发此过程

OnTransactionCommit

接受此事务时触发此过程

(1)某个ASP页面欲使用这种事务机制,或者说要使用ObjectContext,需要在文件的开头加上<%@ Transaction = Required %>。

(2)只要调用一次ObjectContext.SetAbort,就可以放弃此事务。

(3)一般不用显式调用SetComplete,因为ASP默认是如果没有调用SetAbort,则执行完此ASP文件即接受事务。

(4)OnTransactionAbort过程与OnTransactionCommit过程要与上述事务放在同一个文件中。

2.1.8  ASPError对象

ASPError对象通常用来实现以下功能:

处理ASP应用的错误。

下面来看实现这个功能的具体方法。ASPError对象包含的属性见表2-7。

表2-7  ASPError对象包含的属性

类    型

名    称

说    明

属性

ASPCode

返回错误代码

Number

返回COM标准的错误代码

Source

返回错误的源代码,如果可以的话,还会返回它所在的行号

Category

返回一个字符串,用于表明错误类型,如是IIS错误、脚本错误还是组件错误

File

发生错误的文件名

Line

发生错误所在的行号

Column

发生错误所在的列

Description

错误描述

ASPDescription

如果这个错误与ASP相关的话,可以返回更详细的错误描述

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (3828人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 建站公司
· 杰创官网
· 建站工具

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2022 版权所有 鄂ICP备17013400号-1