96j 曩工科技2007 ̄T-第2期 网络纵横 基于ASP技术的聊天室系统的设计与实现 刘伟 (中国矿业大学信电学院) 摘要本文主要讲述使用ASP提供的Ap plic at】0n和sessi0n两个对象,构造一个基本的聊天室系统,其中Application 象和 Sessi0n对象分别用来存储聊天用户的聊天内容和用户名,而聊天室的定时厣J新用<n eta>标记实现 关键词ASP Application ̄ Session ̄v]"象定时刷新聊天室 聊天室是Inteactr上最为常见的服务之一,深受广大网民欢 天过程的实现如下图所示 迎。其实,聊天室的工作原理和设汁并不困难,利用AsP技术就容 易实现。 1 ASP技术 1.1 ASP技术概述 ASP(Active Se ̄er Pages)动态服务器页面,是一套Microsoft开 发的服务器端脚本环境,通过ASPS-l"以结合HTML网页、ASP指令 和ActiveX元件建立动态的、交互的且高效的web服务器应用程 序。其优点体现在:①简单易学,编辑方便。使用VBScfipt、 Jscript等简单易懂的脚本语言,结合HTML代码,使用普通的文本 编辑器.即可进行编辑设计;②效率高,对机器硬件设备的要求不 高。有了AS曜序不必担心客户端的浏览是否能运行所编写的代 码,客户端的浏览器不需要执行这些脚本语言,无须Compile ̄ 译,所有的程序部将在服务器端直接执行。当程序执行完毕后,服 务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏 览器的负担,大大提高了交互的速度;③可扩充性较强。ASP使用 ActiveX服务器组件,可以使用Visual Basic、Java、Visual c++、 COBOL等程序设计语言来编写所需要的服务器组件。 1.2 Application对象和se 0n对象简介 Applicaiton对象用于在服务器上一个Web站点内的应用程序 之『日J传递消息。Applicaiton对象没有内置的属性,但用户可以定义 自己的属性。一旦为Application对象定义了属性,该属性的有效期 从清求该应用程序的第一个页面开始,到Web站点关闭为止。 Applicaiton对象的属性可以被该站点的所有应用程序的所有用户共 享。因此,聊天应用程序中可以用来存放用户的谈话内容。对 Application对象属性的定义脚本必须放在Globa1.asa文件的App lication_onstart事件中。Globa1.saa文件存储于Web站点的根目 录.用于指定该站点的全局对象和存储事件信息。Session对象也 可以在页面问跳转时保存和传递数据,但与App lication对象不同 的是,Session对象只保存单个用户的信息,即作用范围仅限于某 个特定用户访问的不同页面问,而不是在各用户之问传递数据。 Session对象的属性,同样由用户自己定义。定义与读写的脚本语法 与Application对象相同,只是脚本要放在应用程序中。 2 聊天室基本功能分析与总体设计 —个网络聊天室的主要功能就是:接收各个客户端的讨论.然 后按照各自的聊天对象发送到相应的客户机浏览器上,在本系统 中,一个浏览器的窗口中,既能输入聊天用户的发言,同时又能看 到自己与他人的对话内容。还有,为了方便用户选择聊天对象.窗 口中要提供聊天用户的名单 本聊天室有以下儿个基本功能:①聊天用户登陆;②聊天内容 输入;③聊天内容显示;④聊天内容显示页面实时更新。 3详细设计 本聊天室需要在登录页面的处理中考虑用户名是否重复。如果 重复.则提示出错.并回到登录页面,如果没有重复,则进入聊天 室 登录页面为login.asp,登录处理程序为enter.asp,进入聊天室 的页面为chatroom.asp。用户登录成功后进入聊天室页面 chatroom.sap.这个页面主要由4个框架页面构成:userinfo.asp. userlist.sap,chatlist.asp.inputmsg.sap.分别是用户信息框架页 面 在线用户显示框架页面、聊天框架页面和用户输入框架页面. .崩户在输入页面输入聊天内容后,提交给系统,系统接收后输出到 聊天页面,而在线用户页面将所有的在线用户列出给用户选择, 聊 系统总体流程图 本聊天室主要使用Application对象和Session对象。用户信息通 过表单输入,不需要验证。用户名用SessionYt ̄象存放,发言用 Application对象存放,聊天室定期刷新用<mcta>// ̄,记实现。 3.1登录部分页面 登录部分页面由index.asp和enter.asp两个页面构成。 Index.sap是用户名输入页面,具体实现由一个文本框和—个提交按 纽完成。将用户名提交到enter.sap页面后,enter.asp页面读取从 index.sap传来的用户名,判断是否与在线用户名冲突。如果是.则 给出提示,并重新连接到index.sap,否则,就直接进入聊天页面。 Enter.asp的部分代码如下: Dimtls ̄manl ̄.i Username=request(“usemame”) For i=O to ̄application(“totalusers 卜1) If usemame=application(“onlin ̄user )(i)then Response.write“用户名重复.请重新选择一个用户名进行登录(bD” 佣户名相同.提示用户 Response.wriet“<a href-“index.asp“>重新登录 >” Response.end Endif Next ’直接进入聊天室 Response.redirect“chatroom.aSp?llsem∞c= &usemam ̄ 3.2聊天处理页面 聊天处理页面主要由4个页面构成:聊天内容显示页面、用户 输入页面、在线用户显示页面和用户信息页面;主要由 globa1.asp,getchat.sap chatlist.asp来完成:采用application(“ms g”)来存取内容 在globa1.asp中先初始化聊天内容,如下所示: <script language=“vbscript“mna【=“sel" ̄er > Sub application_onstart Fori=1 to 2l Application(“msg”& …’ Next End sub <,scrip 聊天内容记录是通过getchat.sap来实现的.如下所示: Application.1ock Fori=21 to step-I J=i-1 Application(“msg”&i)=application(“msg &jJ Next ’读取目前时 的小时与分钟 Strhour=hour(timeO) If len(strhour)=l then Strhour=…0&strhour Strminute=minute(time0) 维普资讯 http://www.cqvip.com
/t 网络纵横 -呋.缸科技2007年第2期 If len(smninute)=l then Application(session(“uselTlarlfe”)&“lastaccesstime”)--itmer Smninute=…0’&strminute 检查所有连线到次网页的使用者的最近存取时间,若与目前 Stt ̄ime=“<“&s ̄hour&“:”&strminute&“>” ’初始化一个向大家说再见的字符串,然后存放在application(“msgl”J 时问相差30秒以上,表示结束连线 Stump=“【’’&session(“usernalIic”)&“】’‘&“说:”&request Redim tmp(application(“totalusers”)) (“chatmsg”)&strtime Nam=0 Application(“msgl”)=strtmp For i-0 to applicaiton(“totalusers”卜l Application.unlock User=application(“onlineuser”J(j) Response.regret“chatlist.asp~将网页重新导入 If(timer-application(user&lsataecesstime))<idletime then 聊天内容的显示是通过 ̄Echadist.asp中应用如下循环将内容显 Tmp(num> user 示出来的: Num=num+l Eles F0ri=l to21 ’ Resopnse.write application(“msg”&i)&“<br>” Application(user&“lsataccesstim ̄”)=empt Endif . Next Nest 用户输入页面是通过inputmsg.asp来完成的。主要是依靠表单 中的一个文本框和一个提交按钮来实现,并利用javascript ̄本对文 ’aura表示目前线上人数。若与application(“totalusers”)不同. 本进行相应的检查。 表示中间有人断线 If nqm<>application(“totalusers”)then 在线用户列表也是聊天室一个相当关键的部分。通过 Redim preser3,e trap(num) userlist.asp来实现。对在线用户的记录和对断线用户的处理采用如 Application(“onlil ̄user”)=tmp 下程序来实现: Application(‘‘totalusers )=num Dim refreshtime,idletime,totaluser¥,onlineuserO,tmpO,num。1, Endif newuserb user,userna/tle Application.unlock refreshtime=10设置网页自动更新时间为l0秒 Response.write“<html><head>” idletim ̄refreshtime*3设置闲置时间为自动更新时间的3倍 Response,wriet <metahttp-equiv=refresh。content=”&refreshtime&”, ne ̄aser--r-equest(“uscfnafI.c”) url=' &requesLsetwervariables(“path_info )& ?usemam眵 &l'equl ̄t application,lcok (“us锄amc”)& >” 。onlineuser ̄组记录了所有连线到次网页的使用者名称 Response.write“<meta http_equiv=eontent-tpye content='text/html; 。清点所有连线到次的网页的使用者,然后将目前的使用者名 charestfgb2313。>” 称放入数组的最后面 Response・write“</head> If applieation(newuset&‘・lastaeeesstime”)=empty then Response・write“<b0dy bgc01o ̄#333333 etxt=whiet>” If applicati0n(“totalusers’‘}=empty then applicad0n(“【0talu ” Response・wriet”当前列席人数: &application(“totalU ̄l'S”)&” Redimtmp(application(“ users”)+1) Num: Num=0^曙 opnse ‘wIIl e..<01‘0l【 type:l> yf,c:1) if application(“totalusers 瑚)then oFr i=O to(application(“totalusers”卜1) For i:lbound(application(“0nlineuser” ))t0 ubound(applicati0n Response.wriet di> &a ̄licadon( onlineuser” i)& </li> (“onlineuser )) Next User-application(“onlieuser”)(i) . Response・wriet </o1> If user<>newuser and userosession(“usemalne”)then Response.wriet </body><thtml> Tmp(num)=user 用户信息页面主要显示用户的—些相关信息,这里就不再详细 Num=num+l讲述。 Else Applicationfuser&“lastaccesstime”)e=mpty 4 结束语 匕n .“ 本文用ASP技术的Application对象和Seesiongel象。构造了一个 二IIf 简单的聊天室系统。该聊天系统基本功能都具备,并且实现起来比 Sessi0n(“usern帅c”)=nevatser 较简单。 Tmp(num)=session(‘‘LIS ̄fllanlc‘’) Application(“to.users” ̄num+l 参考文献 Redimpreservemap(application(“totalusers”)) [11】 石志国.动态网站缡程.北京清华大学出版社 ppl cation(。nlineuser)=tarp 【2】 谭浩强.网页缡程技术与实例.人民邮电出版社 匕I’记录目前使用者的昂近存取时问 一……………… I3】丁贵广.… 一 …AsP缡程基础与实例I一…“ MI.机械工业出版社。2日期_ ’.1012"")3,2’4 0) (接封二)3.3自由知识的快速引进有助于非自由知识的自主创新 术、以及部分海外上市的跨国公司。对此。国家应该重点扶持。加 自由知识的引进一方面可以使我们迅速填补和发达国家的巨大 大科技投入,加强自主刨新的力度。 差距。同时。差距的缩小、人员素质的提高又反过来促进了我国自 4.2注重完善知识传播的传导机制 主创新的能力提升。自主创新并不是一朝一夕就可以实现的。要以 继续大力完善知识传播体系。加快引进自由知识。引进自由知 一定的知识水平做基础。因为我们在努力赶超的同时发达国家也在 识就必须通过普及义务教育,提高全民族的思想道德素质和文化素 继续创新,由于知识的差距和知识传播体系的差距,导致了两种世 质;通过完善知识产权法、加强政府指导作用等措施来提高社会规 界科技成果涌现的速度出现了更大的差距,如果自由知识再来不及 范;加强国际经济联系和国际贸易,解决贸易争端问题;加大对基 充分的传播,那么知识差距会越拉越大。因此,自由知识的差距得 不到弥补。一味追求自主创新,结果可能将适得其反。尽管我们可 础设施的建设等等。只有这样自由知识才会更加顺畅的引进。同时 能会取得—些技术领域的领先地位,但我国与发达国家的全面差距 才会给自主创新—个更高的平台。 却会越拉越大。 参考文献 4关于加强自主创新的建议 【1】 袁葵荪.科学技术的发展与经济学U】.四川大学学报(哲社 4.1继续加大科技投入,加强自主创新 版),1993,(2) 自主创新必不可少,它可以使国家或企业在某些领域直接的领 【2】袁葵荪.经济学的基本前提与西方信息经济学的缺陷Ⅱ】.经济 先于世界,从而直接的提高我国的国际竞争力,特别是在那些已经 学家,2000,(41 具备世界领先或领先潜力巨大的领域,比如航天事业、核物理技 作者简介陈安涛,四川大学经济学院os级西方经济学硕士研究 生。 (收稿日期:2006・12・29)
因篇幅问题不能全部显示,请点此查看更多更全内容