ASP七大对象说明分析 /*-------------------ASP文档参考集-----------------------*/ *-->作者:草履虫 *-->时间:2007-4.28---2007-4.30(原来是自己编写的手册,现在发在这里) *-->联系:caolvchong@gmail.com *-->文档功能: 1.复习了ASP,加深了对ASP结构的理解和ASP的体会 2.可以用来做ASP参考,自己写的,参考起来更方便 这是第二部分:ASP七大对象 /*---------------------------ASP七大对象----------------------------*/ *-->Application对象: 功能:在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数 据.而且,Application对象还有控制访问应用层数据的方法和可用于在应用程序启 动和停止时触发过程的事件(OnStart事件和OnEnd事件) 属性:没有内置的属性 集合:即用户自定义的属性 Application 对象的集合及说明: Contents:没有使用元素定义的存储于Application对象中的所有变量(及 它们的值)的一个集合.包括Variant数组和Variant类型对象实例的引用 StaticObjects:使用元素定义的存储于Application对象中的所有变量 (及它们的值)的一个集合 对应的例子: 设置application属性值: Application("MyVar") = "Hello" Set Application("MyObj") = Server.CreateObject("MyComponent") 方法: Contents.Remove():移去某个application集合 Contents.Removeall():移去所有的Application集合 Lock():阻止其他客户修改存储在Application对象中的变量,以确保在同一时刻仅 有一个客户可修改和存取 Application 变量.如果用户没有明确调用Unlock 方法,则服务器将在.asp文件结束或超时后即解除对 Application 对象的锁 定 Unlock():使其他客户端可以在使用Lock方法锁住Application对象后,修改存储在 该对象中的变量.如果未显式调用该方法,Web服务器将在.asp文件结束或超时 后解锁Application对象 一个综合点的例子: 在1.asp中: '设置3个application属性值 application("chong1")="第1个application集合项" application("chong2")="第2个application集合项" application("chong3")="第3个application集合项" '设置的属性值都保留在application.contents中,基数从0开始,因此可以用 'for循环读出来 '这里总结下contents集合的属性: 'count属性:返回集合中所有的项数,返回值是个整数 'item属性:用于设置或返回集合中一个特定成员的值,item属性是 contents '集合的默认属性,因此.item(x)相当于.(x) 'key属性:key(x)返回对应的属性名,如上面 application.contents.key(1) '将返回chong1 For i = 1 to Application.Contents.Count Response.Write (Application.Contents.item(i)) Next 在2.asp中: '2.asp和1.asp共享了application对象内容,因此可以对该集合元素进行修 改或删除等 application("chong1")="我被修改了" '修改application属性值 application.Contents.Remove("chong2") '删除application属性值 for each j in application.Contents 'for each形式访问application response.Write(Application.Contents.item(j)) next 事件:至于两个事件onstart()和onend()等总结Global.asa文件时介绍 经验:通常地,当要修改某个application值时,应当先用Lock()锁定它,然后再修改,修 改完后再Unlock(),防止多个用户并发访问该对象 常用:设置,修改和删除application集合,结合lock和unlock方法 *-->Session对象: 功能:Session对象存储特定的用户会话所需的信息.当用户在应用程序的页之间跳转 时,存储在Session对象中的变量不会清除,而用户在应用程序中访问页面时,这些 变量始终存在.当用户请求来自应用程序的Web页时,如果该用户还没有会话,则 Web 服务器将自动创建一个Session对象.当会话过期或被放弃后,服务器将终止该 会话(和application差别是session不是共享的,各个用户有各自的session,由此 可以用来验证用户的身份) 集合:和application一样地,session具有contents和StaticObject两个集合 属性: CodePage:读/写.整型.定义用于在浏览器中显示页内容的代码页(Code Page).代码 页是字符集的数字值,不同的语言和场所可能使用不同的代码页.例如,650001 是UTF-8,936为GB2312 LCID:读/写.整型.定义发送给浏览器的页面地区标识(LCID).LCID是唯一地标识地 区的一个国际标准缩写,例如,2057定义当前地区的货币符号是'£'.LCID也可 用于FormatCurrency等语句中,只要其中有一个可选的LCID参数.LCID也可在 ASP处理指令<%...%>中设置,并优先于会话的LCID属性中的设置. SessionID:只读.长整型.返回这个会话的会话标识符.SessionID属性返回用户的 会话标识.在创建会话时,服务器会为每一个会话生成一个单独的标识.会话标 识以长整形数据类型返回.在很多情况下 SessionID 可以用于 WEB 页面注册 统计 Timeout:读/写.整型.为这个会话定义以分钟为单位的超时周期.如果用户在超时周 期内没有进行刷新或请求一个网页,该会话结束.在各网页中根据需要可以修 改.缺省值是20min,在使用率高的站点上该时间应更短 方法: Abandon():Abandon方法删除所有存储在Session对象中的对象并释放这些对象的 源.如果您未明确地调用Abandon方法,一旦会话超时,服务器将删除这些对象. 当服务器处理完当前页时,下面示例将释放会话状态 另外,session和application一样,具有contents.remove()和 contents.removeall()方法 事件:至于两个事件onstart()和onend()等总结Global.asa文件时介绍 常用:设置,修改,删除session,另外timeout也是常用的,记住一点,session依赖cookies,当浏览器关闭或者不 支持cookie时将不能访问到session *-->request对象: 功能:Request对象在HTTP请求期间,检索客户端浏览器传递给服务器的值 集合: ClientCertificate:当客户端访问一个页面或其他资源时,用来向服务器表明身份 的客户证书的所有字段或条目的数值集合,每个成员均是只 读.ClientCertificate集合从Web浏览器发布请求中获取验证字段(由X.509 标准指定).如果Web浏览器使用SSL3.0/PCT1协议(也就是说,它使用以 http://开头的URL,而不是http://)连接服务器及服务器请求验证,则浏览器 将发送验证字段.如果没有发送验证,ClientCertificate集合将返回EMPTY.必 须先将Web服务器配置为要求客户端验证,然后才能使用ClientCertificate 集合. Cookies:根据用户的请求,用户系统发出的所有cookie的值的集合,这些Cookie仅 对相应的域有效,每个成员均为只读,cookies也具有count,item,key三个属 性,用法可以类比上面提到的application中提到的.另外,cookies还有个属性 haskeys,指明cookie是多值还是单值的,多值返回true,单值返回false Form:的属性值为POST时,所有作为请求提交的
段中的HTML控件单元的值的 集合,每个成员均为只读,form也具有count,item,key三个属性 QueryString:依附于用户请求的URL后面的名称/数值对或者作为请求提交的且 METHOD属性值为GET(或者省略其属性)的,字符串由问号(?)后的值指定,或 中所有HTML控件单元的值,每个成员均为只读,Querystring也具有 count,item,key三个属性 ServerVariables:随同客户端请求发出的HTTP报头值,以及Web服务器的几种 环境变量的值的集合,每个成员均为只读,ServerVariables也具有 count,item,key三个属性servervariables参数我打印在了"servervariables 参数集"文档里了 属性: TotalBytes:指定客户端在请求正文中发送的总字节数.该属性只允许读 方法: BinaryRead():获取作为POST请求的一部分而从客户端传送到服务器的数据.此方 法获取来自客户端的数据并将其储存在SafeArray中.SafeArray是一个数组,其中 包含维数和边界信息,通俗地说,安全数组就时维数以及维数的上下限都确定的数组 BinaryRead方法用于读取作为POST请求的一部分从客户端发出的未加工数据.此方 法用于在底层访问数据,与此相反,Request.Form集合用于查看在公告请求中发送 的表格数据.一旦调用了BinaryRead,则引用Request.Form集合中的任何变量都将 导致错误发生.反之,一旦引用了Request.Form集合中的一个变量,则调用 BinaryWrite也将导致错误发生.请记住,如果在访问Request集合中的变量时未指 定该变量属于哪一个子集,将搜索Request.Form集合并强制使用上述规则. 常用:对于表单的提交或者是页面之间的参数传递,request起着重要的作用,区分好 Form和QueryString两个区别, 当而只用request,省略这两个集合时,asp会自动调整,但这样做是不好的.对于表 单,通常request是通过 表单元素的name来获得表单元素的值(value) 另外,在无组件上传文件时,TotalBytes用来获取上传文件的大小,BinaryRead() 用来获取上传表单的所有内容. 当然,如果想获得文件内容,需要进行对BinaryRead()获得的内容进行分析截取 *-->response对象: 功能:将输出发送到客户端,刚好和request相对 集合: cookies:在当前响应中,发回客户端的所有cookie的值,这个集合为只写 例子: 'Expires设置过期事件,时间格式#英文月单词 数字日期,4位年份# response.cookies("name")="草履虫" response.cookies("name").Expires=#May 11,2007# '至于读就要用request.cookies了 name=request.cookies("name") '这样name就获得了"草履虫" '利用cookies可以做免密码登录,判断用户是否登录过以及由这些触发的事件等 等 'cookie也有count,item和key属性 '单个cookie属性还有dimain,haskeys,path,secure属性,具体的等用到时候再查 属性: Buffer=True|False:读/写,布尔型,表明由一个ASP页所创建的输出是否一直存放 在IIS缓冲区,直到当前页面的所有服务器脚本处理完毕或Flush、End方法被 调用.在任何输出(包括HTTP报头信息)送往IIS之前这个属性必须设置.因此 在.asp文件中,这个设置应该在<%@ LANGUAGE=...%>语句后面的第一行.ASP3.0 缺省设置缓冲为开(True),而在早期版本中缺省为关(False) CacheControl:读/写,字符型,设置这个属性为"Public"允许代理服务器缓存页面, 如为"Private"则禁止代理服务器缓存的发生. Charset:读/写,字符型,在由服务器为每个响应创建的HTTP Content-Type报头中附 上所用的字符集名称(例如:ISO-LATIN-7) Content Type="MIME-type":读/写,字符型,指明响应的HTTP内容类型,标准的MIME 类型(例如"text/xml"或者"Image/gif").假如省略,表示使用MIME类型 "text/html",内容类型告诉浏览器所期望内容的类型,关于MIME列表,打印在 MIME参考文档里,需要时可以去参考 Expires:读/写,数值型,指明页面有效的以分钟计算的时间长度,假如用户请求其有 效期满之前的相同页面,将直接读取显示缓冲中的内容,这个有效期间过后,页 面将不再保留在私有(用户)或公用(代理服务器)缓冲中.如果希望一个文件立 即终止,可以将该属性值设置为一个非常大的负数.一个文件内多次设置了 expires属性将使用最早的时间/日期为该文件的终止时间(是一个相对时间) ExpiresAbsolute:读/写,日期/时间型,指明当一个页面过期和不再有效时的绝对日 期和时间.在未到期之前,若用户返回到该页,该缓存的页就显示.如果未指定时 间,该主页在当天午夜到期.如果未指定日期,则该主页在脚本运行当天的指定 时间到期 IsClientConnected:只读,布尔型,返回客户是否仍然连接和下载页面的状态标志. 在当前的页面已执行完毕之前,假如一个客户转移到另一个页面,这个标志可用 来中止处理(使用Response.End方法) PICS:只写,字符型,创建一个PICS报头并将之加到响应中的HTTP报头中,PICS报头 定义页面内容中的词汇等级,如暴力、性、不良语言等 Status:读/写,字符型,指明发回客户的响应的HTTP报头中表明错误或页面处理是 否成功的状态值和信息.例如"200 OK"和"404 Not Found" 方法: AddHeader "name","content":通过使用name和Content值,创建一个定制的HTTP 报头,并增加到响应之中.不能替换现有的相同名称的报头.一旦已经增加了一 个报头就不能被删除.这个方法必须在任何页面内容(即text和HTML)被发往客 户端前使用 AppendToLog("string"):当使用"W3C Extended Log File Format"文件格式时,对于 用户请求的Web服务器的日志文件增加一个条目.至少要求在包含页面的站点 的"Extended Properties"页中选择"URI Stem".string为要添加到日志文件中 的文本.由于IIS日志中的字段由逗号分隔,所以该字符串中不能包含逗号 (,).字符串最大长度为 80 个字符 BinaryWrite():在当前的HTTP输出流中写入Variant类型的SafeArray,而不经过 任何字符转换.对于写入非字符串的信息,例如定制的应用程序请求的二进制数 据或组成图像文件的二进制字节,是非常有用的 Clear():当Response.Buffer为True时,从IIS响应缓冲中删除现存的缓冲页面内 容.但不删除HTTP响应的报头,可用来放弃部分完成的页面 End():让ASP结束处理页面的脚本,并返回当前已创建的内容,然后放弃页面的任何 进一步处理 Flush():发送IIS缓冲中所有当前缓冲页给客户端(立即发送缓冲区中的输出).当 Response.buffer为True时,可以用来发送较大页面的部分内容给个别的用户. 如果未将Response.Buffer设置为TRUE,则该方法将导致运行时错误 Redirect("url")通过在响应中发送一个"302 Object Moved" HTTP报头,指示 浏览器根据字符串url下载相应地址的页面,浏览器重定向到URL. Write("string"):在当前的HTTP响应信息流和IIS缓冲区写入指定的字符,使之成 为返回页面的一部分.该值不能包括字符组合%>,如果需要,可用转义序列%\>代 替.Web服务器在处理脚本时,将转换这一转义序列还有一种格式输 出:<%=...%>,但这要在asp和html之间转换,速度减慢,最好的办法是一行 response.write(),字符串用&连接常用:cookies,buffer,content type, expires,status,binarywrite,clear,end,flush,redirect,write这些都是很 常用的和浏览器交互的重要成分,cookies用于客户身份方面,和它相关的有 expires;buffer以及和buffer相关的clear,flush,end这些用于缓存 的控制;content type最常用于xml和图像内容的输出;stutas用于判断状态, 特别在xmlhttp中;write用于输出;redirect用于转接内容;binarywrite一般 用于接收上传的文件内容 *-->server对象: 功能:提供对服务器上的方法和属性的访问.其中大多数方法和属性是作为实用程序的功 能服务的 属性: ScriptTimeout:整型,缺省值为90秒,设置或返回页面的脚本在服务器退出执行和 报告一个错误之前可以执行的时间(秒数).达到该值后将自动停止页面的执行, 并从内存中删除包含可能进入死循环的错误的页面或者是那些长时间等待其他 资源的网页.这会防止服务器因存在错误的页面而过载.对于运行时间较长的页 面需要增大这个值 方法: CreateObject("identifier"):创建由identifier标识的对象(一个组件、应用程序 或脚本对象)的一个实例,返回可以在代码中使用的一个引用.可以用于一个虚 拟应用程序(global.asa页)创建会话层或应用程序层范围内的对象.该对象可 以用其ClassID来标识,如"{clsid:BD96C556-65A3...37A9}"或一个ProgID串 来标识,如"ADODB.Connection",通常我们使用ProgID 注意下面几点: 1.默认情况下,由Server.CreateObject方法创建的对象具有页作用域.这就是 说,在当前ASP页处理完成之后,服务器将自动破坏这些对象 2.可以通过将变量设置为 Nothing 或新的值来破坏对象 3.不能创建与内建对象同名的对象实例 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字符及其转换字符有: # 用来标志特定的文档位置 %23 % 对特殊字符进行编码 %25 & 分隔不同的变量值对 %26 + 在变量值中表示空格 %2B / 表示目录路径 %2F \ 表示目录路径 %5C = 用来连接键和值 %3D ? 表示查询字符串的开始 %3F 空格 %20 . 句号 %2E : 冒号 %3A *-->ASPError对象: 由于错误机制IIS已经能识别定位,暂时略过不深入了 *-->ObjectContext对象: 功能:控制ASP的事务处理.事务处理由Microsoft Transaction Server (MTS)管理 事件: OnTransactionAbort:由放弃的事务处理事件激发,在脚本完成处理后发生 OnTransactionCommit:由成功的事务处理事件激发,在脚本完成处理后发生 方法: SetAbort:显式的放弃一次事务处理 SetComplete:覆盖前面任何调用ObjectContext.SetAbort方法的调用 由于没有涉及,等涉及时深入,暂时了解即可