jsp开发聊天室

来源:互联网 发布:java语言和c语言的区别 编辑:程序博客网 时间:2024/04/30 20:13

     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的很多特点在这里也没有体现,由于时间问题以后若有改进会加进去再贴出来。
      高手请不吝赐教。
      初学者一起进步。
                                      me:    JJ
                              Email: kensmail@yeah.net
         
          有信必复。 

原创粉丝点击