ASP动态网页设计教程_第1页
ASP动态网页设计教程_第2页
ASP动态网页设计教程_第3页
ASP动态网页设计教程_第4页
ASP动态网页设计教程_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

15.1.1Request对象简介

Request对象是ASP内置对象中较为重要的一类对象。主要负责的是从客户端获得具体的用户数据信息。也就是说,可以使用Request对象访问任何基于HTTP请求传递的所有信息,包括从HTML表格用POST方法或GET方法传递的参数、cookie和用户认证。Request对象使您还能够方便的访问客户端发送给服务器的二进制数据。Request对象把用户信息保存在几个集合中,供ASP应用来使用。

Request的语法:Request[.collection\property\method](variable)表5-1是Request对象集合的相关变量。变量说明QueryStringHTTP请求中查询字符串中变量的值Form存取用户在窗体中输入的相关字段的值Cookies获取客户端中Cookies的内容ServerVariables指定的服务器环境变量的值ClientCertificate在发送HTTP请求中储存的客户端证书中的字段值当用户不指定集合的名称时,ASP默认为以QueryString、Form、Cookie和ServerVariable的顺序搜索所有的集合,当发现匹配的变量时,就认定他是要引用的成员。当然,一般我们在使用时都指定是哪个集合成员,以便于提高程序的效率。例如:Request.Form("yourname")变量说明QueryStringHTTP请求中查询字符串中变量的值Form存取用户在窗体中输入的相关字段的值Cookies获取客户端中Cookies的内容ServerVariables指定的服务器环境变量的值ClientCertificate在发送HTTP请求中储存的客户端证书中的字段值25.1.2获取信息的方法Form

1、使用Form集合获取信息我们使用Form变量是用来获取用户在窗体中填写的相关信息。但是在使用Request.Form的对象时,HTML标记中的<FORM>必须使用“POST”方法,否则将无法取得窗体中的字段信息。

Form的用法:Request.Form(Element)[(Index).Count]其中,Request.Form(Element)的值为请求正文中所有Element值构成的一个数组,通过调用Request.Form(Element).Count来确定参数中值的个数。如果参数未进行关联,则Count的值为1。如果找不到该项参数,则为0。如关联了多个值,则必须指定Index的值。Index的值为1到Request.Form(Element).Count中的任意整数。下面我们用一个例子来说明一下。35.1.2获取信息的方法Form(实例)【例5-1】程序名:exam5-1.htm<html><body><formmethod="post"action="exam5-1.asp">姓名:<inputtype="text"name="stuname"><br>性别:<selectname="gender"><option>男</option><option>女</option></select><br>您的爱好有:<br><inputname="hobby"type="checkbox"value="体育">体育<inputname="hobby"type="checkbox"value="购物">购物<inputname="hobby"type="checkbox"value="阅读">阅读<br><inputtype="submit"name="Submit1"value="提交"><inputtype="reset"name="Submit2"value="重置"></form></body></html>程序名:exam5-1.asp<%@Language=VBScript%><%Response.Expires=0SName=Request.Form("stuname")SGender=Request.Form("gender")%><html>您的姓名:<%=SName%><Br><Br>性别:<%=SGender%><Br><Br><%Response.Write"您的爱好有:<Br>"Fori=1toRequest.Form("hobby").CountResponse.WriteRequest.Form("hobby")(i)&"<Br>"Next%></body></html>45.1.2获取信息的方法QueryString

2、使用QueryString集合获取信息

QueryString集合:一般用于检索客户HTTP请求中字符串变量的值。

QueryString的用法:

Request.QueryString(Variable)[(Index)|.Count]其中,Variable指的是查询字符串中要检索的变量名称,Index和Count的用法类似于Form集合的用法。还有要说明的是,通常我们在地址栏中都是以QueryString变量的方法传送变量名及数值。而且需要注意变量的名称与内容必须放在“?”符号的后面。我们以一个简单的例子来说明其用法。55.1.2获取信息的方法QueryString(实例)【例5-2】程序名:exam5-2.htm<html><head><title>Thisisatest!!</title></head><body>用户发送的字符串变量为strtest,内容为:<fontcolor=red><%=request.querystring("strtest")%><Br></font></body><html>在你的IE中输入http://localhost/aspweb/chapter5/exam5-2.asp?strtest=asppro,这时,IE会显示如图5-2所示。65.1.3得到服务器属性的方法ServerVariables当我们想获取服务器端的各种信息时,我们可以用ServerVariables集合来获得。

ServerVariables的用法:

Request.ServerVariables(ServerEnvironmentVariable)

【例5-3】程序名:exam5-3.asp<html><body><form><tableborder=1><%foreachiinRequest.ServerVariables%><tr><td><%=i%></td><td><%=Request.ServerVariables(i)%></td></tr><%next%></table></form></body></html>读者在运行该程序以后即可看到所有的服务器端的相关参数,如图5-3所示。有兴趣的读者可以试着根据自己所需要获得的参数来编写程序,以获取服务器端的参数。75.2.1Response对象简介第一节我们谈到的Request对象是从客户端获取信息,而Response对象恰恰相反,它的作用是将ASP程序运行后的结果信息发送到客户端。Response对象不像Request对象那么简单,它具有很多的集合、属性和方法。在众多的类别中,我们经常用到的是Write方法、Redirect方法以及Buffer属性。在以下的几节中我们会重点介绍它们的用法。首先,我们来看看Response对象的基本用法:

Response.collection|property|method

1、Response的属性

Response对象具有很多属性,具体情况如表5-3所示。属性说明*Buffer说明了页输出是否有缓冲。ContentType指定即将开始被送至客户端浏览器的信息种类,默认值是text/HTML。Expires在浏览器中缓存的页面超时前,指定缓存的时间。Status服务器返回的状态行值。IsClientConnected该值表明了客户端与服务器的状态是连接还是断开85.2.5

Request对象和Response对象的综合使用【例5-5】演示如何向服务器发送数据,在提交表单后如何显示出提交的结果。程序名:exam5-5.asp<html><body><%Response.Expires=0IfRequest.ServerVariables("Content_Length")<>0Then'通过Content_Length来判断时候已经提交过信息strName=Trim(Request.Form("yourname"))'使用Trim函数来删除首尾多余的空格,下同!strSex=Trim(Request.Form("sex"))strLiuyan=Trim(Request.Form("message"))strMessage=Replace(strLiuyan,vbcrlf,"<br>"&vbcrlf)%><html><body>您的姓名:<%=strName%><br>性别:<%=strSex%><br>留言:<br><br><br><%=strMessage%><br><br><br><%Response.Write"您共选择了"&Request.Form("hobby").Count&"项爱好:"&"<br>"Fori=1toRequest.Form("hobby").CountResponse.WriteRequest.Form("hobby")(i)&"<br>"Next%></body></html><%Else%><html><body><formMethod="post"action="<%Request.ServerVariables("Script_name")%>">姓名:<inputtype="text"name="yourname"><br>性别:<selectname="sex"><option>男</option><option>女</option></select><br>留言:<textareaname="message">欢迎请填写完您的留言</textarea><br>您的爱好有:<br><inputname="hobby"type="checkbox"value="体育">体育<inputname="hobby"type="checkbox"value="购物">购物<inputname="hobby"type="checkbox"value="阅读">阅读<br><inputtype="submit"name="Submit1"value="提交"><inputtype="reset"name="Submit2"value="重置"></form></body></html><%EndIf%>其运行结果如图5-5-1、图5-5-2所示。95.3.1Cookies集合简介

Cookies可以理解成存放在客户端的相关数值的集合,它经常被用于在客户端上存储一些数据,从而在下一次客户重新登陆该网站时它是有效的。也就是说:第一次有服务器端写入客户端的系统中。以后每次访问该站点时,客户端都是先发送Cookie到服务器端,由服务器进行分析,分析完成以后产生HTML代码再返回给客户端。比方说:现在很多高校图书馆的主页上都允许你自定义你的WEB站点--我的图书馆。实际上是根据你自己的喜好设置一些参数选项。站点在你的客户机上存储一个Cookie,并在每次访问该站点时检索这个Cookie。站点从Cookie中的参数中就会知道你是谁,你曾经访问过本站以及根据你设定的参数进行界面以及其他选项的更改。前面我们已经讨论过,可以用Response对象将Cookie写入客户机,同时,Request对象的Cookie集合也允许用户从客户机上检索Cookie的值。

Cookie集合的用法为:

Request.Cookies(Cookie)[(Key)|.Attribute]105.3.2Cookies集合的操作写入与读取我们一般用Response对象的Cookies来写入Cookies

Cookie可以用两种方式来写入,单值cookie实际上是一个一般的类ASP集合。我们说,在ASP中,集合的每个成员可能自身也是一个集合,包含这种信息的cookie通常被称为多值Cookie。创建一个单值的Cookie较为简单,如下所示:Response.Cookies("FieldsName")=变量或字符串;创建一个多值的cookie,可以使用如下命令:Response.Cookies("FieldsName")("Sub-Item-Name")="Sub-Item-Value"。Cookies的Response.Cookies程序段必须放在〈Html〉标记之前,且不可以有其它的Html代码。另外,我们还必须在Cookies中使用Expires设定有效期,Cookies才能真正地写入客户端的硬盘中,否则只是临时的。

具体用法为:Response.Cookies("FieldsName")=变量或字符串如:Response.Cookies("stuname")="LiMing"

读取Cookies的基本语法为:Request.Cookies("CookieName")可以将Request值当作一个变量看待,执行下面的代码,将取回名字为stuname的cookie值,并存入变量MyCookie:

MyCookie=Request.Cookies("stuname")执行下面的代码,将判断名字为stuname的cookie值是否为“Yes”:

IfRequest.Cookies("stuname")="Yes"then115.3.3Cookies集合的属性

ASP的属性有四种:Domain,Expires,HasKey以及Path。首先,我们来看看命名Cookie时要用到的两个属性:Domain和Path属性。同其他变量的命名一样,合理的命名cookie,有利于在程序中方便的使用它。你可以使用下面的2个Cookie属性对Cookie变量进行命名:

域属性(Domain):域属性表明Cookie由哪个WEB网站产生或者读取,默认情况下,Cookie的域属性设置为产生它的网站,但你也可以根据需要改变它。相关代码如下:Response.Cookies("stuname").Domain=""

路径属性(Path):路径属性可以实现更多的安全要求,通过设置WEB网站上的精确路径,我们能够限制Cookie的使用范围。例如:Response.Cookies("stuname").Path="/lib/sub/path"

有效期属性(Expires):通常情况下,当用户的浏览器被关闭时,Cookie就不存在了。但是在很多种情况下,我们希望能更长时间地在客户端的计算机上保存Cookie。这时候,我们要用到Cookie的Expires属性。通过下面的代码,我们可以设置Cookie的使用到期时间为2008年7月1日:

Response.Cookies("CookieName").Expires=#July01,2008#或者,将设定cookie的过期时间为“Cookie的创建时间+365日”:

Response.Cookies("CookieName")=Date+365

HasKey属性:如果Cookies集合是如前面所说的多值Cookies时,我们可以使用该属性来遍历完整的Cookies集合。下面通过一段代码来说明HasKey的用法。ForEachobjItemInRequest.Cookies

IfRequest.Cookies(objItem).HasKeyThen

ForEachobjItemKeyinRequest.Cookies(objItem) Response.WriteobjItem&"("&objItemKey&")=" &Request.Cookies(objItem)(objItemKey)&""

Next

Else

Response.WriteobjItem&"="&Request.Cookies(objItem)&""

EndIfNext125.3.4Cookies集合的应用下面我们通过两个具体的例子来说明Cookies的用法。我们假定你需要做一个网站,在网站中你想做一个调查,每个用户初次访问时都需要填写好注册信息,当日后再访问时,就不需要再填写了。利用Cookie,就可以非常圆满地解决这个问题。

<%

Sname=Request.Cookies("stuname")

IfSname=""then

Response.Cookies("stuname")="x"

Response.Cookies("stuname").Expires=#July01,2008#

Response.Redirect"stu.asp"

Else

'其它的ASP代码

Endif

%>我们来分析一下这段代码:首先,我们读取了名字为stuname的Cookie的值。然后,判断该值是否存在具体的数值,如果不存在,就创建该Cookie值,设置它以后转到stu.asp页面。当用户再次访问它时,因为已经存在了Cookie值,所以,就不会再转到stu.asp页面,而是继续执行以后的ASP代码了。再来看另外一个例子。这个例子是利用使用Cookies使当用户第一次访问该站点时显示欢迎信息。135.3.4Cookies集合的应用(实例)【例5-6】程序名:exam5-6.asp<%RequestName=Request.Form("Name")RequestMs=Request.Form("MySelf")IfRequestName<>""orRequestLeaveMeAlone<>""thenResponse.Cookies("VisitorName")=RequestNameResponse.Cookies("VisitorName").Expires=#July01,2008#Response.Cookies("MySiteMySelf")=RequestMsResponse.Cookies("MySiteMySelf").Expires=#July01,2008#EndifVisitorName=request.cookies("VisitorName")LeaveMeAlone=request.cookies("MySiteMySelf")IfVisitorName=""andMyself=""thenEndifIfVisitorName<>""thenResponse.writeVisitorName&"WELCOMETOTHISWEBSITE!"Endif'其它的ASP代码%>程序名:exam5-6.htm<html><bodybgcolor="#ccffff"text="black"link="navy"vlink="purple"><divalign="Center"><formaction="exam5-6.asp"method="POST"><inputtype="text"name="name"><br><br><inputtype="hidden"name="MySelf"value="x"><inputtype="submit"value="Submit"></form></div></body></html>说明:首先设置页面,检查表单信息,如果存在,则创建Cookie集合,并设置有效期时间。再读取Cookie集合,如果Cookie在访问者的计算机上不存在,就创建一个表单,询问相关信息。如果已经存在,并且用户名字存在,就显示给访问者一个欢迎界面,然后执行其余的代码。其运行结果如图5-6-1、图5-6-2所示。145.4.1Session对象简介

Session对象和我们后一节要说的Application对象一样,体现了其他三种内置对象所没有的特性事件。众所周知,HTTP是一种非状态的协议,也就是说Web服务器将每个网页请求都看做是独立的,因此服务器不保留以前请求的任何信息,即使它们只早于当前请求几秒钟。这种缺陷给编写应用程序造成了很大的困难。ASP为管理会话信息问题提供了独特的解决方案。使用ASP的Session对象和服务器生成的特定用户ID,可以创建更合理的ASP应用程序,以便标识每次访问的用户并收集用户信息,应用程序随后就可以利用这些信息来跟踪用户的各种选择。我们可以使用Session对象存储单个用户会话所需的一些信息。当用户通过应用程序的页面向服务器发送请求时,如果该用户还没有进行会话,则自动创建一个Session对象,如果会话已经过期了,服务器将终止该会话。

Session对象经常被用在电子商务的网站中,用于创建虚拟的购物篮。只要你登陆到了该网站,无论什么时候,只要你点击了购买商品的按钮,产品就会进入购物篮,当用户离开时,实际上就已经进行了他所选的所有商品的订购工作,这些购物信息就是被保存在Session对象中的。155.4.1Session对象简介(续上)需要注意的是:会话状态仅在支持cookie的浏览器中保留,如果客户关闭了Cookie选项,Session也就不能发挥作用了。

Session对象的功能看起来和Cookie有些相似,但实际意义上存在着很大的区别。我们知道,Cookie中的数据是存放在客户端的浏览器中,而Session中的数据则存放在WEB服务器上面。当用户第一次登陆到网站时,ASP会检查HTTP协议的头信息,看是否存在有ASPSESSIONID的字段信息发过来,如果存在,则WEB服务器就启动新的会话,为该用户创建一个全局变量,并将该值返回给客户端。ASP就是利用这种方法来访问存储在客户端上的用户独特的信息的。当然,在你不需要使用Session时,你也可以告诉IIS不用对Session进行追踪,只要在ASP的最前面加上<%@ENABLESESSIONSTATE=False%>即可。

Session对象的语法为:Session.Collection|Property|Method其中:Collection 为Session的集合

Property 为Session的属性

Method 为Session的方法。165.4.2利用Session存储信息利用Session对象存储用户信息,只需要简单的调用Session对象就可以了。下面我们以一个简单的例子来说明其用法。

【例5-7】程序名:exam5-7.asp<html><head><title>ThisisaExample</title></head><body><%Session("WelCome")="WelcometoMyWeb!!!"Response.write(Session("WelCome"))%></body></html>其运行结果如图5-7所示。我们假定用户请求了另外一个页面,代码如下:程序名:exam5-7-1.asp<html><head><title>AnotherExample</title></head><body><%Session("WelCome")="WelcometoMyWeb!!!"%></body></html>当用户浏览此页面时,同样的又显示一次。但在此页面上会话变量并没有被赋值。因为在前面的页面中变量已经被赋值了。175.4.3利用Session存储数组信息

Session对象可以提供动态关联数组,在数组中存储信息。在Session对象中存储单纯变量和对象变量。要在Session对象中存储变量,需指定Session对象中已命名条目的值。可以利用Contents集合来存储数组信息。Contents集合可以包括所有未使用<object>标记而为该会话建立的项目。也可以用于遍历集合并检索出会话中所有项目的列表。下面的例子说明了其用法。<%Session("name")="Tom"Session("Sex")="male"Session("year")="34"ForI=1toSession.Contents.CountResponse.Write("<br>"&Session.Contents(I))NextSession.Abandon%>185.4.4Session对象的属性和方法

1、SessionID

SessionID属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识符号。会话标识以长整形数据类型返回。大多数情况下SessionID可以用于WEB页面注册的统计。

2、TimeOut

Timeout属性以分钟为单位为Session对象指定超时时限。如果用户在该超时时限之内不刷新或重新请求网页,则该会话将终止。这段时间的默认值是20分钟。可以通过在Internet服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。用户可以根据应用程序的要求来设置此值。例如,如果您希望浏览您的Web应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽WEB服务器的内存资源。对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置Session对象的Timeout属性。例如,下面这段代码将超时值设置为10分钟。<%Session.Timeout=10%>当你希望会话在长期内进行的话,你也可以设置一个大于默认设置的超时值。

Session对象只有一个方法:Abandon,该方法删除所有存储在Session对象中的对象并释放这些对象的源。如果用户未明确地调用Abandon方法,一旦会话超时,服务器将删除这些对象。当服务器处理完当前页时,下面的代码将释放会话状态。<%Session.Abandon%>195.5.1Application对象简介我们可以这么理解Application对象:当你创建了一组ASP页面的话,你就相当于创建了一个Application对象。因此,一个Application对象就是你所开发的一组页面和ASP文件。在此,我们不仅可以使用Application对象,在给定的应用程序的所有用户之间实现信息共享,并在服务器运行期间持久的保存数据。而且,Application对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。

Application对象具有很多其他ASP内置对象所没有的特点,首先,数据信息可以在Application内部进行共享,因此,一个Application对象可以覆盖多个用户。其次,单独的Application对象可以隔离出在自己的领域内运行,这样的话,如果有个别的Application遭到人为的破坏的话,不会影响到其他的用户使用;同时,你也可以停止一个Application而不影响其他应用。下面我们来看看Application对象所具有的属性、方法和事件。205.5.1Application对象简介(续上)虽然Application对象没有内置的属性,但我们可以使用以下句法设置用户自己定义的属性。

Application("属性")=值下面代码声明并建立Application对象的属性。

<%Application("MyVar")="Welcome"

SetApplication("MyObj")=Server.CreateObject("MyComponent")%>一旦我们分配了Application对象的属性,它就会一直存在,直至关闭WEB服务器服务使得Application停止。由于存储在Application对象中的数值可以被应用程序的所有用户读取,所以Application对象的属性特别适合在应用程序的用户之间互相传递信息。

Application对象有两个方法,是用来处理多个用户对存储在Application中的数据进行写入的问题。

Lock方法:禁止其他用户修改Application对象的属性。

Lock方法阻止其他用户修改存储在Application对象中的变量,以确保在同一时刻仅有一个客户可修改和存取Application变量。在应用程序中,我们通常将两种方法一起使用。如果用户没有明确调用Unlock方法,则服务器将在.asp文件结束或超时后即解除对Application对象锁定。215.5.1Application对象简介(续上)下面这段代码使用Application对象来记录页面访问次数的程序:

<%

DimNumberVisits

NumberVisits=0

Application.LockApplication("NumberVisits")=Application("NumberVisits")+1

Application.Unlock

%>

欢迎您光临我们的网站,你是本网站的第<%=Application("NumberVisits")%>位访客!

Unlock方法:允许其他客户修改Application对象的属性。在上面的例子中,Unlock方法解除对象的锁定,使得下一个客户端能够增加NumVisits的值。如果用户没有在后面调用Unlock方法,则服务器将在ASP文件结束后即可解除对Application对象的锁定。但在实际的程序中,最好在Lock以后,使用Unlock方法,否则的话,在文件没有结束时,其他用户就不能再操作Application的变量了。

Application有两个事件:

Application_OnStart事件和Application_OnEnd事件。

Application_OnStart事件在首次创建新的会话(即Session_OnStart事件)之前发生。当WEB服务器启动并允许对应用程序所包含的文件进行请求时就触发Application_OnStart事件。225.5.1Application对象简介(续上)不过,和Session_OnStart事件不同的是:Application只触发一次。而且,学要注意的是:Application_OnStart事件的处理过程必须写在Global.asa文件之中。其用法为:<Scriptlanguage=ScriptLanguageRunat=Server>

SubApplication_OnStart

……

EndSub

</Script>

Application_OnEnd事件只有在服务终止或Application对象被卸载时才会被触发。如在IIS管理器中关闭了IIS服务,该事件就被触发了。Application_OnEnd事件肯定发生在Session_OnEnd事件之后。同样,也必须把该事件的处理过程写在Global.asa文件之中。其用法为:<Scriptlanguage=ScriptLanguageRunat=Server>

SubApplication_OnEnd

……

EndSub

</Script>我们在一般应用中,一般把与数据库的连接定义在这两个事件中。在后面的章节中,我们还将具体讲述Global.asa文件的用法。235.5.2利用Application存储信息利用Application对象存储信息,只需要将变量声明后赋值给它即可。下面的例子可以说明其用法。【例5-8】程序名:exam5-8.asp<html><head><title>ThisisaExample</title></head><body><%Application("WelCome")="WelcometoMyWeb!!!"Response.write(Application("WelCome"))%></body></html>你也可以将一个对象存入Applicaition对象集合中,与变量不同的是,你需要使用Set方法。如:<%SetApplication("MyObject")=Server.CreatObject("MyCom")%>其运行结果如图5-8所示。245.5.3利用Application存储数组信息如果我们想将一个数组存储在Application对象中,需要注意的是:不要直接更改存储在数组中的元素。例如,下列的脚本无法运行

<%Application("MyArray")(2)="Hello"%>这是由于Application对象是作为集合被实现的。数组元素MyArray(2)并未获得新的赋值。而此值将包含在Application对象集合中,并将覆盖在此位置存储的原来的任何信息。建议您在将数组存储在Application对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,您应再将数组全部存储在Application对象中,这样您所做的任何改动将被存储下来。下面的代码对此进行演示。<%DimMyArray()RedimMyArray(4)MyArray(0)="welcome"MyArray(1)="you"Application.LockApplication("StoredArray")=MyArrayApplication.UnlockResponse.Redirect5-.asp"LocalArray=Application("StoredArray")LocalArray(1)="there"Response.WriteLocalArray(0)&LocalArray(1)Application.LockApplication("StoredArray")=LocalArrayApplication.Unlock%>255.5.4Global.asa文件及应用

Global.asa文件是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件主要用来存储事件信息和由应用程序全局使用的对象的。比如说:我们在前面一节中说到的,与数据库的连接就放到这个文件中,以提高程序的效率。需要提醒大家注意的是:我们必须把该文件存放到应用程序的根目录中,而且每个根目录中只能有一个这样的文件。在Global.asa文件中,脚本代码中必须使用<Script>标记封装,定义的对象也必须有会话或应用程序作用域,否则,服务器会返回错误。我们可以用任何支持脚本的语言编写其脚本。

Global.asa文件的标准格式为:<ScriptLanguage="VbScript"Runat="Server">Session_OnStart'用户首次运行ASP应用程序中的任何一个页面时运行Session_OnEnd'当用户首次运行ASP应用程序中的任何一个页面时运行Application_OnStart'当任何用户首次首次访问该应用程序的首页时运行Application_OnEnd'当该站点的WEB服务器关闭时运行</Script>下面我们用一个例子来具体讲解一下用法。265.5.4Global.asa文件及应用(实例)在这段代码中,涉及到了FileAccess组件,它可以提供用于访问文件系统的方法、属性和集合。这将在以后章节中进行展开讨论。在程序中,它起到了在服务器上创建新文件并对文件进行写操作的作用。这其实是一个ASP页面访问记数器应用程序的程序:首先当用户首次访问该站点的首页时,过程Application_OnStart定义了在服务器上指定的虚拟目录下新建一个名字为VisitorCount.txt的文本文件,并将文件的路径和内容保存在应用程序级的变量中。而当任何一个客户访问ASP应用程序中的任何一个页面时,过程Session_OnStart则将应用程序级的变量visitors的值实现自加。这样,每当有用户访问该页面时,变量visitors都将自动的累加,以起到统计点击率的作用。由于变量visitors的值是存储在系统内存之中,所以如果服务器关闭或重新启动,存储在变量中的数据将自动丢失,所以通过定义过程Application_OnEnd,在服务器关闭或重启之前将数据写入事先建立的文本文件之中,这样就能确保当服务器再次启动时,Application_OnStart过程可以从VisitCount.txt文件中读取以前的统计数。<ScriptLanguage="VbScript"Runat="Server">SubApplication_OnStartVisitorCountFileName=Server.MapPath("/lib")+"\VisitorCount.txt"SetFileObject=Server.CreateObject("Scripting.FileSystemObject")SetOut=FileObject.OpenTextFile(VisitorCountFilename,1,False,False)Application("visitors")=Out.ReadLineApplication("VisitorCountFilename")=VisitorCountFilenameEndSubSubApplication_OnEndSetFileOutObject=Server.CreateObject("Scripting.FileSystemObject")SetOut=FileOutObject.CreateTextFile(Application("VisitorCountFilename"),TRUE,FALSE)Out.WriteLine(Application("visitors"))EndSubSubSession_OnStartSession.Timeout=5Application("visitors")=Application("visitors")+1Session("ID")=Session.SessionIDEndSub</Script>275.6.1

设置Web服务器响应时间的属性ScriptTimeout

Server对象主要是用来提供对服务器上的方法和属性的访问的。其具体用法为:

Server.Property|Method因此,我们可以用ScriptTimeOut属性设置WEB服务器的响应时间。如

<%Server.ScriptTimeout=50%>就指定服务器响应时间为50秒。需要提醒大家的是:在数据库方面,使用AspScriptTimeOut属性可以为WEB服务器设置默认的响应时间值。同时,Server.ScriptTimeout属性的值的大小不能小于在原数据库中指定的值。比方说,假设NumSeconds的值为80,而在原数据库中设置了默认值为100,则脚本程序仍然在100秒后超时。285.6.2

创建ActiveX组件实例的方法CreateObject

CreateObject方法是ASP内置组件中功能最为强大的方法。它被用来创建已经注册到WEB服务器上的ActiveX组件。众所周知,ActiveX组件能够帮助你实现许多重要的功能,如:数据库的连接、文件系统的访问等等。

其具体用法为:

Server.CreateObject(ProgID)其中,ProgID指定了构件标识。构件可以是EXE程序,或者是DLL动态链接库。这些程序必须在操作系统中注册后,COM才会在系统注册表(Registry)中维护这些信息。如果要创建有会话或应用程序作用域的对象,可以使用<Object>标记并设置Session或Application的Scope属性,也可以在对话及应用程序变量中存储该对象。下面的代码创建了一个对象:

<%SetSession("ad")=Server.CreateObject("MSWC.AdRotator")%>这里需要注意的是,不能创建与内置对象同名的对象实例,否则,如下列脚本将返回错误信息。如:

<%SetResponse=Server.CreateObject("Response")%>295.6.3虚拟路径的转换方法MapPath

MapPath方法主要是把虚拟路径转换成物理路径。其具体用法为:

Server.MapPath(Path)其中Path为要转换的虚拟路径。需要注意的是:如果Path以"/"或"\"开始,MapPath方法返回路径时将Path看做完整的虚拟路径。否则,该方法返回同一个ASP文件中已有路径的相对路径。但使用该方法时应注意的是:它不检查返回的路径是否正确或在WEB服务器上是否存在。而且,不支持相对目录的写法。305.7ASP内置对象的综合举例通过上面几节的学习,我们已经能够用ASP的6个内置对象来编写一些功能简单的应用程序。下面,我们通过一个综合的例子来说明其的一些具体的用法。本例子主要实现了聊天室的功能。

【例5-9】程序名:exam5-9.htm<%@Language=VBScript%><%Response.Buffer=true'建立输出缓存,用于显示不同页面。Onerrorresumenext'程序即使出错也继续进行IfRequest.ServerVariables("Request_Method")="GET"then'判断客户是以什么方式来请求WEB页面'客户登陆界面%><formmethod="POST"action="exam5-9.asp"><p><inputtype="text"name="nick"size="20"value="nick"style="background-color:rgb(192,192,192)"><br></p><inputtype="submit"value="进入聊天室"name="B1"style="color:rgb(255,255,0);font-size:9pt;background-color:rgb(0,128,128)"><p><inputtype="hidden"name="log"size="20"value="1"><br></p></form><%Response.End'结束程序的处理ElseResponse.clear'清空缓存中的内容dimtalkIfRequest.Form("nick")<>""then'判断客户是是否在聊天界面中Session("nick")=Request.Form("nick")EndIf'客户聊天界面%><formmethod="Post"action="exam5-9.asp"name=form1><p><%=Session("nick")%>说话:<inputtype="text"name="talk"size="50"><br></p><inputtype="submit"value="提交"name="B1"><inputtype="reset"value="取消"name="B2"></p></form><AHref="exam5-9.asp">离开</a><br><br>315.7ASP内置对象的综合举例(续上)通过这个实例,我们将前面所学的各种内置对象有机的结合在一起。其运行结果如图5-9-1、图5-9-2所示。程序名:exam5-9.asp<%IfRequest.Form("log")<>1thenIftrim(Request.Form("talk"))=""then'判断用户是否没有输入任何内容talk=Session("nick")&"沉默是金。"Elsetalk=trim(Request.Form("talk"))'去掉字符后的空格EndIfApplication.lockApplication("show")="<tableborder='0'cellpadding='0'cellspacing='0'width='85%'><tr><tdwidth='100%'bgcolor='#C0C0C0'></td></tr><tr><tdwidth='100%'><fontcolor='#0000FF'>来自"<%Request.ServerVariables("remote_addr")%>"的"<%Session("nick")&time%>"说:</font>"<%talk%>"</td></tr><tr><tdwidth='100%'bgcolor='#C0C0C0'></td></tr></table><br>"<%Application("show")Application.UnLockResponse.WriteApplication("show")EndIf%>32第6章ASP组件6.1ASP组件概述6.2文件存取组件6.2.1文件存取组件概述6.2.2利用FileSystemObject对象创建文件6.2.3利用TextStream对象读取和追加数据6.2.4利用文件创建一个简单的留言板6.3广告轮显组件6.3.1广告轮显组件概述6.3.2广告轮显组件的属性和方法6.3.3广告轮显组件的应用实例6.4浏览器兼容组件6.4.1浏览器兼容组件概述6.4.2浏览器兼容组件的属性6.4.3浏览器兼容组件的应用实例6.5文件超链接组件6.5.1文件超链接组件概述6.5.2文件超链接组件的方法6.5.3文件超链接组件的应用实例6.6计数器组件6.7免费组件6.7.1如何使用免费组件6.7.2如何获取免费组件336.1ASP组件概述我们知道,ActiveX组件实际上是一个包含执行一组任务代码的文件。比如一个股票行情收报组件可以在你的WEB页面上实时的显示最新的股票代码,你只需要在组件提供商来获取该组件即可使用,而不需要自己去开发它。组件的优势在于,用户可以使用任何一门支持支持COM(组件对象模型)的语言去开发组件,而且,更方便的是:组件是可以重复使用的。但在编写组件的时候,应该注意ActiveX组件不能包含图形用户接口的元素。类似于VB中的MSGBOX函数在ActiveX组件中是不能运行的。对于内置的ActiveX组件,我们一般使用Server.CreateObject方法来创建它。例如:<%SetWhits=Server.CreateObject("MSWC.PageCounter")%>我们也可以使用Html<Object>标签来创建它,但需要引起注意的是:RunAT属性必须设置成服务器的值,同时,还要还要为将在脚本语言中使用的变量名提供ID属性值。使用注册名(ProgID)或注册号码(CLSID)可以识别该对象。例如:<ObjectRunAT=ServerScope="Application"ID="WebCount"ProgID="MSWC.Counter"></Object>用这种方法建立组件对象,最好保存在Global.asa文件中,但使用Object对象一定要放到任何事件的脚本之外,一旦在Global.asa文件中创建了该对象,就可以在整个Application对象范围内使用该对象的所有属性和方法。ActiveX内置组件的具体情况,如表6-1所示。组件名称说明FileAccess文件访问组件,提供文件的输入输出的访问AdRotator广告轮显组件,按指定的次序自动的轮流显示广告信息BrowserCapabilities浏览器兼容组件,决定访问WEB站点的每个浏览器的各种信息ContentLinking文件超链接组件,使用文件来管理超链接的信息Counters计数器组件,创建、修改或检索独立的计数器PageCounter页计数器组件,记录并显示WEB页面被打开的次数346.2.1文件存取组件概述

ASP包括了文件处理的各个方面的方法、属性和集合。使用文件存取组件,几乎可以对文件系统进行任何方式的操作。

FileAccess组件主要由FileSystemObject对象和TextStream对象组成,使用FileSystemObject对象,可以建立、检索、删除目录及文件,而TextStream对象则提供读写文件的功能。其它的有关对象有:

File对象:此对象的属性和方法用来处理单个的文件。例如:可用此对象搜索该文件最后一次被修改的日期或者文件的路径。

Drive对象:此对象代表驱动器或者是映射的网络共享。可以用该对象取得一些关于磁盘的信息,比如磁盘的可用空间或判断磁盘的文件系统是FAT还是NTFS。

Folder对象:此对象主要是用来处理文件夹。文件夹的一些基本操作都可以使用该对象进行。除了上述的几类对象以外,FileAccess组件还包括了三类集合:Files集合、Folder集合以及Drive集合。实际上,文件存取组件有很多属性和方法,在这不能一一的讲述,但我们可以通过FileSystemObject对象和TextStream对象来掌握它们的大致用法。356.2.2

利用FileSystemObject对象创建文件

FileSystemObject对象有两种最常用的用途,一种用来创建文件,另一种是用来打开并读写文本文件。CreateTextFile方法获得你指定的文件名并创建该文件,它返回一个TextStream对象,你可以用该对象在文件被创建后操作该文件。

CreateTextFile方法的用法如下:SetobjTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite],[Unicode])其具体参数:

Filename包含文件路径名的字符串,可以是文件的全路径名,包括驱动器名和目录名,也可以是文件名。如果只包含文件名的话,文件将被创建在站点的根目录下。

Overwrite可选参数。为布尔型。设置成False时可以防止FileSystemObject对象在创建一个新文件时删除已存在的文件。如不赋值则系统默认为true,具有相同文件名的已有文件会被强制删掉。

Unicode可选参数。为布尔型。指明是否以Unicode或ASCII文件格式创建文件。如果以Unicode文件格式创建文件,则该值为True;如果以ASCII文件格式创建文件,则该值为False。如果省略此部分,则假定创建ASCII文件。366.2.2

利用FileSystemObject对象创建文件(续上)

OpenTextFile方法的用法如下:SetobjTextStream=FileSystemObject.OpenTextFile(Filename,[IOmode],[Create],[Format])其具体参数:

Filename必选参数,用法等同于CreateTextFile的Filename。

IOmode可选参数。取值为下列两个常数之一:ForReading或ForAppending。如果mode为1,文件以只读方式打开,如果为8,则文件以追加的方式打开。

Create可选参数。指定如果你想打开的文件不存在是做什么操作。如果其值为True,当文件不存在时就自动创建一个空的文件。如果为False,就会在文件没找到时产生一个出错信息,其默认值是False,建议将其设为True,以避免在打开文件时检查是否出错。

Format可选参数。可以选择三种Tristate值分别指定文件的格式,-2、-1和0分别对应于系统缺省、Unicode和ASCII。下面我们以一个例子来说明其用法。<html><head><title>CreateFile</title></head><body>CreateFile…….<%SetFobject=Server.CreatObjecty("Scripting.FileSystemObject")SetTfile=Fobject.CreateTextFile("D:\IntetPub\wwwroot\new.txt")Tfile.WriteLine("WelcometoASPWorld!!")Tfile.Close%></body></html>上面的源代码在D:\IntetPub\wwwroot目录下创建了一个名字为new.txt的文本文件,具体写入文件的方法为WriteLine,最后,记住在最后要关闭此对象并且释放所有占用的资源。376.2.3

利用TextStream对象读取和追加数据在打开或创建了文本文件后,就得到一个TextStream对象,该对象有一个光标,就好象是在字处理程序中的光标一样,指出接下来要敲入的字符将出现的位置,它同时也指出你要读取的字符的位置。不能通过CreatObject来创建一个TextStream对象,得到TextStream对象的唯一方法是如前所述的用FileSystemObject对象打开一个存在的文本文件或者创建一个新的文件。

TextStream对象的属性和方法:TextStream.AtEndOfLine:只读,为布尔型。当光标在当前行的末尾时,其值为true,反之则为false。TextStream.AtEndOfStream:只读,为布尔型。如果光标在流的末尾时,其值为true,否则为false。TextStream.Column:只读,整型。统计从行首到当前光标位置之间的字符数。TextStream.Line: 只读,整型。指明光标所在行在整个文件中的行号。TextStream.close(): 关闭流以及对应的文本文件。TextStream.read(Num): 指定从光标的当前位置开始从文本文件中读取一定数目的字符。TextStream.readall(): 将整个流读入一个字符串中。TextStream.readline(): 将一整行的字符读入一个字符串中。TextStream.write(text): 将一个字符串写入流中。TextStream.writeline(): 将一个文本串写入流中。TextStream.skip(Num): 在流中,将光标的位置移动一定数目的字符串长度。TextStream.skiplines(): 在流中,将光标移动一定数目的行数。TextStream.writeblank: 将一定数目的空行写入流中。386.2.4利用文件创建一个简单的留言板上面我们学习了文件存取组件的一些基本知识,现在,我们来利用文件存取组件来做一个简单的留言板。下面的这段程序正是利用ASP读写文本文件的特性,在一个WEBBBS程序中创建自动记录每个用户发言记录的功能。<%Setfs=CreateObject("Scripting.FileSystemObject")ForReading=1'以只读模式打开文件。不能对此文件进行写操作。ForAppending=8'打开文件并在文件末尾进行写操作。TristateUseDefault=-2TristateTrue=-1TristateFalse=0'写入系统log开始servermap=server.MapPath("\bbs\log\")'映射系统物理路径temp=servermap&“\”&year(date)&month(date)&"\"

'获取系统物理路径和时间,并以此作为log文件存放的物理路径ifNotfs.FolderExists(temp)thenfs.CreateFolder(temp)endif'检测是否存在文件夹,否则自动创建dimsyslogdimtempnametempname=datesyslog=temp&tempname&".log"'文件名为e:\bbs\log\月份\月日.logli=user&"&"&Now&"&"&Request.ServerVariables("REMOTE_ADDR")&"&"&tempfile&"&"&letter&"&"&title'log文件记录的格式为:用户名&发信时间&用户ip&文件路径&信区&信件标题iffs.FileExists(syslog)thenSetss=fs.OpenTextFile(syslog,ForAppending,true)elsesetss=fs.CreateTextFile(syslog,ForWriting,false)endif'检测log文件是否存在,如果存在则追加文件内容,反之则直接写文件ss.WriteLine(li)ss.Close

'log文件写入结束%>396.3.1广告轮显组件概述在商业化高度发展的今天,WEB上的广告信息随处可见。我们在构建自己的WEB网站时,也可以利用广告轮显组件建立一个符合广告领域标准功能的广告系统。它允许在每次访问ASP页面时在页面上显示新的广告,而且提供了很强大的功能。比方说:旋转显示在页面上的广告图像的能力、跟踪特定广告显示的次数的能力以及跟踪客户端在广告上单击次数的能力。广告轮显组件的工作是通过读取计划文件来完成的,该文件包括与要显示的图象文件的地点有关的信息以及每个图像的不同属性。406.3.2广告轮显组件的属性和方法

AdRotator组件有三个属性:border(size) 参数size为一正整数,单位为像素,表示组件边框大小;click

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论