网络聊天室系统设计实现分析_第1页
网络聊天室系统设计实现分析_第2页
网络聊天室系统设计实现分析_第3页
网络聊天室系统设计实现分析_第4页
网络聊天室系统设计实现分析_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-. z. -. -可修编- .科研训练网络聊天室系统设计与实现Design and implementation of network chat room system学生*专业软件工程*1305*指导教师* 祝*学院计算机科学技术学院二一六年六月-. z.起止周1719周数3实习地点计算机学院专业实验室南区研1213选题自选实习目的:培养学生未来进入职场的素质,以及企业级行业解决方案系统的分析、设计、实现等企业级综合应用能力。主要任务通过工程开发培养学生的职业素质,按照软件工程的思想,训练学生掌握面向对象分析/设计(UML 建模)、编码规、概要设计方法、详细设计方法、模块划分方法等技能;培

2、养学生的编程思想和根本工作技能,培养学生的编程能力。实习要求:要求学生能掌握软件开发的根本能力,具有工程开发的实际经历,按照专业方向或本人就业方向选择一个工程进展实际开发,能熟练运用常用的程序设计语言和开发工具,完成整个开发过程。实习容及进度安排:每个同学的课题的主要研究容,完成的主要功能、按周完成的工作总计3周,每周具体完成的容要写清楚指导教师评语:成绩:指导教师/带队教师签字 2016年 6月日-. z.目录TOC o 1-3 h u HYPERLINK l _Toc19969 一、引言 PAGEREF _Toc19969 1 HYPERLINK l _Toc18243 二、需求分析 PA

3、GEREF _Toc18243 1 HYPERLINK l _Toc318 2.1 系统运行环境需求 PAGEREF _Toc318 1 HYPERLINK l _Toc23798 2.2 模块功能分析 PAGEREF _Toc23798 1 HYPERLINK l _Toc31745 2.3系统功能构造 PAGEREF _Toc31745 3 HYPERLINK l _Toc23228 2.4系统数据流图 PAGEREF _Toc23228 3 HYPERLINK l _Toc21419 顶层数据流图 PAGEREF _Toc21419 3 HYPERLINK l _Toc3946 一层数据

4、流图 PAGEREF _Toc3946 3 HYPERLINK l _Toc30389 二层数据流图 PAGEREF _Toc30389 4 HYPERLINK l _Toc1711 2.5数据字典 PAGEREF _Toc1711 5 HYPERLINK l _Toc1246 三、概要设计 PAGEREF _Toc1246 5 HYPERLINK l _Toc16622 3.1系统总体构造设计 PAGEREF _Toc16622 5 HYPERLINK l _Toc26133 构造设计系统 PAGEREF _Toc26133 5 HYPERLINK l _Toc13067 系统功能模块构造

5、PAGEREF _Toc13067 6HYPERLINK l _Toc32153 3.2数据库设计 PAGEREF _Toc32153 8 HYPERLINK l _Toc5514 概念设计 PAGEREF _Toc5514 8 HYPERLINK l _Toc796 逻辑设计 PAGEREF _Toc796 8 HYPERLINK l _Toc1448 物理设计 PAGEREF _Toc1448 9 HYPERLINK l _Toc6635 四、详细设计 PAGEREF _Toc6635 9 HYPERLINK l _Toc20579 4.1流程图 PAGEREF _Toc20579 9 H

6、YPERLINK l _Toc15975 用户注册登录 PAGEREF _Toc15975 9 HYPERLINK l _Toc16005 在线用户显示模块 PAGEREF _Toc16005 11 HYPERLINK l _Toc9310 用户交流聊天模块 PAGEREF _Toc9310 12 HYPERLINK l _Toc12839 聊天信息显示模块 PAGEREF _Toc12839 13 HYPERLINK l _Toc13566 系统消息显示模块 PAGEREF _Toc13566 14 HYPERLINK l _Toc10580 管理员管理用户模块 PAGEREF _Toc10

7、580 14 HYPERLINK l _Toc4466 辅助功能 PAGEREF _Toc4466 15 HYPERLINK l _Toc5803 4.2算法 PAGEREF _Toc5803 16 HYPERLINK l _Toc26482 用户对话存储算法 PAGEREF _Toc26482 16 HYPERLINK l _Toc18488 检测用户是否被踢算法 PAGEREF _Toc18488 16 HYPERLINK l _Toc3914 4.2.3 检测当前用户是否有新消息算法 PAGEREF _Toc3914 17 HYPERLINK l _Toc5587 4.3界面设计 PAG

8、EREF _Toc5587 18 HYPERLINK l _Toc26408 登录首页 PAGEREF _Toc26408 18-. z. HYPERLINK l _Toc7117 注册界面 PAGEREF _Toc7117 19 HYPERLINK l _Toc15782 聊天室界面 PAGEREF _Toc15782 20 HYPERLINK l _Toc11187 4.4工程构造设计 PAGEREF _Toc11187 20 HYPERLINK l _Toc28148 4.5各类功能设计 PAGEREF _Toc28148 21 HYPERLINK l _Toc11369 实体类 PAG

9、EREF _Toc11369 22 HYPERLINK l _Toc8721 数据库操作Dao层 PAGEREF _Toc8721 23 HYPERLINK l _Toc11251 监听器 PAGEREF _Toc11251 23 HYPERLINK l _Toc5097 业务逻辑service层 PAGEREF _Toc5097 23 HYPERLINK l _Toc14497 工具箱Utils PAGEREF _Toc14497 24 HYPERLINK l _Toc11356 4.5.6 Actions PAGEREF _Toc11356 24 HYPERLINK l _Toc1144

10、五、系统实现 PAGEREF _Toc1144 24 HYPERLINK l _Toc6000 5.1用户注册登录模块 PAGEREF _Toc6000 25 HYPERLINK l _Toc11535 用户注册 PAGEREF _Toc11535 25 HYPERLINK l _Toc24394 用户登录 PAGEREF _Toc24394 26 HYPERLINK l _Toc4928 5.2在线用户显示模块 PAGEREF _Toc4928 28 HYPERLINK l _Toc27544 5.3用户交流聊天模块 PAGEREF _Toc27544 29 HYPERLINK l _Toc

11、18771 5.4聊天信息显示模块 PAGEREF _Toc18771 30 HYPERLINK l _Toc29069 5.5系统消息显示模块 PAGEREF _Toc29069 32 HYPERLINK l _Toc5006 5.6管理员管理用户模块 PAGEREF _Toc5006 32 HYPERLINK l _Toc173 5.7辅助功能 PAGEREF _Toc173 33 HYPERLINK l _Toc5720 六、总结与体会 PAGEREF _Toc5720 35 HYPERLINK l _Toc31473 6.1开发中遇到的问题 PAGEREF _Toc31473 35 H

12、YPERLINK l _Toc26184 6.2问题分析与解决方法 PAGEREF _Toc26184 35 HYPERLINK l _Toc31500 6.3经历与教训 PAGEREF _Toc31500 35 HYPERLINK l _Toc4569 参考文献 PAGEREF _Toc4569 37 HYPERLINK l _Toc472 附录 PAGEREF _Toc472 38-. z.引言随着网络的大幅度普及,以及网络技术快速开展,人们通过网络进展交流的方式发生着巨大的变化,人们不再拘泥于移动的通话模式,越来越多的人通过网络聊天工具进展交流,网络聊天室便是非常典型的聊天工具之一。聊天

13、室系统的即时交流方式满足了网络中人们同时与多人进展聊天交流的需要,使得较多的人在同一个聊天页面进展交流变得方便,简单。本设计所完成的网络聊天室具有常用聊天室的所有功能,包括使用账号登录聊天室、注册账号、显示在线用户列表、显示系统消息、两人之间进展私密聊天、消息提醒、发送表情、修改发送文字颜色;同时,为了管理聊天室中的用户使用语言的文明,赋予管理员踢出使用不文明语言的用户功能,显示全部聊天信息。该系统采用B/S浏览器/效劳器构造进展开发,参考网络中正在使用的大型聊天室的架构、分析聊天室可实现功能,结合本次设计的相关要求,进展开发设计并写出需求分析说明书。该系统具体开发环境:使用Windows8.

14、1专业版作为效劳器运行平台,效劳器开发语言使用Java语言,前台使用Jsp技术、JavaScript、Jquery语言,系统框架使用Struts2+Hibernate+Spring框架,后台数据库使用MySql数据库。需求分析该系统采用B/S模式设计,开发目的主要是提供一个基于网络的平安文明的供多人聊天社交平台。2.1 系统运行环境需求该系统是在windows 8.1专业版操作系统下,搭建的运行平台,使用myEclipse作为开发工具,mySql作为数据库,Java语言作为系统后台开发语言。JSP技术作为前台开发语言,其中使用JavaScript以及Jquery作为脚本语言。工程框架使用Str

15、uts+Spring+Hibernate框架。效劳器配置:配置效劳器。客户端要求配置:谷歌浏览器、狐火浏览器以及IE浏览器5.0以上版本。2.2 模块功能分析用户注册登录模块新用户在使用该聊天室系统时,必须先进展注册新用户操作,后台将注册信息添加到数据库中,用于胡勇登录验证;在注册成功之后再进展登录;当用户名与密码匹配成功,即可进入聊天室系统。在线用户显示模块当用户登录进入系统后,该页面实现在线用户的统计,并将在线用户依次显示出来。如果当前用户属于管理员角色,则在普通用户角色的右边显示踢下线,如果当前用户属于普通用户角色,则正常显示在线用户名。用户交流聊天模块该模块主要负责发送信息容,选择聊天

16、对象;除此之外,可以修改聊天容的字体颜色以及发送的表情。发言的颜色和发言的表情通过下拉式组合框实现。发言容书写完毕后。通过点击发送按钮,发送聊天容。聊天信息显示模块当用户选择聊天对象并发送聊天容后,显示出当前发送的容以及之前的历史聊天容,聊天的容只有对话的两人可见,其他人不可见。当用户退出系统后,再次登录进入聊天室时,两人的对话记录依然存在。系统消息显示模块系统消息提示所有用户,聊天室的文明守则,以及当其他用户进入、离开或被管理员踢出聊天室的情况。管理员管理用户模块管理员用户可以与其他用户聊天,并且随时监视其他用户的言行,一旦出现不文明用语,即将改用户踢出聊天室。辅助功能辅助功能包括:显示全部

17、聊天信息、退出聊天室、检测用户是否有新消息。显示全部信息是指当用户之间的聊天信息占满全屏的时候,点击显示全部信息,即可看到全部的聊天容。退出聊天室是指用户离开聊天室。检测用户是否有新信息,当用户收到其他用户发来的消息时,提示用户。2.3系统功能构造图2-1 功能构造图2.4系统数据流图顶层数据流图图2-2 顶层数据流图一层数据流图图2-3 一层数据流图二层数据流图图2-4 二层数据流图2.5数据字典数据项名称:用户名数据项别名:username说明:用户唯一标识类型:varchar长度:20取值围及含义:用户登录聊天室的用户名长度在120之不管数字、字符还是符号。表2-1 用户名数据字典数据项

18、名称:密码数据项别名:password说明:用户登陆密码类型:varchar长度:20取值围及含义:用户登录聊天室的密码长度在120之不管数字、字母还是符号。表2-2 密码数据字典数据项名称:级别数据项别名:type说明:用户身份级别类型:varchar长度:20取值围及含义:用户登录聊天室的角色,管理员admin或者普通用户user。表2-3 级别数据字典概要设计3.1系统总体构造设计构造设计系统图3-1 总体构造图系统功能模块构造用户注册登录模块用户注册是添加用户到数据中,只能注册普通用户,当注册验证信息合格,即可登录进入聊天室。图3-2 用户注册登录H图在线用户显示模块当用户登录进入系统

19、后,该页面实现在线用户的统计,并将在线用户依次显示出来。如果当前用户属于管理员角色,则在普通用户角色的右边显示踢下线,如果当前用户属于普通用户角色,则正常显示在线用户名。用户交流聊天模块交流包括选择聊天对象,选择发送表情,字体颜色。图3-3 用户聊天H图聊天信息显示模块聊天信息的显示,首先系统必须获得与当前用户正在进展聊天的对象,根据聊天对象的用户名,获得存储在系统中的聊天记录,传送到浏览器客户端,浏览器客户端进展1s刷新界面,从而获取两人之间的私密聊天记录并显示在界面上。图3-4 聊天信息显示H图系统消息显示模块系统信息包括:聊天室守则、系统公告。图3-5 系统信息显示H图管理员管理用户模块

20、管理员用户可以与其他用户聊天,并且随时监视其他用户的言行,一旦出现不文明用语,即将改用户踢出聊天室。辅助功能辅助功能包括:显示全部聊天信息、退出聊天室。显示全部信息是指当用户之间的聊天信息占满全屏的时候,点击显示全部信息,即可看到全部的聊天容。退出聊天室是指用户离开聊天室。3.2数据库设计概念设计E-R图:该系统只存在用户一个实体,用户的属性包括:id、用户名、密码、级别。图3-6 E-R图逻辑设计用户表字段名数据类型长度说明描述idint4不空用户iduserNamevarchar20不空用户名passwordvarchar20不空登录密码typevarchar20不空用户级别表3-1 用户

21、表物理设计数据库类型使用mySql数据库,用户表的主键为id。详细设计4.1流程图用户注册登录用户注册的时候,操作人员输入想取的用户民,输入自创密码与确认密码,点击注册;此时,系统会首先检测两次密码是有一致,假设不一致,提示用户密码不一致,请重新输入。假设一致,检测用户名是否已经被注册过,假设已经被注册,提示是用户,已被注册。假设为被注册,系统添加用户注册信息到数据库user表中。界面提示用户注册成功,并跳转到登录界面。注册的用户默认type是普通用户,即user。图4-1 注册流程图用户登录的时候,用户输入用户名,密码,点击进入按钮,系统获取用户所填写的用户名与密码,首先判断该用户名是否存在

22、于数据库,假设不存在,提示用户不存在该用户,请重新填写或注册,假设该用户名存在,则判断密码与用户名是否匹配,假设不匹配,提示用户密码错误,请重新填写,假设匹配,进入聊天室界面。图4-2 登录流程图在线用户显示模块当用户登录进入聊天室时,系统会将用户的信息存入application属性的userMap中,进入系统后,在jsp中获取userMap,将所有的用户信息中的用户名显示出来。图4-3 显示在线人数流程图用户交流聊天模块用户实现找人聊天,点击聊天对象的用户名,获取聊天对象,填写发送容,选择表情、与发送字体的颜色,点击发送即可进展聊天。在未选择聊天对象时,点击发送,提示用户选择聊天对象;在未填

23、写发送的容点击发送时,提示用户未填写发送容。发送的表情默认为微笑着,字体颜色默认为黑色。图4-4 发送信息流程图聊天信息显示模块聊天信息显示,首先必须保证聊天对象的用户名不为空,当不为空时,系统将获取用户名,在application作用域中获得,相应的聊天记录属性,返回到jsp中,并显示在界面中。图4-5 显示聊天记录流程图系统消息显示模块在用户登录聊天室时,系统存储聊天室的聊天守则,并获取登录的用户名,存储系统公告*进入聊天室!;当用户离开聊天室时,修改系统公告*离开聊天室!;当用户被管理员踢出聊天室时,修改系统公告*,被管理员踢出聊天室!。图4-6 显示系统信息流程图管理员管理用户模块当用

24、户使用了不文明的语言,管理员有权利该用户踢出聊天室。获取用户名,在application中的userMap中获得相应的用户session,去除该session即可将用户踢下线。图4-7 管理员管理用户流程图辅助功能显示与*人的全部聊天信息,当聊天的容占满全屏,点击显示全部消息,即可显示全部信息。当用户离开聊天室时,系统获取当前用户名,并释放user的session。检测用户是否有新消息:图4-8 检测信息流程图4.2算法用户对话存储算法首先获取进展对话双方的用户名以及id,再比较两者的id假设id1id2,则messageName = userName1 + userName2;否则messa

25、geName = userName2 + userName1。图4-9 用户对话存储算法检测用户是否被踢算法当用户登录进入聊天室时,向application中存储一个isKickedMap属性,将用户名添加到isKickedMap中并赋值为11表示在线,-1表示被踢。当管理员将*个用户踢下线时,将isKickedMap属性中的改用户名修改成*符号,并赋值为-1。Jsp页面每秒刷新一次,当检测到isKickedMap属性中getAttribute*= -1 时,则该用户被踢下线,此时要在jsp页面中提示用户已被踢下线,并返回登陆界面。图4-10 检测用户是否被踢算法4.2.3 检测当前用户是否有

26、新消息算法Jsp每隔1s就检测一次当前session中的call属性中是否有值,如果有值,返回到jsp中,在jsp中遍历出有个值,并且让id为该值的标签的背风光为红色。图4-11 检测当前用户是否有新消息算法4.3界面设计登录首页登陆首页是写在inde*.jsp中的,前台主要运用jsp动态网页技术。并使用JavaScript语言判断用户是否正确输入用户名以及密码。在登录界面可以点击注册用户进入用户注册界面。图4-12 登录界面注册界面图4-13 注册界面聊天室界面聊天室界面:左侧是在线人员列表显示,和在线人数的统计;右侧是专门显示系统公告的地方;中间属于聊天容的显示;下方是用户发送消息的模块,

27、在该模块中,当用户点击聊天对象的用户名,下方的第一个input框将获取到聊天对象的用户名,还可以选择聊天的表情与字体的颜色,在最下角的input框可以编辑所要说的话,点击发送,即可发送聊天容。图4-14 聊天室主界面4.4工程构造设计该系统采用SSHstruts2 + spring + hibernate框架搭建工程。系统的根本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责接收请求(Request)和传送响应(Response),然后Struts根据配置文件(struts-config.*ml)将ActionServlet接收到的Request委派给相应的Action处理。在业务

28、层中,管理效劳组件的Spring IOC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。采用上述开发模型,不仅实现了视图、控制器与模型的彻底别离,而且还实现了业务逻辑层与持久层的别离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。工程

29、构造中其中:applicationConte*t.*ml文件是关于配置spring的配置文件,主要是将各种POJO,JAVA,action配置到*ML转交给beanfactory管理,降低耦合度。perties文件配置struts的属性值,程序员可以通过它来管理Struts 2 框架中定义的大量常量。perties 文件是一个标准的properties 文件。struts.*ml 为Struts 2的核心配置文件。struts.*ml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义。图4-15 工程构造4.5各类功能设计类图图4-16 工程类图实体类User.

30、java,属性包括:private int id;/idprivate String username;/用户名private String password;/密码private String type;/级别用于建立与数据库user表表的映射关系,管理用户。Message.java,属性包括:private static String eIn = 走进聊天室!;private static String goOut = 离开聊天室!;private static String kicked = 被管理员踢出去!;用于获取系统公告。数据库操作Dao层BaseHibernateDAO.java

31、,方法:public List query(String hql, Object values,int firstResult, int ma*Results)用于查询数据库。public Serializable save(Object obj) 用于添加用户到数据库中监听器MyServletConte*tListener.java,实现了ServletConte*tListener接口。重写方法:public void conte*tInitialized(ServletConte*tEvent sce)用于监听:一旦创立servletConte*t对象,就添加用户和相应的session进

32、去。使用此监听器可以得到所有登录的用户以及相应的session。监听器的配置:在WEB-INF下的web.*ml中写上下面语句。.cust.listener.MyServletConte*tListener实体类实现监听HttpSessionBindingListener接口,当当前用户session.setAttribute(user, user)时,运行public void valueBound(HttpSessionBindingEvent event)方法,当session.invalidate()时,运行public void valueUnbound(HttpSessionBin

33、dingEvent event)方法。业务逻辑service层LoginSrvImpl.java,方法:public Map e*ecuteLogin(String username, String password)用于用户登录,返回值Map:当用户名不存在reMap.put(result, -1);reMap.put(msg, 用户不存在!); 当密码错误时,eMap.put(result, -2);reMap.put(msg, 密码错误!);登录成功时,reMap.put(result, 1);reMap.put(msg, 登录成功!);reMap.put(user, user);Reg

34、isterSrvImpl.java,方法:public int e*ecuteRegister(String userName, String password)用于注册,添加用户到数据库。public int query(String userName)用于判断用户名是否已经被注册了。返回值为int,当用户被注册return -1;工具箱UtilsUtils.java,方法:public static Map gainUserMap()/获取application里的userMappublic static Map gainSysMessageMap()/获取系统消息public stati

35、c HttpSession gainToSession(String toId)/得到对方sessionpublic static HttpSession gainCurrentSession()/得到当前sessionpublic static ServletConte*t gainApplication()/得到applicationpublic static String gainMessageName(String from, String to, String fromId, String toId)/获得聊天消息的名称4.5.7 ActionsCheckNewMessageActi

36、on.java /检测当前用户是否有新消息CheckUserIsKickAction.java /检测当前用户是否被管理员踢出聊天室E*itAction.java /当前用户离开聊天室KickAction.java /管理员踢出语言不文明的用户LoginAction.java /用户登录RegisterAction.java /新用户注册SendMessageAction.java /发送聊天消息给指定用户ShowSendMessage.java /显示聊天信息SystemMessageAction.java /显示系统消息系统实现聊天室的功能主要是实现用户的发言和观看大家发言的容,发言界面和

37、聊天容需要显示在同一屏界面中,以方便发言和观看,另外,通常还需要显示当前在线的人数和用户列表,以方便选择对谁发言。用户书写发言的界面、聊天容的显示、用户列表的显示均需要通过单独的页面来实现,为了能在同一屏界面中同时显示多个页面的容,此时需要利用带框架集的页面来实现。框架集是多个框架的集合,每一个框架可显示一个页面的容,在同一屏中需要显示多少个页面,就需要创立一个具有多少个框架的框架集来实现,整个框架集最后存盘形成一个页面,以后浏览该页面时,各框架集中的容就会自动显示出来。5.1用户注册登录模块用户注册用户进入注册页面后,根据要求,填写表单中各项数据,单击注册按钮后,将输入的容通过异步刷新的方式

38、传递给后台处理页面register.action进展写入数据库处理。其中,在进展表单传递的时候,系统还调用了JavaScript的function check函数对填入表单的数据进展检验,一旦发现表单中有一个数据项不符合要求,系统便会弹出出错信息,提示用户重新填写。在后台处理页面中,系统先定义对应于表单各数据项的变量,利用Struts2配置,将用户填入表单的数据赋给这些变量,判断用户名是否已经存在,存在返回数据2,前台接收到数据2,提示用户用户名已经被注册,请重新填写,假设改用户名有效,但是两次密码不一致,则返回数据1,前台接收到数据1,则提示用户两次密码不一致,请重新输入,这些数据都正确的情

39、况下,存入数据库的时候直接将变量值添入数据库即可,并返回数据4,前台接收到数据4则提示用户注册成功,并跳转到登录界面,用户可以直接用刚刚注册的用户登录进入聊天室主页,假设存入数据库失败,则返回数据3,提示用户注册失败。下面以zhuwei为用户名,111为密码进展注册,前提是数据库中没有该数据的记录,结果是注册成功。数据库chatroom,表user中的数据记录:图5-1 数据库记录注册界面以及填写的信息,可以看到数据库并没有该数据的记录。图5-2 注册用户zhuwei注册成功:图5-3 注册成功用户登录用户在聊天室登录界面填入正确的注册信息,单击登录,系统将自动把用户填入的、密码于数据库中存放

40、的用户注册信息进展比对验证。系统进展用户身份验证时,首先利用Request对象,将用户填入的即用户名、密码传递给预先定义的变量,再使用Select语句,将变量值与用户信息表进展比对List list = dao.query( from User where username=, username);当list不为空时,表示该用户名已经注册可以进展登录操作,然后比对密码是否与数据库中的密码一致。User user = (User) list.get(0);if(password.equals(user.getPassword()如果一致,用户登录成功,页面发生跳转,如果一开场用户名不存在于数据库

41、list = null 或者list.isEmpty(),提示用户用户名错误。如果密码不一致提示用户密码错误。以Response对象的Redirect方法跳转到聊天主页面,Response对象的Redirect方法是实现页面的跳转,使当前页面跳转到指定的页面。在用户登录进聊天主页面的同时,系统将该用户的用户名以及该用户的session存入application中的userMap集合中,目的是利用userMap集合遍历出所有在线的用户,显示在线用户的用户名。同时,也将该用户存入当前session中,session.setAtrribute(user, User);目的是在聊天主页能够获取当前用户

42、的信息,可以通过User对象中的type属性,判断当前用户的级别,是否为管理员,是否有权限踢出其他用户。通过上述的用户验证和数据传递,系统跳转到聊天页面,此时用户便可在聊天主页面进展聊天交流了。下面以刚刚注册的用户信息登录进入聊天室:图5-4 zhuwei用户登录点击进入,进入聊天室,如下列图所示,可以看到该用户已经成功登录并存入application的userMap集合中,当前在线列表中也遍历出来该用户的用户名,系统公告也显示zhuwei走进聊天室!。图5-5 在线人员列表显示图5-6 系统公告显示5.2在线用户显示模块为了存储所有登录进入聊天室的用户,在jsp的置对象application

43、中设置一个集合属性,userMap 该集合的关键字为User用户对象,值是该用户对象所对应的session值。如此便可以根据user得到user的session值。为了判断集合中的关键字user对象与传入的user对象相等,在实体类User中重写int hashCode() 与boolean equals(Object obj)方法比较两者的id是否一样,id一样则User对象一样,反之则不一样。当浏览器进入登录首页,创立servletConte*t对象,监听器MyServletConte*tListener监听servletConte*t对象的创立,就在向application中添加属性us

44、erMap;当用户确认登录成功,将User对象user添加到时,在public void valueBound(HttpSessionBindingEvent event)方法中得到userMap,并向其添加当前session与用户user进去。这样application中就有所有登录进去聊天室的用户,所以在jsp页面也就是online.jsp中使用el表达式$userMap即可将所有在线用户显示出来,如下列图所示:图5-7 在线人员列表显示当*个用户离开或被管理员踢出聊天室时,系统将得到的userMap集合根据离开的用户的id找到相应的session,去除该session即可删除离开的用户。

45、在显示当前在线人员列表的时候,首先要判断当前用户是否是管理员,管理员可以踢出其他用户,但是管理员之间是不可以相互踢出,即判断条件为:当前用户的级别等于admin并且要显示的用户的级别不等于admin,在jsp中写成:在满足条件的情况下,显示踢下线。踢下线下面登录一个管理员aaa:图5-8 登录管理员在用户aaa中的在线人员列表中用户zhuwei的右边显示踢下线操作,但在用户zhuwei的在线人员列表当中用户aaa的右边不显示踢下线操作:图5-9 aaa的在线人员显示图5-10 zhuwei的在线人员显示5.3用户交流聊天模块进入聊天主页面后,用户便可在主页面下方的发言界面设计书写自己想要说的话

46、,以及想对谁说,同时,系统还提供了发言字体颜色选择、插入表情、图片的功能,如图下列图所示,让用户的聊天更有趣味。图5-11 写对话界面在点击发送调用JavaScript的send()方法,在发送消息之前,确保已经选择聊天的对象,并将用户名显示在zhiwei对右边的文本框中,以及发送的容不为空时,即可调用后台的sendMessage.action。用户发言界面采用Jsp表单from模式设计,在表单包括发言对象、发言容、发送容字体颜色以及发言颜色,并未它们每一个标签写上name值。这些表单数据,通过post的异步刷新方式,提交到后台,后台action的属性中与jsp的标签则值一样,并为每个属性添加

47、上set方法。在得到这些属性值后,根据Utils.gainMessageName(from,to,fromId,oId);方法得到对话的名称messageName,然后将这些属性值写成html语言:sourceMessage += + from+ + face+ 对 + to + 说:+ + content + + sendTime + ;之后将sourceMessage存入application中:Utils.gainApplication().setAttribute(messageName, sourceMessage);到此为止,聊天容就已经发送,等发言对象端接收并显示消息容。在面管理

48、员aaa将发送一段文字给用户zhuwei:图5-12 aaa向zhuwei发送一条对话5.4聊天信息显示模块当聊天对象没有选择聊天对象时,例如用户zhuwei开场并没有选择聊天对象aaa,但是aaa向zhuwei发送了消息,此时,系统检测到zhuwei有新消息,所有在jsp页面中将把aaa的背风光变成红色以提醒zhuwei有新消息来自aaa,如下列图所示。这个功能在辅助功能中介绍:图5-13 zhuwei检索到aaa有新消息提醒中选择聊天对象aaa后,jsp开场刷洗界面,并调用JavaScript的方法showSendMessage(),在该方法中还是已post的异步刷新方式,调用后台的sho

49、wSendMessage.action。在该action中同样将获取application的消息名称,并根据此消息名称获得相应的对话:String message = (String) Utils.gainApplication().getAttribute(messageName);如果message不等于null,则向jsp中输出message:response.getWriter().println(message);在jsp中的回调函数中获得data,并在id为content的div中显示data:$(#content).html(sysBBS + data + );Jsp界面每隔1s

50、就刷新界面,调用后台showSendMessage.action的action获取最新的消息。例如用户zhuwei收到来自aaa的消息,如下列图所示:图5-14 zhuwei收到aaa的对话并显示在聊天容中用户zhuwei回复用户aaa:图5-15 zhuwei向aaa回复一条对话在用户aaa的界面中收到来自zhuwei的回话:图5-16 aaa收到zhuwei的回复至此,聊天信息的显示完毕。5.5系统消息显示模块系统消息包括聊天室守则欢送来到聊天室,请遵守聊天室规则,不要使用不文明用语。的显示;还有就是系统公告的显示。首先聊天室准则的显示,一旦用户登录进入聊天室守则就被显示在聊天容的下方,它

51、的实现主要是在jsp中,一旦加载了聊天室主页main.jsp就执行:var sysBBS = 欢送来到聊天室,请遵守聊天室规则,不要使用不文明用语。;$(#content).html(sysBBS);这两句js代码。而当用户开场选择聊天对象进展聊天时,调用的显示聊天信息的action返回到jsp的data时,sysBBS与data一同显示在聊天容上:$(#content).html(sysBBS + data + );对于系统公告,首先创立了一个实体类Message,其中它的属性包括了所有系统公告的容;当用户调用登录action时,并且验证成功,登录成功时,向application中添加属性s

52、ysMessageMap,并且属性记录用户登录情况:sysMessageMap.put(user.getUsername(), Message.geteIn();Utils.gainApplication().setAttribute(sysMessageMap, sysMessageMap);当用户离开聊天室时,向application中得到sysMessageMap属性,并根据用户名得到对应的值,将其修改为Message.getGoOut(),再次存入application当中。当用户被管理员踢出聊天时,同样获取sysMessageMap,根据用户名得到相应的值,将其修改成Message.

53、getKicked(),再次存入application当中。下面将用户zhuwei退出聊天室,或是将其踢出聊天室,效果如下列图:图5-17 aaa将zhuwei踢出聊天室图5-18 zhuwei主动离开聊天室5.6管理员管理用户模块当普通用户使用了不文明的语言,管理员有权将其踢出聊天室。当管理员点击踢下线操作时,调用后台的kick.action,并将踢出用户的id与用户名传参到后台,在action中,获取application中的userMap,根据id得到相应的session,去除该session即可踢出用户。但是存在一个BUG,当用户自己退出聊天室时,其session也将被去除,由此导致,

54、jsp在调用js方法check()检测是否被踢出去的时候,出现用户自己退出聊天室时也被当成被踢提示用户由于您使用不文明语言,被踢下线了!。解决方法是:在application中再存入一个属性isKickedMap,关键字存入用户名,值存入数字,1表示在线;-1表示被踢。当用户被踢时,将其用户名改为*,并将值改为-1。这样在调用check方法时,先判断是否存在*,并且其值是否为-1,才进展被踢提示,否则不提示:if(isKickedMap.get(*) != null)if(Integer)isKickedMap.get(*) = -1)/被踢isKickedMap.remove(*);Util

55、s.gainApplication().setAttribute(isKicked, isKickedMap);if(user = null)response.getWriter().println(1);elseresponse.getWriter().println(2);elseresponse.getWriter().println(3);5.7辅助功能显示全部聊天信息:直接调用js方法checkScrollScreen()if (!$(#scrollScreen).attr(checked) $(#content).css(overflow, scroll); else $(#con

56、tent).css(overflow, hidden);/当聊天信息超过一屏时,设置最先发送的聊天信息不显示$(#content).scrollTop($(#content).height() * 2);setTimeout(checkScrollScreen(), 500);退出聊天室:释放当前用户的session即可。提醒用户是否有新信息:每个用户的session当中存入一个call属性,该属性属于List call = new ArrayList();类型;在*个用户对其进展聊天的时候,根据聊天对象的名称在application获取session,在session当中获取call属性,将

57、发起会话的用户名称添加到call当中:List call = (List) toSession.getAttribute(call);call.add(from);toSession.setAttribute(call, call);在当前用户的jsp当中每隔1s就调用一次gainCall方法,其中调用checkCall.action,在这个action中获取该用户的session的call属性,遍历出所有用户名,将用户名返回到jsp中:if (data != null) data = data.toString();var strs = new Array(); /定义一数组strs = d

58、ata.split(,); /字符分割for (i=0; istrs.length ;i+ ) var id = # + strsi;$(id).css(background-color, red);将id为该用户名的设置为红色;当用户已经读取这些信息之后,依次将call中的值删除:List call = (List) session.getAttribute(call);if(call != null & !call.isEmpty()for (int i = 0; i call.size(); i+) if (call.get(i).equals(to) call.remove(i); i

59、-; 这样在读取完信息之后,就不会让用户名的背风光一直为红色,将恢复原色表示没有最新消息。图5-19 zhuwei接到aaa的消息提醒图5-20 zhuwei读取aaa的消息总结与体会6.1开发中遇到的问题我在聊天室系统程序设计过程中,遇到的问题大体可分为两类:A.知道但不会。这类问题往往是我知道应该怎么去设计,但却就是动不了手,要不就错误百出。B.完全不会。这类问题摆在面前,我只能束手无策,苦恼而又无奈。6.2问题分析与解决方法对于第一类问题,其实本质上不存在什么大的问题,都是因为自己平时学习功底不够,还有编程时不够慎重,才造成的。人非完人,学过了,有点不懂或迷惑的地方也是很正常的,再说竟然知道

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论