教学前言
课程介绍
师资介绍
教材介绍
课程计划
教学大纲
教学计划
实训计划
课程总表
教学内容
作业考试
作业上传
在线测试
测验考试
互动讨论
学习论坛
疑难解答
意见建议
 
 
章节:
第7章 ASP开发实例
7.2 聊天室
重点:
Application和Session对象的运用
难点:
Application和Session对象的使用方法
内容:

聊天室是浏览者都喜欢光顾的地方,通常用在交友、在线课堂、在线讨论、网络会议等。如果在网站中加入聊天室功能,可以方便用户之间进行实时交流。同样首先要对聊天室进行总体框架的设计。
7.2.1 聊天室的总体框架设计
相对完善的聊天室功能是很复杂的,可以实现公共聊天、私聊、显示在线人数和名单、表情、Emote、贴图、管理等功能。但本实例只是实现一个最简单的聊天室,用户输入昵称即可进入聊天室进行公共聊天。
聊天室的实现技术是多种多样的,例如可以用JAVA Applet、CGI等,那么用ASP如何实现呢?
用ASP实现聊天室功能,关键在用户发言的存储处理。通常做法有:存储于文本文件;存储于数据库;存储于Application对象中。本例选择存储于Application对象中。通过第4章的学习,我们知道,Application对象可以存储整个过程或用户会话的信息,Application对象主要是为程序级的变量内容而设计,Application对象对所有用户作用。在设计聊天室中,就可以利用Application对象的这些性能来存储所有聊天室成员的共享信息,例如聊天内容、聊天成员信息等。
本聊天室包含下列文件:
▲ sdchatindex.asp,用户输入昵称登录到聊天室页面。
▲ sdchat.asp,聊天室页面,采用框架结构,分为三帧,分别显示聊天内容、聊天者信息和输入聊天内容。
▲ show.asp,显示聊天内容。
▲ userinfo.asp,显示聊天者信息。
▲ input.asp,用户通过表单输入聊天内容。
▲ exit.asp,聊天者退出聊天室的程序处理。
下面是具体的页面程序编写。
7.2.2聊天室的程序设计
在sdchatindex.asp中,用户输入昵称登录到聊天室页面,其代码如下:
<html>
<head>
<title>盛达聊天室登录</title>
</head>
<body>
盛达聊天室欢迎你,现在有<%=application("online")%>人在线~今天是<%=year(now())%>年<%=month(now())%>月<%=day(now())%>日
<form action="sdchat.asp" method="post" >
昵称:<input type="text" name="name" size="10">
<input type="submit" value="进入" name="B1">
</form>
</body>
</html>
说明:
▲ <%=Application("online")%>,获取Application中的信息,显示在线人数。
▲ 通过<%=year(now())%>、<%=month(now())%>和<%=day(now())%>获得并显示服务器的当前日期。
聊天室一般采用框架结构进行布局,在sdchat.asp中采用框架结构将整个聊天室分为三帧,其代码如下:
<html>
<head>
<title>盛达聊天室</title>
</head>
<%
' 获得聊天者信息
session("name")=request("name")
userin=session("name")& "于" & time & "进入" ' 显示聊天者昵称和进入时间
' 下面将聊天者信息保存到application中
Application.Lock ' 先锁定
' <br>用于分行显示
Application("online")= Application("online")+1 ' 在线人员加1
' 将聊天者信息保存到application中
Application("showinout")=userin & "<br>" & Application("showinout")
Application.Unlock ' 解除锁定
%>
<frameset rows="*,13%">
<frameset cols="*,17%">
<frame name="show" src="show.asp">
<frame name="show1" src="userinfo.asp" target="_self">
</frameset>
<frame name="input" src=input.asp>
</frameset>
</html>
说明:
▲ 通常聊天室采用框架结构进行页面设计,本聊天室分三帧,分别显示聊天内容、聊天者信息和用户输入聊天内容。
▲ 聊天者进入聊天室后,将昵称和进入时间等登录信息保存到Application中。
▲ 注意Application对象的使用方法。当某人登录聊天室,在这一刻只有这个人更新聊天室的登录信息,为了实现这个目标,Application对象使用了Lock和Unlock方法,这样,就可以保证在某一时刻只有一个人修改Application对象变量的值。
show.asp是整个聊天室框架结构中的主要帧页面,用于显示聊天信息,位置在框架结构的左上部,其代码如下:
<html>
<head>
<meta http-equiv="refresh" content="2">
</head>
<body>
<%
Response.Write Application("showsay") ' 读出Application中的信息,显示聊天内容
%>
</body>
</html>
说明:
<meta http-equiv="refresh" content="2">,表示页面每隔2秒自动刷新一次,通过这种刷新显示最新的聊天内容。如果没有这句,必须用户输入聊天内容并发送后才能刷新。由于HTTP协议的限制,Web聊天室一般不能实时更新聊天信息,这里采用每2秒刷新页面以显示最新的聊天信息,不过这样会给用户带来页面闪烁的感觉。
userinfo.asp用于显示聊天者信息,位置在框架结构的右边,其代码如下:
<html>
<head></head>
<body>
<p>成员信息<br>
共有<%=application("online")%>人</p>
<%
Response.Write Application("showinout") ' 读出Application中的信息,显示成员信息
%>
</body></html>
说明:
Application("showinout"),用于记录聊天者的登录与退出信息。
在input.asp中用户通过表单输入聊天内容,位置在框架结构的下部,其代码如下:
<html>
<head></head>
<body>
<form method="POST" action="" name="form1">
发言:
<input type="text" name="say" size=40 >
<input type="submit" value="发言" > <a target="_top" href="exit.asp">返回</a></form>
<%
IF Request("say")<>"" Then
name=Session("name") ' 获得聊天者呢称
say=request("say") ' 获得聊天内容
sayinfo="" & name &":"& say &""
' 将聊天内容保存到Application
Application.Lock ' 先锁定
Application("showsay")= sayinfo & "<br>" & Application("showsay")
Application.Unlock ' 解除锁定
End If
%>
</body>
</html>
说明:
▲ 用户的发言存储于Application("showsay")中。
▲ Application("showsay")= sayinfo & "<br>" & Application("showsay"),表示将新发言的内容加到以前发言内容的前面,然后再保存回Application("showsay")中,<br>的作用是将发言内容换行显示。
▲ <a target="_top" href="exit.asp">,链接至退出聊天室程序处理页面。只有通过单击这个链接退出,才能将在线人员减一,实现正常退出。
整个聊天室框架结构总体效果如图所示。

用户单击框架下部input.asp页面中的“返回”链接退出聊天室,其退出聊天室的信息由exit.asp处理退出,exit.asp代码如下:
<%
exituser=session("name") ' 获得退出者呢称
exituser=exituser & "于" & time & "退出" ' 获得退出时间
'下面几句将来访信息保存到application中
Application.Lock ' 先锁定
Application("online")=Application("online")-1 ' 在线人数减1
Application("showinout")= exituser & "<br>" & Application("showinout")
Application.Unlock ' 解除锁定
response.redirect"sdchatindex.asp" ' 重定向到首页
%>
说明:
通过本页面的程序处理,将在线人数减一,然后重定向到首页。如果是通过IE窗口上的【关闭】按钮或是IE【标准按钮】工具栏上的【后退】按钮退出,在线人数不会发生减一的变化,这就不符合在线人数的实际情况。
本实例使用了Session和Application记载用户信息和聊天信息。Application所记载的这些信息,服务器关机后将消失。也可以把Session和Application对象定义在专门的Global.asa文件中,这样可以很灵活地使用这两个对象,并获得更多更强的功能。
你也可以改用文本文件或是数据库的方式来存储聊天信息。
以上是一个最简单的聊天室,没有采用数据库技术,功能也比较弱,但可以实现基本的聊天功能。特别是程序设计中,使用了Session和Application记载用户信息和聊天信息,加深同学们对这两个对象的理解。
同学们可以尝试拓展这个聊天室的功能,比如,设定聊天室最多可容人数,允许显示的最大聊天行数,昵称输入不能为空,退出聊天室后要再次登录才能进行聊天室,显示在线聊天者昵称等。
前面我们介绍了两个相对比较简单的ASP系统的开发,下面所介绍的BBS论坛相对要复杂些,所牵扯到的ASP相关知识也比较全面。

实训作业:
在盛达公司的网站上加上简单的留言板。完善实例功能,加上显示实际在线用户名。
备注:

本聊天室具体实例效果可以参见校园网《心海扬舟》网站聊天室。

    

~ 江西信息应用技术职业学院信息技术系制作 ~

E-Mail:lxlz2050@163.net Tel:0791-5275546