六大内置对象简介
认识ASP的六大内置对象,是设计功能强大的Web应用程序的第一步。让我们来看看这六大对象是些什么东西吧。 Request 从客户端取得信息 Response 将信息发送客户端 Server 提供Web服务器的一些组件 Session 储存一个Session会话过程中的用户信息,它仅可被该用户访问 Application 在一个ASP应用程序中可以给不同客户端共享的信息 ObjectContext 用来配合Microsoft Transaction服务器进行分布式处理 现在开始逐一介绍上述的六大对象。 (一)Request对象 通过Request对象,我们可以收集到客户端的Form,Cookies,超连接,或是服务器的还境变量,因此,Request为我们的ASP程序提供的加工的“原材料”,您说它重要吗?没有Request对象的话,那么ASP程序就失去了与客户端联系的交互能立,可以把它想象为我们的眼睛和耳朵。 (二)Response对象 Response对象可以把ASP程序加工后的“产品”,发送给客户,让他们可以看见结果。同时,也可以通过Response对象设置客户端浏览器的状态,比如设置Cookies,Cookies是一种跟踪客户端状态的技术,有的网站利用Cookies来记录你是第几次访问他们的网站,而Cookies就是那些保存在Windows系统目录Cookies里的那些文件,那些文件可以供网站重新读取和设置。用来跟踪您的状态,Request和Response可以说一个对孪生兄弟,一个负责收集,另一个负责输出。 (三)Server对象 Server对象为您的ASP程序的扩展提供的灵活方便的途径,比如说,如果您需要在ASP程序中读写服务器上的某个文件,那么就可以借用“文件存取组件”来读写文件。而Server对象就充当了建立这个组件的实例的角色,需要使用某个组件,必需先建立它的一个Server对象实例,在后面将要介绍的ADO组件,您就能清楚地理解服务器对象的作用了。 (四)Session对象 ASP程序可以说是一个Web的应用程序,传统的HTML页,不能跟踪客户端的情况,比如说客人现在处于那一个页面上,何时离开了这个网站,而Session对象的引入,不但能使上述的问题得以解决,并且能为用户个人保存网站期间(会话)的数据信息,它只对用户个人作用,而对ASP程序中的其他用户是无作用的,聪明的朋友可能和早就猜到其实Session也是利用Cooikes技术来临时保存用户数据。当你把浏览器的Cooikes功能关闭,那么Session对象就失效了,因此设计ASP程序时别忘了这一点哦。 (五)Application对象 既然Session对象的数据是用户私有的,那么ASP程序中必须要有一种能让处于ASP程序中所共同享有的数据信息,这就是Application对象,可以说。Application对象内保存的信息,是可以让同一ASP程序中的所有用户所共享的,比如聊天室里说一句话,聊天室里的所有人都能看见,这里就是应用了Application对象把说话的信息保存起来,再显示出来。而悄悄话既是一种Session对象信息。只有特定的用户能看见。 (六)ObjectContext 这是扩展ASP能力的一个对象,当你需要使用ASP内直接发送EMAIL,或是其它信息时,就少不了它的帮忙。 怎么样?大家应对ASP的六大对象有了一个简单的认识了吧?其实ASP程序本身就是利用这六大对象来变化出那些千变万化的功能。现在转入正题,先认识一下比教重要的对象的用法吧。
从客户端提取数据
认识ASP的六大内置对象,是设计功能强大的Web应用程序的第一步。让我们先来看看这六大对象中负责数据采集的Request对象吧。
我们常常在网上会遇到很多需要填写个人资料,然后提交处理的注册的事情,比如说申请一个免费电子邮箱,常常需要填写一些表格。而对于熟悉网页设计的朋友一定对这个标签不会陌生,现在看看一个小小的例子。
你的名字
看看这个表格,里面包含了一个叫username的文本框,而form的提交对象是test.asp这个ASP程序,也就是说按了“提交”按键后,文本框username的内容将会传递到test.asp这个ASP程序来处理,那么现在就说说如何在test.asp中取得username这个文本框的内容。
这里就需要使用Request对象了。在test.asp的服务端执行的脚本中,也就是位于<%...%>之间的脚本来,只需要使用Request.form("username")就可以取得客户端填写了的内容,比如说要把这个值传给变量user,就可以如下:
<%
............
user=Request.form("username")
............
%>
是不是取得Form内容的方法很简单呢?另外,除了用Form可以传递客户端内容外,用超连接也可以,我们常常看到一些URL是http://www.xxxxxx.com.cn/guestbook.asp?user=realchat这样的地址,那么这表示什么意思呢?
其实这就是把user=realchat这个客户端内容传递给guestbook.asp这个asp程序进行处理。
在guestbook.asp这个asp程序中,我们可以用Request.querystring来取得客户端传来的内容。
<%
user=Request.querystring("user")
%>
这样,就可以把“realchat”这个值赋给user这个变量了。这种情况多是用于免费的留言簿识别不同的用户而采用的,采数可以传递多个,只需要用“&”来分隔,比如:
http://www.xxxxxx.com.cn/guestbook.asp?user=realchat&reno=22
这里传递了两个参数,user和reno。使用Request.querystring("参数名")来分别取得它们。
Requst对象可以取得很多参数,比如说客户机上设置了的COOKIES,服务器变量等。
检取HTTP服务使用的端口可以如下:
port=Request("SERVER_PORT")
SERVER_PORT是一个内定的服务器变量,它指标出HTTP服务当前使用的端口。
服务器变量为ASP程序提供了很多客户端的信息,比如说客户端的IP地址,登录的NT帐号,登录的密码,服务器的Web发行路径。最后这些服务器变量的具体变量名可在实用编程资料中查找。
向客户端发出信息
Request对象是从客户端取的信息的,那么相反,Response是向客户端发送信息,比如上一课的test.asp这个例子,当取得用户的名称后,可以如下处理。
<%
user=Request.form("user")
Response.write "你的名字是:"&user
%>
那么客户端的屏幕上将出现:你的名字是:(您在Form内所填写的东西)
Response.write是常用的方法,因此可以简写为<%="你的名字是:"&user%>。方便吗?
还记得第一个例子中的<%=says%>吧?就是这个原因。
Response对象可以设置向客户端输出的很多参数,如HTML的MIME类型,当然是少不了向客户端写入Cookies,如果需要往客户端写入一个叫user的Cookies,则可以有如下的语句。
<%
................
response.cookies("user")="无名氏")
response.cookies("user").expires="JULY 31,2002"
................
%>
程序的第一项是设置Cookies的user值为“无名氏”,而第二项则是设置user这个Cookies的有效时间,您总不能让一个Cookies永远不消失有效吧?因此你可以用它来设定Cookies在什么时间前保持有效。
好了,向客户端写入了一个Cookies,现在大家瞧一瞧这个例子。看看输出会是什么东西?
<%
.........
user=Request.cookies("user")
%>
<%=user%>
没有忘记吧?输出在浏览器上的结果应改只有“无名氏”这三个字。
当我们运行一大段ASP程序时,为了让客户端有一个连续的感觉,因此可以适当使用一下这个Response对象的buffer属性。
如下面程序
<% @language=VBScript%>
<%
Response.buffer=true
%>
........//一段HTML文本(A)
<%
一段执行时间很长的ASP脚本
%>
.......//一段HTML文本(B)
<%
Response.flush
%>
当我们不把buffer属性设为True,那么客户端将会想看到(A)的HTML画面,然后等了一段时间,最后才看到(B)的画面,这样处理上来不太好,所以加入一个buffer属性为True,则(A)的输出先保存在服务器端的缓冲区中,然后处理完脚本,再把(B)加如缓冲内,最后遇到Response的flush方法,就把缓冲区的内容一次发送到客户端,因此感觉上会连续一点,另外,Buffer属性在高级编程中可以起到纠错的能力,因次HTML内容在处理过程中还没有发到客户端,可以用Clear的方法清空了服务器缓冲区的所有HTML文本,这样在某种情况下很有用。
另外,使用Redirect方法可以把客户引领到另一个新的页面,程序如下。
<% @language=VBScript%>
<%
Response.buffer=true
if hour(now)>12 then
Response.Redirect "1.htm"
else
Response.Redirect "2.htm"
end if
Response.flush
%>
可以看明白上面的程序吧?当时间是12点后,就把客户引到1.htm这个网页上来,反之就定向到2.htm这个页面上来。Response对象有很多属性和方法,这些只需要使用前查找参考资料就可以了。同样您可以在编程资料中得到这些资料。
功能强大的内置组件
ASP提供了几个内置的组件给我们使用,它们是广告轮换组件,浏览器兼容组件,文件超连接组件,浏览器兼容组件,文件存取组件,数据库存取组件。
需要使用这些组件,必须使用Server对象中的CreateObject方法来声明它们的实例。先在简要介绍它们的作用。
(一)广告轮换组件
使用它你可以轻松地在主页上交替地变换广告,当用户每次进入你的页面,上面所显示的广告都可以不同的,这就是它的作用,而且,它还可以根据一定的比率,显示广告,使到每个广告显示的次数都很合理。
当然,使用客户端脚本的朋友会说,实现这样的功能不难呀,何须ASP,没错,但如果需要显示的是几十副广告,那么编脚本是不是很困难,如果引用广告轮换组件,那么它可以轻松地为你管理那些广告BANNER,不需要你去粗心。
看看它的用法,广告轮换组件有三个属性BORDER,CLICKABLE,TARGETFRAME。它们分别指定图片的边框大小,是否提供超连接,还有连接的目标框。
看看程序
<%
Set ad=Server.CreateObject("MSWC.AdRotator") ’创建对象实例
ad.BorderSize(0) ’设置边框为零
%>
<%=ad.GetAdvertisement("/ads/adtxt.txt")%> ’从文件中取得连接图片的信息并显示
广告轮换组件很容易使用,现在看看那个特定的文本文件的结构。
辅助文件的写法
ADREDIR.ASP
<%
Response.redirect(request.querystring("URL"))
%>
*adtxt.txt的数据
REDIRECT /ADREDIR.ASP ‘点击后处理的ASP程序名
WIDTH 440
HEIGHT 60
BORDER 1
’广告部分
ADPIC/MS.GIF ‘图片的路径
HTTP://WWW.XXXX.COM.CN ‘连接地址
XXX公司主页 ‘广告说明
20 ‘显示的比率
‘重复广告数据
。。。。
。。。。
怎么样?广告轮换组件是不是很简单易用?快试一试吧。
(二)浏览器兼容组件
我们编制ASP程序的时侯,常常需要了解客户端所使用的浏览器类型,它所支持的属性等,那么如何确定浏览器类型呢?我们可以用浏览器兼容组件。
看看它的用法
<%
Set browser=Server.CreateObject("MSWC.BROWSERTYPE")
%>
只需要在程序中声明这句,那么你就可以根据browser的属性来确定客户端使用的浏览器了。
如果是用IE4.0则
browser.browser=MSIE
browser.version=4.0
browser.FRAMES=True 支持FRAME
。。。。
具体资料可以在编程资料中查找。
(三)文本存取组件
看看例子:
*建立一个文本文件
<%
Set FS=Server.CreateObject("SCRIPTING.FILESYSTEMOBJECT")
Set A=FS.CREATETEXTFILE("C:\TESTFILE.TXT",TRUE)
A.WRITELINE "在C:盘下创建一个名叫TESTFILE.TXT的文件,无论文件是否存在也复盖它"
A.CLOSE
%>
文件testfile.txt创建成功了,看看它的内容是什么?
反之打开一个文件
<%
Set FS=Server.CreateObject("SCRIPTING.FILESYSTEMOBJECT")
Set A=FS.OpenTEXTFILE("C:\TESTFILE.TXT")
mess=A.readline
A.CLOSE
%>
<%=mess%>
结果输出了什么?正好是刚才写入的那句话:
在C:盘下创建一个名叫TESTFILE.TXT的文件,无论文件是否存在也复盖它
常用的内置组件主要是这三个,另外一个极为重要,可以说是ASP精髓的数据库存取组件,我们独立地解说它的用法。大家一定要学会灵活使用数据库存取组件--ADO
ADO数据库引擎
在众多的ASP应用程序中,数据库的访问能力是必不可少的。而数据库访问组件则为我们提供了灵活方便的数据库访问能力,你可以使用它连接任何符合ODBC标准的数据库。包括SYBASE,MSSQL SERVER等等,也可以使用ACCESS等的小型数据库,而这类数据库为开发测试提供了极好的测试条件,好了,废话少说,开时来认识我们的ADO吧。
ADO主要有三个对象,分别是connection,Command,Recordset,现在分别解说一下它们所起的作用。
Connection对象就是使ADO与数据库之间建立一个同道,就象我们打电话,需要先拨号,然后才能与对方交谈,而Connection就是起了一个类似拨号连线的作用,任何需要对数据库进行操作,必须先“拨号连线”---建立Connection,然后才能进行。
而Command对象就是对数据库进行发号施令,比如需要建立新的索引,执行查询等,它可以透过使用标准的SQL数据库操作语言得以实现。
Recordset对象是一个数据记录集,它包含了我们检索出来的记录数据,透过它我们可以直接对数据库进行修改。这个对象很重要。
总的来说,ADO对数据库操作的方法有很多种,比如说连接一个数句库,光了连接语法就可以组合出很多种,但我们不需要全部都学得很好,程咬金只有三板斧,我们只需要练熟一套熟于自己的操作方法就很好了。下面我只介绍两种我最常用的做法,记好这两招,设计大部份的数据库程序可以说是没有问题的了。
(一)用Connecttion对象连接数据库
连接数据库的语法很多,我只说两种,一种需要配置ODBC数据源的数据源名称,这种方法有的时侯很不好用,因为比如你需要远程开发一个数据库的Web程序,总不能每次都跑去配置一下数据源名称吧。但作为大型的数据库程序,也只能使用这种方法啦,叫网管帮你配一下就可以了,不过老麻烦人可能不大好。