|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。在上一篇中作者给人人具体先容了两个十分有用的ASP内建工具Application和Session的利用办法。因为这二者的OnStart、OnEnd事务的剧本都必需在Global.asa文件中声明,因而,本篇将给人人具体先容Global.asa文件的利用办法。为使人人纯熟把握至今所学过的常识,本篇还将举出一个ASP的Chat程序,供列位参考。
比来良多伴侣来信问我,为何前两期的典范程序运转时有如许那样的错。起首,我要向人人声明,这些程序都是我本人写的,在出“厂”前都经由及格查验,尽无“冒充伪劣产物”。:)因为程序中利用了cookie纪录客户信息,以是假如你在扫瞄器中没有设置承受cookie则程序将不克不及一般运转。别的,程序将客户信息纪录在客户真个cookie所利用的办法是Response.Cookie,此语句必需写在ASP文件中的第一个<HTML>标志前,这是由于Cookie是作为HTTP传输的头信息的一部分发送给客户的,假如当HTTP报头信息已传输给客户后再利用Response.Cookie,将呈现以下毛病:“HTTP题目已写进到客户扫瞄器。任何HTTP题目的修正必需在写进页内容之前。”,大概一些伴侣在剪贴程序的时分没有注重,打乱了程序的前后序次,大概是毛病的将HTML代码增加在ASP典范程序之前,因此招致程序运转堕落。因而,我倡议人人一方面在初次运转例程的时分不要对程序举行任何修改,只管在看懂程序的基本上慢慢改善,另外一方面在运转ASP程序时最少要在扫瞄器当选择可承受Cookie,不然一旦ASP程序中利用了Cookie或Session,它们都将没法一般运转。
上面我来向人人先容Global.asa文件的利用办法。
甚么是Global.asa文件?它实际上是一个可选文件,程序编写者能够在该文件中指定事务剧本,并声明具有会话和使用程序感化域的工具。该文件的内容不是用来给用户显现的,而是用来存储事务信息和由使用程序全局利用的工具。该文件的称号必需是Global.asa且必需寄存在使用程序的根目次中。每一个使用程序只能有一个Global.asa文件。
在Global.asa文件中,假如包括的剧本没有效<SCRIPT>标志封装,或界说的工具没有会话或使用程序感化域,则服务器将前往毛病。我们能够用任何撑持剧本的言语编写Global.asa文件中包括的剧本。假如多个事务利用统一种剧本言语,就能够将它们构造在一组<SCRIPT>标志中。
在Global.asa文件中声明的历程只能从一个或多个与Application_OnStart、Application_OnEnd、Session_OnStart和Session_OnEnd事务相干的剧本中挪用。在基于ASP的使用程序的ASP页中,它们是不成用的。假如要在使用程序之间共享历程,可在独自的文件中声明这些历程,然后利用服务器端包涵(SSI)语句将该文件包括在挪用该历程的ASP程序中。一般,包括文件的扩大名应为.inc。
上面是一个很尺度的Global.asa文件:
<SCRIPTLANGUAGE="VBScript"RUNAT="Server">
Session_OnStart当客户初次运转ASP使用程序中的任何一个页面时运转
Session_OnEnd当一个客户的会话超时或加入使用程序时运转
Application_OnStart当任何客户初次会见该使用程序的首页时运转
Application_OnEnd当该站点的WEB服务器封闭时运转
</SCRIPT>
<SCRIPTLANGUAGE="VBScript"RUNAT="Server">
SubApplication_OnStart
VisitorCountFilename=Server.MapPath("/ex2")+"VisitCount.txt"
SetFileObject=Server.CreateObject("Scripting.FileSystemObject")
SetOut=FileObject.OpenTextFile(VisitorCountFilename,1,FALSE,FALSE)
Application("visitors")=Out.ReadLine
Application("VisitorCountFilename")=VisitorCountFilename
EndSub
=========================================================
SUBApplication_OnEnd
SetFileOutObject=Server.CreateObject("Scripting.FileSystemObject")
SetOut=FileOutObject.CreateTextFile(Application("VisitorCountFilename"),TRUE,FALSE)
Out.WriteLine(application("visitors"))
EndSub
=========================================================SubSession_OnStart
Session.Timeout=5
Application("visitors")=Application("visitors")+1
Session("ID")=Session.SessionID
EndSub
</SCRIPT>
在这个Global.asa程序中,触及到了ASP的FileAccess组件,它能够供应用于会见文件体系的办法、属性和汇合。这将在今后ASP的组件中举行睁开会商。在这里,它起到了在服务器上创立新文件并对文件举行写操纵的感化。这实际上是一个ASP页面会见记数器使用程序的Global文件,起首当客户初次会见该使用程序的首页时,历程Application_OnStart界说了在服务器上指定的假造目次下新建一个VisitCount.txt的文本文件,并将文件的路径和内容保留在使用程序级的变量中。而当任何一个客户会见ASP使用程序中的任何一个页面时,历程Session_OnStart界说将使用程序级的变量visitors的值主动加一。如许,每当有客户会见页面时,变量visitors都将主动加一,以起到统计点击率的感化。因为变量visitors的值是存储在体系内存当中,以是假如服务器封闭或从头启动,存储在变量中的数据将主动丧失,以是经由过程界说历程Application_OnEnd,在服务器封闭或重启之前将数据写进事前创建的文本文件当中,如许就可以确保当服务器再次启动时,Application_OnStart历程能够从VisitCount.txt文件中读取之前的统计数。
经由这段工夫的进修,信任人人已可以对照纯熟的使用我们所学过的这些ASP内建工具来编写一些较复杂的ASP使用程序,可别小视你如今所把握的这些ASP基础常识哦!实在你已可以开辟一些复杂但有用的ASP使用程序了。上面我就举一个十分复杂的ASPWEB谈天室程序,你会觉察写谈天室本来是一件这么简单、轻松的事。大概伴侣们已在一些杂志上看到过ASP谈天程序的编写办法,但作者在这里本人写了一个更复杂的程序,仅仅利用了一个.asp文件。请将以下代码剪贴到记事簿并保留为chat.asp。
<%@Language=VBScript%>
<%
Response.Buffer=true设置输入缓存,用于显现分歧页面。
Onerrorresumenext疏忽程序堕落部分
IfRequest.ServerVariables("Request_Method")="GET"then
判别客户是以甚么体例哀求WEB页面
------------------------
客户上岸界面
------------------------
%>
<formmethod="POST"action="chat.asp"><p>
<inputtype="text"name="nick"size="20"value="nick"style="background-color:rgb(192,192,192)"><br>
<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停止程序的处置
Else
Response.clear清空缓存中的内容
dimtalk
IfRequest.Form("nick")""then
判别客户是是不是在谈天界面中
Session("nick")=Request.Form("nick")
EndIf
------------------------
客户谈天界面
------------------------
%>
<formmethod="POST"action="chat.asp"name=form1><p><%=Session("nick")%>措辞:<inputtype="text"name="talk"size="50"><br>
<inputtype="submit"value="提交"name="B1">
<inputtype="reset"value="作废"name="B2"></p>
</form>
<AHREF="/asptest/shusheng/chat.asp">分开</a><br><br>
<%
IfRequest.Form("log")1then
Iftrim(Request.Form("talk"))=""then
判别用户是不是没有输出任何内容
talk=Session("nick")&"缄默是金。"
Else
talk=trim(Request.Form("talk"))
往失落字符后的空格
EndIf
Application.lock
Application("show")="<tableborder=0cellpadding=0cellspacing=0width=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.UnLock
Response.WriteApplication("show")
EndIf
EndIf
%>
第一次运转chat.asp程序,你起首将看到以下页面:
选择你的nick进进谈天室后,将看到以下页面:
输出你想要说的话,对话将呈现在输出框的下方,以下图:
上面我们来对这个谈天室程序举行慢慢的剖析。
起首,因为谈天室的一切客户都要可以共享信息,以是不成制止的要用到具有使用程序级变量的工具Application,这是创建Chat程序的关头地点,一切的发言数据都寄存在一个使用程序级变量中,以便让一切的客户读取。我们能够用所学过的request工具猎取客户所输出的发言,并保留在变量talk中,然后将talk的值存进使用程序级变量show中,以下:
<%Application("show")=talk&Application("show")%>
接上去要思索的是当分歧的客户同时向Chat使用程序举行操纵的时分怎样处置。这个成绩实在与在数据库中的两个用户同时写进统一个纪录一样,假如两个用户同时对统一个使用程序级变量举行写操纵,则一个用户所作的修正会被另外一个用户的操纵所掩盖,以是,假如对Appliation工具数据的并发会见不接纳必定措施,则会招致当两个用户试图同时对Asp谈天室使用程序提交时,一个用户的提交内容会被另外一个用户的提交内容所掩盖,在被列入到会话中的任何人看到之前就消散了。为了不这类成绩的呈现,我们必要利用Application工具的Lock属性来束缚只同意以后的用户编纂或增添Application工具的属性,如许当用户入手下手修正使用程序级变量入手下手,到Application工具被显式地Unlocked为止,Application工具的属性只能被该用户编纂,假如此时有其他用户哀求编纂Application工具,则这些用户要列队守候,晓得使用程序被Unlock为止。以下所示:
Application.lock
Application("show")=talk&Application("show")
Application.UnLock
如今全部程序的中心部分你已懂得了,上面思索怎样保留客户信息,这里我们要用到一个会话级变量,行将客户的nick保留在Session中。如:
Session("nick")=Request.Form("nick")
最初,我们要思索的是怎样仅在一个.asp文件中处置各类事务,如:客户上岸界面、客户谈天界面。因为客户第一次哀求.asp文件时,接纳的是复杂的HTTPGET体例,可是当客户向页面上的表单字段中增添的数据并向本身提交表单后,.asp文件会再次被哀求,不外此次数据是经由HTTPPOST体例举行传送的。文件被哀求的体例能够用两种办法来断定。一是测试Request.Form汇合是不是包括成员,若没有,则标明没有发送给表单处置的数据。二是利用Request.ServerVariables("Request_Method")变量。假如表单是经由过程HTTPGET体例被哀求的,则这个变量会前往“GET”,假如表单被提交处置则前往“POST”。因为后一种办法关于断定文件的哀求体例更间接,以是我们利用以下代码举行判别:
ifRequest.ServerVariables("Request_Method")="GET"then
因为我们设置了ASP缓存,以是当程序判别页面哀求体例为GET时,程序运转Response.End,来停止前面的一切操纵,不然则运转Response.clear,清空缓存中已有的内容,并持续程序的运转。如许我们就得以用统一个.asp文件依据分歧情形给客户显现分歧的界面。
好了,我已将这个ASPChat程序的中心部分告知人人了,剩下的一些细节性成绩请列位本人读程序吧,实在这个程序还存在良多不敷的地方,最年夜的偏差是我没有写主动革新的功效,因而假如你在Chat中不措辞,那也就看不到其他客户所说的话了。Chat在Internet中的魅力人人是晓得的,实在,用ASP也完整能做到同irc相似的壮大功效,固然这就必要写更多的代码,假如人人有乐趣请写信给我,我将在从此的文章中慢慢提拔这个chat程序的品级,让人人也过过“Oper”的隐。注:有了这个chat程序,你就能够用来在本人的PWS上建一个chat使用程序,只需将你的IP地点告知伴侣,如http://202.96.210.33/asp/chat.asp,你们就能够经由过程你的电脑在网上谈天了,很爽的,不信你尝尝!
强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业;通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。 |
|