jsp是当前流行开发动态网页语言。本文简要介绍如何用jsp实现聊天室程序。
聊天室的设计思路
1. 功能、结构描述
用户注册登录,支持非注册访问。
用户登录时,输入用户名和密码,如果是第一次使用,会提示创建新用户。若为非注册用户提示注册,也可直接进入。验证成功后进入聊天主界面,包括三个窗口:聊天信息显示,用户列表,信息发送。在信息发送部分输入信息,并选择相关选项进行信息发送。退出时,自动删除用户列表中的相关信息。
1.1 信息显示
由服务器维护一个存放于application中的Vector类型的聊天信息数据ChatMessage,单条信息使用字符串拼接,基本结构如下:
发言人+动作+接受者+发言内容,
信息的拼接在发送方完成。
为实现私聊的功能,可在此结构基础上增加一个接受者数据域,置于信息结构开始并与特殊符号如"*,#"之类的组合分割。在接受显示时首先提取出来,判断本地是否应该显示,默认为全体在线用户。
当然可以专门新开窗口,只显示私聊信息,实现基本相同。
在用户session中设置一个变量,它存储用户登录时已有聊天信息最后一条的编号。本地显示信息时从这一条开始显示。在服务器清除聊天信息时此变量置为0,此后所有信息全部显示(私聊信息根据情况显示)。为控制方便,信息显示使用倒序,即最后发出的信息显示在页面最上方,省略了滚屏操作。
滚屏功能可以使用javascript脚本完成。
1.2 信息发送
完成信息的提取与拼接。主要由表单构成,包括发言人(hidden),动作、贴图、字体颜色 (select),私聊(check),发言内容(text),发送(submit,button)以及退出(button或href)。采用request的getParameter()方法提取各个数据域内容,拼接成为单条信息内容,根据是否私聊,添加接受者信息。
1.3 用户列表
显示在线的用户列表及各用户的详细信息。自动刷新或手动刷新。用户详细信息存于application中的一个Hashtable类型的结构userlist中,以用户呢称nick作为关键字key。Hashtable的好处在于用户退出时可以很迅速的删掉用户信息,操作简单。在显示时将其转换为Enumeration,可以循环的显示用户信息。
用户的详细信息由各部分拼接构成,在显示前将各个部分提取出来即可。用户信息在用户成功登陆后即加入Hashtable中。
1.4 用户注册
用户在表单中相应的位置填写相关信息,注册页面提取信息后根据nick在数据库中查询,如nick已存在,则提示重新填写nick,相反的情况直接将比用户信息插入数据库重中,并在页面中显示,用户选择登录或离开。
此处的检查应该有还有很多细节,如呢称不能使用特殊字符,emial的格式问题。
1.5 登录验证
提取用户nick和password,如为注册用户登录则使用nick在数据库中查询相关信息,进行口令比较,成功后将其他信息提取拼接,以nick作为关键字加入Hashtabel中。对于非注册用户,直接增加默认的其他信息后加入Hashtable。注意在这种情况要判断是否有重复的情况。Hashtable的特性很容易实现这一点。
2.具体设计要点
主要使用String类型的变量,这在Html语言中可以直接显示省略类型转换。
定时刷新的页面其Meta属性设为refresh。
注意变量的null检查,否则会在调试时出现不必要的异常。
本设计没有使用Javabean,实际设计应该尽量将重要的代码如数据库访问,用户列表维护等封装到bean之中。
kick功能可以如下实现:
1.为每个用户记录一个最后发言的时间,刷新用户列表室自动于当前时间比较,超过一定时间就kick, 同时发送提示信息
2.简单设置一个计数器存储最后一次发言后的新增信息数,当它大于某个数时即
kick,实际中这个数是可以与一个固定时间对应(可以根据概率知识得到)
全部源文件如下:
login.jsp 完成用户登录的输入
apply.jsp 用户注册信息输入 ,修改用户信息
applyok.jsp 用户注册时数据库操作
getinfo.jsp 得到当前的在线用户的列表和详细信息
frame.jsp 用户登录时的口令验证及初始化
send.jsp 发送信息
scface.jsp 注册时选择头像
reiceve.jsp 接收显示聊天信息
exit.jsp 用户退出更新在线用户
数据库
使用jdbc:odbc桥连接数据库,建立一个odbc数据源chat
这里数据库采用常见的microsoft access
数据库中包含表:
chat(Nickname,Password,Face,Sex,QQ,Email)
表中有Nickname,Password,Face,Sex,QQ,Email属性,均设为文本类型
其中前两个为必填字段。注意各属性的长度。
部署:
由于程序中没有采用javabean,故在部署时可直接将其作为某个已存在的工程的一部分,可直接使用(将所有文件拷贝到相应的文件夹即可)。
也可以作为新的工程部署,详细信息请参考相关文档。在使用Apach Tomcat 4.1时修改安装根目录下conf文件夹中的sever.xml文件中的相关部分。此处不加详述。
开发环境:
Apach Tomcat 4.1 + Editplus 2
更换环境,请自行参考相关文档修改相关内容。
本程序属学习时的练习,一些功能只有设计思路而没有实际实现。提供所有源文件,有兴趣可以增加新的功能(发一份源码给我)。界面的设计风格参考了网上的流行设计。大家可以进入某个聊天室自行获得html代码(大多数只能看到html代码,由此可以分析出部分设计思路)。此为学习制作,设计中有关安全,各种异常情况的处理等很多东西或没有给出实现代码,或根本没有涉及,jsp的很多特点在这里也没有体现,由于时间问题以后若有改进会加进去再贴出来。
高手请不吝赐教。
初学者一起进步。