基于asp+access的网上聊天室设计与实现(毕业论文+程序源码)
大家好,今天给大家介绍基于asp+access的网上聊天室设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
- 基于asp+access的网上聊天室设计与实现(毕业论文+程序源码)
- 1、项目简介
- 2、资源详情
- 3、关键词:
- 4、毕设简介
- 5、资源下载
1、项目简介
- Internet网络聊天室大多采用CGI技术编程实现,CGI有编程较复杂、效率低等缺点。本设计采用ASP技术和Access数据库设计聊天室。ASP是基于服务端的一个脚本环境,具有编程简单、功能强等特点,ASP脚本中采用了面向对象的编程技术,ASP内置的Request对象和Response对象可方便实现浏览器与服务器的数据交互。同时 ,ASP引入了两个对象:Session对象用于保存用户的个性化数据;Application对象则用于放置多用户共享信息。这些都大大提高了制作聊天室的效率。
2、资源详情
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:16152个字34页
包含内容:整套源码+完整毕业论文
3、关键词:
ASP技术; IIS; Web服务器; Access数据库; CGI4、毕设简介
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
引 言
省略
第1章 选题背景
1.1来源及目的
省略
1.2课题研究的主要问题
(一) 基于网络环境的教学模式
在基于网络的教学环境下,做到使学生最大限度地发挥学习者的主动性、积极性,既可以进行个别化教学,以可以进行协作型教学(通过各种协作式教学策略的运用而实现),还可以将“个别化”与“协作型”二者结合起来,形成一种全新的教学模式。这种教学模式可以完全按照个人的需要进行,不论是教学内容、教学时间、教学甚至指导教师都可以按照学生自己的意愿或需要进行选择,使每个学生应完成下列功能:
a. 查询和访问网络教学服务器
b. 和教师或其他同学直接通讯(进行咨询、辅导、讨论和交流)
c. 和教师或其他同学共享或共同操作某个软件或文档资料的内容
(二) 基于网络教学环境的教学策略
- 传授式策略:包括利用双向可视电话系统的同步式集中讲授,和利用电子邮件或下载教学内容、浏览页面等异步式讲授。
- 讨论式策略:可通过BBS系统参加讨论。
- 个别辅导策略:可通过Java语言编写的实时运行的CAI课件来实现,也可通过自由下载的CAI课件实现。
- 探究式教学策略:是指基于网络环境中通过电子邮件或邮件列表的学习方式,设立一些由特定的学生对象来解决的问题,要求学生解答。
- 协作式教学策略:基于网络协作学习是指利用计算机网络以及多媒体等相关技术,由多个学生针对同一学习内容彼此交互和合作,以达到对教学内容比较深刻的理解与掌握的过程。
(三) 基于网络环境的教学系统结构
基于网络的教学系统是一个由硬件、软件、教学管理机构组成的一体化有机系统:
- 硬件结构是支撑网络教学系统的物质基础是校园网和Internet,应具有以下几个模块:接入模块、交换模块、服务器模块、网络管理与计费模块、课件制作与开发模块、双向交互同步教学模块。
- 软件结构是基于网络的教学系统支持教学的应用软件:
(1) 多媒体授课系统
(2) 多媒体学习系统
(3) 师生交互工具
(4) 网络题库管理系统
(5) 作业批阅系统
(6) 自动答疑系统
(7) 教学资源库管理系统
(8) 考试与评价系统
3 教学管理机构:基于网络教学系统同样需要一个机构来维持它的运行,进行教学研究、管理和教学工作。
1.3包含的主要技术问题
在以上基于网络的教学系统支持教学的应用软件中,这里主要介绍的技术问题是在网络教学中利用ASP技术+Access数据库制作网络教学的互动平台。
1.3.1关于asp技术的介绍
当前随着网络技术的飞速发展,利用网络实行远程教育已是发展趋势,而发展网络远程教育,首先必须建立一个合理的远程教育平台,使学生可以灵活接入网络,参与学习。这里就是利用ASP (Active Server Pages) 技术完成对基于Web的网络教学平台的构建。
ASP(Active Server Pages) 动态网页,是微软公司推出的一种通用网关接口的技术。ASP本身并不是一种脚本语言它只是提供了一种使镶嵌在HTML页面中的脚本程序得以运行的环境。我们可以通过ASP结合HTML语言、ASP指令和ActiveX元件以及数据库等方面的知识,使用自己的Web服务器创建并运行动态交互式Web站点。用户端只要使用可执行HTML代码的浏览器,即可浏览Active Server Pages所设计的网页内容。Active Server Pages所使用的脚本语言(VBScript,JScript)均在Web服务器端执行,用户端的浏览器无需能够执行这些脚本语言。
1.3.2关于数据库的介绍
省略
第2章 方案论证
2.1方案的分析及特点
Microsoft Access数据库是微软公司的Office办公套件的一个重要组件。Access数据库属于关系数据库的一种,使用它不需要进行过多复杂的编程,利用所提供的向导和一些图形化的界面和工具就能完成小型数据库管理系统的设计和实现。
Access数据库提供了7种对象来完成数据库的功能。这7种对象分别为表、查询、窗体、报表、页、宏和模块。Access数据库在计算机中以数据库文件(.mdb)存储。在这7种对象中,表用来存贮数据,对数据进行产看和分析,窗体为数据的输入等操作设置友好的外观。报表以格式化的形式来对外展示数据,数据访问页将数据发布到Web上,宏将自动完成一组操作,模块能自动完成常规任务并创建业务解决方案。
Access 数据库管理系统由于与Microsoft Office应用程序的高度集成,为用户提供友好的用户界面和方便快捷的运行环境。Access 数据库管理系统具有独特的数据库窗口、快速访问特定的目标文件、名称自动更新、条件格式、数据库转换、子数据表、导出数据到Excel和Word文本文件、窗体的改进、数据访问页、压缩关闭数据库、示范数据库和与SQL Server协同工作的功能。
第3章 过程设计论述
3.1Access数据库设计阶段:
省略
3.1.1关系模型
省略
3.1.2数据类型
省略
3.2 ASP的设计阶段
3.2.1 ASP中的数据引用
在ASP中可通过ADO对象(ActiveX Data Object,简称ADO)与SQL语言(Structured Query Language,结构化查询语言)做到存取服务器端数据库(Web Database)的数据。ADO主要是提供一个存取Web Database的方法。ADO是ASP重要的内置对象之一,凡是由ODBC或OLE DB驱动程序所能存取的数据库。这些数据库包括dBase、FaxPro、Excel、Access等。ADO是由ADODB对象:Connection、command、parameter、RecordSet、Field、Properties、Error以及4个数据集合:Paramter、Fields、Properties、Error所构成。本书是针对未学过程序语言的初学者,因此只介绍基本常用的对象与数据集合,至于未介绍的部分参考其他有关ASP的进阶书籍。本章将会介绍Connection、Command、Recordset对象,其功能说明如下:
- Connection:用来打开或关闭与数据库的连接。在使用任何数据库以前,程序首先要做的是与一个数据库建立连接,然后才继续下一步的数据库操作。而Connection对象就是用来与数据库连接的,通过它,程序就可以与各种各样的数据库相连接。
- Command:用来查询、添加、修改、删除数据库的记录,或是调用ACCESS的存储过程。负责对数据库提出请求。
3.Recordset:用来读取数据库的记录,或是添加、修改、删除数据库的记录。负责浏览与操作从数据库取得的数据,也就是说,Recordset对象可以用来表示的是来自基本表或命令执行结果的记录全集。在使用ADO时,通过Recordset对象可对几乎所有的数据进行操作,所有Recordset对象均使用记录行和字段列进行构造。
3.2.2 ASP的运行环境及方式
省略
3.2.3具体实现方式及代码讲解
文字聊天室,有管理员功能,可踢人、提升管理员、查阅用户信息,文字聊天,私聊,支持表情,点歌等功能。聊天室用Access数据库和ASP技术制作。
聊天室的设计都离不开数据库,因为服务器要把每个聊天室成员的发言、姓名(或昵称)、发言时间、表情等存放起来,以便各个浏览器读取。
Access数据库就可以实现这些功能。在Access数据库中建立一个数据库列表,该表至少要具备三个数据字段:用户姓名或昵称、时间、谈话内容。如果要记录多个信息,想说话表情,需要的显示颜色等则应再适当增添相应的字段。另外,如果支持悄悄话,还应当附加地址栏应以存放每个用户的IP地址。例如本聊天室:
利用Access建立一个名为“聊天室.mdb”的数据库,在该数据库中建立一个名为“chatroom”的数据表,其结构简单如下所示:
字段名称 数据类型 默认值
用户昵称 文本 ——
发言时间 日期/时间 Now()
发言内容 备注 ——
在表的基础上要建立一个查询,因为传递至浏览器端的不能室所有的内容而是一部分,如最近十分钟内的谈话。因而该查询所需要的语句为:
SelectFrom chatroom where datediff(“n”[发言时间],now()<10 Order by 发言时间Desc)
同时,数据库访问组件访问服务器数据库可以通过浏览器查询服务器的后端数据库得到,ASP通过内置的数据库访问组件(ADODB)实现,ADO即ActiveDataObject,是专门针对Internet和Web数据库开发的,利用ADO查询数据库的步骤是:
(1)设置DSN"ADODB通过ODBC工作,因此要在ODBC中设置DSN(数据源名)。
(2)生成ADODB组件实例为:
SetConnect=Server1CreateObject(/ADODB1Connection0)
(3)连接数据库利用ADODB的成员函数Open和先前设定的DSN可以和数据库连接,ConnectOpen(/DSN=dsnname;UID=userID;PWD=password)
(4)执行查询指定Access查询语句:Access =/selectfromtablename
虽然ASP支持许多不同的程序语言(VBScript、Jscript、PerlScript),不过这些程序语言中,以VBScript对ASP的支持最为完整,使得VBScript成为ASP默认使用的程序语言。ASP程序代码可以将VBScript视为特殊的HTML标记。因为,只要在<%与%>之间的文字语句,都被视为在服务器端执行并以VBScript所编写ASP的程序代码,这样就可以使用<%~%>来取代
在ASP中常用的内置对象有5个分别是Response对象、Request对象、Session对象、Application对象和Server对象
关于Response对象的介绍
每一种程序语言或开发工具都有一定的与用户沟通的函数,Active Server Page内嵌两种对象,分别是超文本链接传输协议的请求和响应对象。在ASP中负责将信息传递给用户对象的就是Response对象。Response对象用于动态响应客户端请求(Request),并将动态生成的相应结果返回到客户浏览器中,使用Response可以动态创建Web页面,改变HTTP标题头,还可以自动将客户端重定向(Redirect)到一个指定的页面中,另外,如果要向客户端写入Cookies时,Response对象也是一种很好的工具。
其中collection表示Response对象的集合,property表示Response对象的属性,method表示Response对象的方法。
具体实现的语法如下:
Response.Write方法
语法
Response.Write “sendingdata”
功能
将数据或字符串传送到客户端浏览器。
- Write是Response的方法;sendingdata参数代表欲传送的数据。
- Response.Write传送的数据为变体型(Variant)。若传送的数据是字符串,字符串前后必须使用“”双引号,将字符串包括起来;若字符串中间含有双引号必须重复双引号一次。
- (1)如果输出的数据是HTML标记,编写可省略Response.Write(2)VBScript将头尾用双引号框住的数据会视为字符串来处理。(3)Response.Write传送HTML标记,若只将头尾用双引号框住,里面的双引号没有去掉,执行时会发生错误的。这是因为在VBScript语法中,将两个双引号括起来的部分将视为字符串处理。
- 使用单独一行的Response.Write方法传送数据或字符串至客户端,若超过1022字符,将会出现错误。如果传送超过1022个字符的字符串,请分成多行Response.Write输出,或者将字符串存到变量中,再用Response.Write将变量输出。
可使用“=”来代替Response.Write方法。
Response.End方法
语法
Response.End
功能
结束ASP程序的执行。
当执行至Response.End,则接在此行后面的程序将不再执行。
在聊天室中具体是这样实现的:
<%
Response.Buffer =true
if not isarray(session(“dv_user”)) then
Response.Write “未登陆不能发言!”
Response.End
这是在登陆之前的说明部分,用到了Response.Write方法。
Response.Redirect方法
语法
Response.Redirect“URL”
功能
- URL参数用来指定网页所在网站文件夹与文件名,记得文件名要包含扩展名。
- Response.Redirect方法必须在数据还没有传送到客户端的浏览器之前使用,否则会出现错误的情况。譬如使用Response.Redirect方法将浏览器连接到指定的网站或ASP文件时,应写在Response.Redirect方法之前才不会发生错误。
关于Request对象的介绍
Request对象的功能主要是用来取得客户端浏览器(Browser)所传送到服务器端的信息。譬如当我们在窗体上填完数据,按下“传送”按钮(Submit),则Request对象会根据窗体的名称取得客户端所键入的数据。其语法如下:
语法
Value=Requesr.collection | method |property
功能
取得客户端窗体各组件所输入的数据。 - collection参数:是收集数据的集合(collection),我们可以将这些集合视为Request对象的子对象,或称为集合对象,下面即为Request对象所提供的5个字对象的功能说明:
(1) Form集合用来取得客户端窗体上所传过来的信息。
(2) QueryString集合用来取得客户端附加子阿ASP网址后的参数信息。
(3) ServerVariable集合用来取得服务器短的环境变量。
(4) Cookies集合用来取得客户端保存的Cookies值。
(5) ClientCertificate集合用来取得客户端的身份认证信息。 - method和property参数是指该对象的方法与属性。
- variablename参数随着子对象的不同而有不同的规定。
- 在ASP程序中使用多个Request的子对象,子对象间若使用相同的variablename(指变量名称或窗体字段名称),且省略接在Request对象后面的子对象名称不写,ASP会按照QueryString、Form、Cookies、ServerVariable先后次序来存取数据。
Request.Form集合
语法
Request.Form(“filedname”)
功能
取得客户端窗体各组件所输入的数据。 - filedname为窗体的组件名称。若窗体的传送方式为method=”post”时可以使用Request.Form(“filedname”)来取得客户端传来窗体上指定字段所填写的数据。此种方式可传送较大量的数据(数据长度可大于256bytes),但速度较慢。当按下窗体上面的“传送”按钮时,浏览器会先将窗体的数据放在表头,也就是~之间,然后再将数据一次传送给服务器端。
- Request.Form(“filedname”)中的Form集合可省略不写,因此该语句可简写成Request. (“filedname”)。
saystr=Request.Form (“post_msg”)
towho=Request.Form (“towho”)
addsays=Request.Form (“addsays”)
addwordcolor=Request.Form (“addwordcolor”)
sayscolor=Request.Form (“sayscolor”)
towhoway=Request.Form (“towhoway”)
gonggao=Request.Form (“gonggao”)
注:这是聊天室登陆之前的说明部分,多次用到了Request.Form(“filedname”)的对象。
Request.QueryString集合
Request.QueryString集合(或称子对象)的功能和Form差不多,唯一的差异在于前者可以直接取得加在地址后面的附加参数,这些参数通常以“?” 问号来连接,也就是说当在窗体输入数据完毕,单击“传送”按钮后会将窗体内的数据以问号开头,直接输入浏览器的地址栏“http://…?…”。Request.QueryString的语法如下:
语法
Request.QueryString(”filedname”)
功能
取得客户端窗体所输入的信息。 - filedname是指窗体的字段名称。当窗体的传送方式设为method=”get”,即可使用QueryString集合来取得客户端所传来的信息。此种方式较适合传送较小的数据,效率较快。
- 若窗体的传送方式设为method=”get”,按下“传送”按钮时,会将窗体所有的数据以问号开头连接在地址后面,再将整个数据一起传送给服务器端。
- Request.QueryString(”filedname”)可简写成Request(”filedname”)。
Request.ServerVariables集合
ASP程序中可以通过Request.ServerVariables来取得服务器端环境变量名称的内容,其语法如下:
语法
Request.ServerVariables(“ServerEnviVariablname”)
功能
取得服务器端的环境信息给客户端。
ServerEnviVariablname参数是指服务器端的环境变量名称。
(1) 取得服务器端的Domain Name或IP。
Request.ServerVariables(“Server_Name”)
(2) 取得此网页所在的虚拟路径(不包含Domain Name及IP)。
Request.ServerVariables(“Path_Info”)
对session对象进行介绍:
Session对象是ASP所提供的通用对象,Session和Application不同的是,Application是所有客户端的共享对象,而Session对象是属于个别客户端所专用的,与就是说所打开的浏览器即表示为一个客户端的Session对象。
Session对象的使用方法
语法1
Session(”sessionname”)=settingdata
语法2
Variablename=Session(“sessionname”)
功能
保存个别客户端的私有数据。 - 语法1:设定给Session(“sessionname”)数据为变体型(Variant),但所设定的数据若为字符串型需使用双引号将字符串包括起来,settingdata参数表示欲设定的数据。
- 语法2:将Session(“sessionname”)的数据指定给Variablename,Variablename的参数为变量名称。
- 使用Session来存放单一用户的变量值,可以在多个网页共享Session。例如本聊天室记录用户的名字。就是使用这个对象。
当用户要进行发言的时候执行的流程图是这样的,如图8:它的实现过程也是由Session对象完成的。
图8
同时,当用户浏览网站时,若希望用户都能先浏览网站的首页之后,再由首页分别连上其他的网页。其做法就是使用Session对象在首页设定一个Session标志,这个标志用来表示用户是否来到首页:而其他页可以在程序最开头先判断Session标志是否为Empty,若成立表示用户还没有浏览首页,此时即再重新连到首页即可。例如本聊天室就在首页开头编写Session(”YNCome”)语句,用来表示用户是否连上首页的标志,在Session(”YNCome”)为True,表示用户已经来过首页了
Session(”YNCome”)=True
可在其他副页开头编写如下语句,以下程序先判断Session(”YNCome”)是否为Empty,若成立表示用户还没有连上首页,此时会执行Response.Redirect”index.asp”在重新导向首页。
If Session(”YNCome”)=Empty then
Response.Redirect”index.asp”
End if
聊天室的首页界面见图9:
图9
通过提交按钮来激发index.asp.该ASP文件主要来保证在聊天室里没有两个用户是同名的。用户提交信息后,该文件打开chat.mdb检查是否已经有该用户名,如果有但密码不对就提醒用户重新输入密码,如果没有那么用户就顺利进入了聊天室。进入聊天室界面的功能由下列语句完成:
<%
if session("netname")="" thenresponse.redirect "index.asp"
end if
if Application("chat_line")="" then Dim sd_init(50)for i=1 to 48sd_init(i)=0nextsd_init(49)=1sd_init(50)="数组初化成功!"Application("chat_sd")=sd_initApplication("chat_line")=1Application("onlinelist")=""
end if
if session("dv_user")=dv_user
else
dv_user=session("dv_user")
end if
if Instr(LCase(Application("onlinelist")),LCase(dv_user(0)&" "))=0 then
Application.lock
Application("onlinelist")=Application("onlinelist")&dv_user(0)&" "
Application.UnLock
if dv_user(3)=0 then
Application.lock
Application("chat_sd")=newsd
Application.UnLock
end if
'dv_user(1)=Application("chat_line")
dv_user(3)=1
session("dv_user")=dv_user
end if
%>
进入聊天室的主页面见图10:
图10
其中验证是否为管理员的语句由下列代码实现:
if rs(2)=True thensession("chatadmin")=Trueend ifchatmatname=split(mastername,"|")for i=0 to UBound(chatmatname)if session("netname")=chatmatname(i) thengjmaster=Trueend ifnextif gjmaster=True thensession("chatadmin")=Trueend ifend ifrs.closeset rs=nothingresponse.redirect "index.asp"end if
对于没有私聊功能的聊天室来说,其实每个用户的屏幕上显示的内容是一样的。所以只要在Global.ASA中建立一个公共变量来储存聊天内容,然后将该变量的内容显示在客户端的屏幕上就可以了。在ASP中,只要建立一个Application对象的变量,然后对其读写就可以实现了。写入代码如下:
<% Application.Lock
Application(dChat)Contentd)=Application)
(dChat)Contentd)&NewMsg
Application.UnLock %>
以上代码只需放入发送消息的ASP文件中就可以,其中,NewMsg为一个储存新聊天内容的变量,它用来储存用户新发出的消息在网络上。发送消息可能是一个并发事件,如果多个用户同时更改这个Application变量就会发生错误。所以,上述代码中使用了Application.Lock和Application.UnLock来避免此问题的发生。而读出此变量内容并将其显示在网页上则较为简单,只要将下述代码放入用于显示的ASP文件中即可:
<%=Application(dChat)Contentd) %>
知道了基本聊天室的实现方法,我们再来看看如何实现具有私聊功能的聊天室。对于一个拥有私聊功能的聊天室与没有此功能的聊天室最大的区别是:允许客户端的屏幕显示不同的内容,而不象没有此功能的聊天室那样每个人的屏幕显示的内容都是一样的。这样,我们就没有办法使用前面所提到的那种方法将聊天记录存入一个Application对象的变量,然后再读取它的值,就必须多建几个变量来解决这个问题。通过以下代码来解决:
-这是发送方代码
<%Application.Lock
Application(Session(dDestnamed))=-
Application(Session(dDestnamed))&PrivateData
Application.UnLock%>
-这是接收方代码
<%=Application(Session(dNicknamed))%>
在上述代码中,Session(dDestnamed)用来存放目的用户的用户名;PrivateData用来存放私聊内容;Session(dNicknamed)用来存放用户的昵称(可以在用户登录的时候将用户的昵称写入该变量),因为Session对象的变量是私有的,所以每个用户的Session(dNicknamed)变量的值是不相等的。发送方只要将目的用户的昵称写入Session(dDestnamed),然后通过上述列出的发送方代码就可以将私聊内容发至想要发送的对象,而其他用户是收不到此内容的。例如:Session(dDestnamed)的值为ABC,那么在发送方就会产生一个名为Application(dABCd)的变量在接收方,如果他的Session(dNicknamed)的值也为ABC的话,那么接收方的那个Application对象的变量就为Application(dABCd)。如此一来就收到了发送方发来的私聊内容,而其他用户则收不到此内容,这就实现了聊天室私聊的功能。私聊的实现见图11:
图11
添加Global.asa文件里面的代码。这部分代码主要处理Application_onStart事件,在此事件中,定义了一个有15个元素的数据,并把它赋给了一个Application对象的属性。Global.asa文件的内容如下。
在AspChat.asp文件中添加代码。注意,要把这部分代码添加在主页中的两条平线之间,也就是文本中的两个
之间。程序首先判断申请这主页时,是否用的是“post”方法,因为本例中窗口的提交方法是“post”。而一般第一次申请这幅主页时,用的是“get”方法。所以如果采用的是“post”方法的话,就说明是某一浏览者在提交自己的谈话内容时的重新申请,这就要进行处理,因为又有新的谈话内容了。否则,说明某一浏览者第一次申请此主页,并没有提交什么谈话,因此只需要把当前的谈话内容显示出来就可以了。
说明:ASP中,提供了两个共享的对象Application和Session,Application对象可以用来记录不同客户端共享数据变量,
这里介绍Application的语法及功能。
语法1
Application(“Applicationname”)=settingdata
语法2
Variablename=Application(“Applicationname”)
功能
记录所有客户端共享的对象。
- 语法1:设定给Application(“Applicationname”)数据为变体型(Variant),但所设定的数据若为字符串需使用双引号将字符串包括起来,settingdata参数表示欲设定的数据。
- 语法2:将Application(“Applicationname”)的数据指定给variablename,variablename参数为变量名称。
Application虽然是所有客户端的共享对象,但是Application也有它的有效范围。Application的有效范围就是虚拟目录,就是本聊天室的默认虚拟路径C:\Inetpub\wwwroot\ASP聊天室。
其中聊天室的所有客户都要共享信息,所以不可避免的要用到具有应用程序级的变量的对象Application,这是建立的Chat程序的关键所在,所有的谈话数据都存放在一个应用程序级变量中,以便让所有的客户读取。用所学过的Request对象获取客户所输入的谈话,并保存在变量talk中,然后将talk值存入应用级变量show中,如下:
<%Application(“show”)=talk&Application(“show”)%>
接下来要考虑的是当不同的客户同时向Chat应用程序进行操作的时候如何处理。这个问题其实与在数据库中的两个用户同时写入同一个记录一样,如果两个用户同时对同一个应用程序级变量进行写操作,则一个用户所做的修改会被另一个用户的操作所覆盖,所以,如果对Application对象数据的并发访问不采取一定的措施,则会导致当两个用户试图同时对ASP聊天室应用程序提交时,一个用户提交的内容会被另一个用户提交的内容所覆盖,在被参加到会话中的任何人看到之前就消失了。为了避免这类问题的出现,我们需要使用Application对象中的Lock属性来约束只允许当前的用户编辑或增加Application对象的属性,这样从用户开始修改应用程序级变量开始,到Application对象被显式解除锁定为止,Application对象的属性只能被该用户用编辑,如果此时有其他用户请求编辑Application对象,则这些用户要排队等待,直到应用程序被打开为止。
Application.lock
Application(“show”)=talk&Application(“show”)
Application.Unlock
其中进入聊天室管理页面时是使用这样的语句实现的
<%
online=Application(“onlinelist”)
online=split(online," “)
for i=lbound(online) to ubound(online)-1
Response.Write “”&online(i)&”"
next
%>
p align =”center”>一个asp聊天室〈/font〉
<%
处理输入
if Request.ServerVariables(“Request_Method”) = ”POST” then
标明讲话者
if len(Request(“txtWho”)) > 0 then
Session(“ssWho”) = Request(“txtWho”)
End if
Application.Lock //将Application对象锁定,禁止其他客户端存取Application变量
创建本地引用指针
mlCounte r= Application(“giCounter”)
maChats = Application(“gaChats”)
如果写入的行数超过10,则重新开始记数。
If mlCounter > 9 then
MlCounter = 0
End if
增加用户的输入,计数器加1
maChat(mlCounter)= Session(“ssWho”)&”:”&Request(“txtCents”)
mlCounte r= mlCounter +1
把局部变量设置为在应用范围内有效。
Application(”giCounter”)=mlCounter
Application(“gaChats”)=maChat
Application.Unlock //将Application对象解除锁定,允许其他客户端存取Application变量
End if
%>
<%
写入TextArea
if Application (“giCounter”) = 0 then
lstemp =Application (“gaChats”)(0)
else
for x =0 to Application (“giCounter”)-1
lstemp = lstemp &”
”Application(“gaChats”)(x)
next
end if
Response.white lstemp
%>
再把txtWho的内容初始化。也就是当浏览者输入过一次自己的姓名以后就不用再次输入了,为了区分每个不同的浏览者,在这里使用了“Session”对象。利用Session(“ssWho”)记载浏览者的姓名。下面的代码直接写在以上代码的下面,存入AspChat.asp中。
发言:
对象:
chatname=“聊天室” //聊天室名字
mastername=“admin” //超管帐号,多个请用“|”分开
copy=“聊天室”
chatdate=0 //0代表ACCESS数据库,1代表SQL数据库
%>
<%
以下语句的执行是用function函数实现的,function函数过程无法使用“函数名称=表达式”语句来返回值,而且function名称可以当成一个结果值。
function函数定义的语法如下:
Function 函数名称([参数])
……
[函数名称=表达式]
[Exit Function]
……
End Function
Function 函数是以 Function开头以End Function 结束的程序代码区块,它实现的功能是调用一个已定义的Function过程。
注意:(1)参数表中的参数称为实参,形参与实参传递与Sub过程相同。
(2)函数调用只能出现在表达式中,其功能是求得函数的返回值。
function tjip()
server_v1=Cstr(Request.ServerVariables(“HTTP_REFERER”))
server_v2=Cstr(Request.ServerVariables(“SERVER_NAME”))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write “”
response.end
end if
end function
可以使用以下语法来调用指定的Function函数,以下写法是属于“调用程序”;
变量=函数名称([参数]) //返回值,表示以函数名称当成一个结果值
- 如上语法调用拥有返回值的Function函数,会将函数返回值的结果指定给等号左边的变量,表示可以使用函数名称当成一个结果值。
- “调用过程“后面所接的参数行称为实参,而被调用过程的Function函数所设定的参数行称为形参。
- 调用与被调用的函数名称必须相同,但两者的参数名称可以不相同。
- 调用过程的实参可以是常数、变量、表达式、数组、对象。被调用Function函数的形参不可以是常数或表达式,其他上述所提的变量、数组、对象皆可以当作是被调用函数的形参。
除此之外,本聊天室还增设了点歌功能,能够使学生在学习过程中有个愉快的心情,这是区别于其他类型聊天室的特色所在。点歌系统具体实现的功能如下:
<%
Set fs=CreateObject(“Scripting.FileSystemObject”)
zjpath=Server.Mappath(“mp3”)
Set f=fs.GetFolder(zjpath)
Set fc=f.SubFolders
sss=0
For Each f1 in fc
fn=f1.name
if zj=“” and sss=0 then zj=fn
sss=sss+1
Response.Write “” & chr(13) & chr(10)
next
%>
在其中用到了前面介绍过的Response对象。具体进入的点歌页面如图12:
图 12
第4章 结果分析
到这里我的毕业设计就已经接近完成了,这里面只是简单的介绍了一下在我所设计的内容中较有特色的地方,比如聊天室中的点歌系统,还有数据库部分使用ACCESS直接来实现的。
ASP的开发简单而直观,能方便地与HTML集成;利用内置对象;很容易设计网上聊天室、留言板、电子商务系统等;利用ASP技术,可以实现服务器数据库、服务器文件系统的操作功能。
第5章 总结
省略
致谢:
省略
参考文献
[1] 龙马工作室 ASP+SQL Server 组建动态网站实例精讲 人民邮电出版社
[2] 张德静 深入浅出ASP程序设计与开发 中国青年出版社
[3] 梁建武 陈语林 ASP程序设计 中国水利水电出版社
[4] 张泽虹 崇美英 数据库原理及应用ACCESS2003 电子工业出版社
[5] 关敬敏 沈立强 SQL Server 数据库应用教程 清华大学出版社
[6] 李雁翎 数据库技术及应用ACCESS 北京 高等教育出版社 2005
[7] 松桥工作室 HTML+ASP网页制作 北京 中国铁道出版社 2005.7
5、资源下载
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于asp+access的网上聊天室设计与实现(源码+文档)_asp_BS架构_网上聊天室.zip |