第七章ASP高级应用ActiveServerPages包括了大量内嵌对象和可安装的ActiveX组件。这些对象以及组件都可以用来拓展ActiveServerPages应用程序的功能,使ASP功能更加灵活、强大。我们在Web服务器上运用Web应用程序进行的最常见和最实用的任务就是访问服务器端的数据库。而用ASP来访问数据库是轻而易举的,我们可以通过ActiveXDataObjects(ADO)访问存储在服务器端的数据库或其他表格化数据结构中的信息。本章主要介绍这方面的内容。通过本章的学习,要求:(1)掌握ASP的内置对象的特点、属性和方法。(2)掌握ASP的内置组件的特点、属性和方法。(3)学会设置ADO数据源的方法。(4)掌握用ASP直接访问数据库中的各种信息的方法和技巧。第一节ASP内置对象一、什么是对象1.对象的基本概念对象是我们要研究和处理的事物,是客观现实世界中的实体,对象既可以是具体的物理实体,又可以是事物的抽象表示。例如,小汽车、电话机、杯子、某某人、某某学校、财务科、总务处、后勤部等都可作为一个对象。任何一个对象都有静态的属性,又有动态属性。例如,电话是一个对象,它的静态属性是,颜色、大小、放置的位置等,而它的动态属性是,铃响、接听、发送等。又例如,人也是一个对象,他的静态属性是,身高、体型、肤色、头发等,而他的动态属性就是,发怒、高兴、说话、表演等。2.对象的属性属性代表了对象的静态特性。大部分属性用来描述类和对象的外观,例如,颜色、大小、位置、形状等,另一些属性用来决定对象的特征,例如,对象如何与数据源相连接、对象的引用标识、对象的标题等。因为,属性的值是可以改变的,所以属性实际上是一个变量。用户可以通过对属性的值的改变来建立或修改一个对象的特征。例如,Response是ASP内置的一种对象,而它有一个属性IsClientConnected可以用来描述浏览器是否仍和服务器连接。若要存取对象的属性,可以写成ObjectName.Property。3.对象的方法方法是用来执行对象的动作,例如,计算机是一种对象,而开机,关机,执行应用程序,扫描硬盘等操作等是这个对象的方法;又例如,Response是ASP的内置对象,而它有一个方法叫Write,可以在浏览器端显示指定的信息。若要存取对象的方法,可以写成ObjectName.Method,例如Response.Write。4.对象的集合集合指的是一群放在一起的“值”(Value)。例如,当浏览者输入网页窗体数据并按下“提交”按钮之后,窗体字段的名称与浏览者输入的数据就会以一个Form形式的集合传给Web服务器。又例如,在ASP对象的QueryString集合中,若要取得username字段或userage字段的值,可以分别写成:Resquest.QueryString(username)和Resquest.QueryString(userage)5.对象的事件事件指的是对象所具有的某种动作。每个对象都可以对一个被称为事件的动作进行识别和响应。事件是一种预先定义好的特定动作,对象能够识别的动作,并由用户或系统激活。在多种情况下,事件是通过用户的交互操作产生的。例如,按下启动按钮、对象被拖动、被改变方向、升高、降低、单击、双击等等。在一个软件中,总会有一些对象在运行时会被我们操作,当然我们不是平白无故去操作一个对象,总是希望这个对象在被我们操作后能做出我们所期望的反应,例如“退出”按钮在被按动后,我们就希望它使软件结束运行。而这一反映即使是同一种对象在不同的软件中,或在同一个软件中的不同地方,我们所需要的反映都是不同的,例如,同样是按钮,“开始”和“退出”在按下后所产生的效果不同。为了使得对象在某一事件发生时能够做出所需要的反应,我们就必须针对这一事件编出相应的程序代码来完成我们的目标。如一个对象的某个事件被编入了相应的代码,那么软件运行时,当这一事件发生(例如按钮被按动),相应的程序段就被激活,并开始执行,若这一事件不发生,则这段程序就不会运行。而没有编有代码的事件,即使发生也不会有任何反应。例如,对一部电话来说,当用户提起听筒时,便激发了一个事件,同样,当用户拨号打电话时也激发了若干事件。二、Request对象ASP内置对象共有以下六个,它们分别是:Request、Response、Application、Session、ObjectContext、Server等,而且每个对象有各自的属性、方法、集合或事件。1.request对象简介request对象可以被用来访问所有从浏览器到服务器间的信息,你也就可以利用request对象来接受用户在html主页的form中的信息。2.Request的语法Request[.集合|属性|方法](变量)对于Request对象它共有4个集合,分别用来访问客户端对Web服务器请求的各类信息,这些集合是:Form、QueryString、Cookies、ServerVariables等。(1)Form集合Form集合是通过使用POST方法,即当Method的属性值为Post时,所有作为请求提交的Form段中的HTML控件单元的值的集合,每个成员均为只读。其语法格式如下:Request.Form(element)[(index)|.Count]其中,参数:①element参数是指定集合要检索的表格元素的名称。②index为可选参数,使用该参数可以访问某参数中多个值中的一个。它可以是1到Request.Form(parameter).Count之间的任意整数。③Count为可选参数,指的是集合中元素的个数Form集合按请求正文中参数的名称来索引。Request.Form(element)的值是请求正文中所有element值的数组。通过调用Request.Form(element).Count来确定参数中值的个数。如果参数未关联多个值,则计数为1。如果找不到参数,计数为0。要引用有多个值的表格元素中的单个值,必须指定index值。index参数可以是从1到Request.Form(element).Count中的任意数字。如果引用多个表格参数中的一个,而未指定index值,返回的数据将是以逗号分隔的字符串。(2)QueryString集合QueryString集合是检索HTTP查询字符串中变量的值,HTTP查询字符串由问号(?)后的值指定。例如,AHREF=“example.asp?string=thisisasample”stringsample/AHREF生成值为“thisisasample”的变量名字符串。通过发送表格或由用户在其浏览器的地址框中键入查询也可以生成查询字符串。其语法格式如下:Request.QueryString(variable)[(index)|.Count]QueryString集合可以让您以名称检索QUERY_STRING变量。Request.QueryString(参数)的值是出现在QUERY_STRING中所有参数的值的数组。通过调用:Request.QueryString(parameter).Count可以确定参数有多少个值。(3)Cookies集合Cookie集合其实是一个标签,当你访问一个需要唯一标识你的站址的Web站点时,它会在你的硬盘上留下一个标记,下一次你访问同一个站点时,站点的页面会查找这个标记。每个Web站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。每个站点的Cookie与其他所有站点的Cookie存在同一文件夹中的不同文件内。一个Cookie就是一个唯一标识客户的标记,Cookie可以包含在一个对话期或几个对话期之间某个Web站点的所有页面共享的信息,使用Cookie还可以在页面之间交换信息。Request提供的Cookies集合允许用户检索在HTTP请求中发送的cookie的值。这项功能经常被使用在要求认证客户密码以及电子公告板、Web聊天室等ASP程序中。其语法格式如下:Request.Cookies(cookie)[(key)|.attribute]其中,参数:①cookie参数是指定要检索其值的cookie。②key可选参数,用于从cookie字典中检索子关键字的值。③attribe参数是指定cookie自身的有关信息。例如,HasKeys只读,指定cookie是否包含关键字。(4)ServerVariables集合大家都知道在浏览器中浏览网页的时候使用的传输协议是HTTP,在HTTP的标题文件中会记录一些客户端的信息,例如,客户的IP地址等等,有时服务器端需要根据不同的客户端信息做出不同的反映,这时候就需要用ServerVariables集合获取所需信息。其语法格式如下:Request.ServerVariables(服务器环境变量)其中,服务器环境变量:①ALL_HTTP客户端发送的所有HTTP标题文件。②CONTENT_LENGTH客户端发出内容的长度。③CONTENT_TYPE内容的数据类型。例如,“text/html”。同附加信息的查询一起使用,如HTTP查询GET、POST和PUT。④LOCAL_ADDR返回接受请求的服务器地址。如果在绑定多个IP地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要。⑤LOGON_USER用户登录WindowsNT的帐号。⑥QUERY_STRING查询HTTP请求中问号(?)后的信息。⑦REMOTE_ADDR发出请求的远程主机(client)的IP地址。⑧REMOTE_HOST发出请求的主机(client)名称。如果服务器无此信息,它将设置为空的MOTE_ADDR变量。⑨REQUEST_METHOD该方法用于提出请求。相当于用于HTTP的GET、HEAD、POST等等。三、Response对象1.Response对象简介Response对象与Request刚好相反,我们已经知道,Request对象是获取客户端HTTP信息的,而Response对象是用来控制发送给用户的信息的,包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置cookie的值。Response的语法如下:Response.collection|property|method2.Response对象属性(1)Buffer属性Buffer属性指的是否在缓冲页输出。当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了Flush或End方法后,服务器才将响应发送给客户端浏览器,服务器将输出发送给客户端浏览器后就不能再设置Buffer属性。因此应该在.asp文件的第一行调用Response.Buffer。(2)Charset属性Charset属性是将字符集名称附加到Response对象中content-type标题的后面。对于不包含Response.Charset属性的ASP页,ontent-type标题将为,content-type:text/html。我们可以在.asp文件中指定content-type标题,例如:%Response.Charset=“gb2312”)%将产生以下结果:content-type:text/html;charset=gb2312要注意的是,无论字符串表示的字符集是否有效,该功能都会将其插入content-type标题中。且如果某个页包含多个含有Response.Charset的标记,则每个Response.Charset都将替代前一个CharsetName。这样,字符集将被设置为该页中Response.Charset的最后一个实例所指定值。(3)ContentType属性ContentType属性是指定服务器响应的HTTP内容类型。如果未指定ContentType,默认为text/HTML。(4)Expires属性Expires属性指定了在浏览器上缓冲存储的页距过期还有多少时间。如果用户在某个页过期之前又回到此页,就会显示缓冲区中的页面内容。如果设置response.exp