版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
科研训练
网络聊天室系统设计与实现
Designandimplementationofnetworkchatroomsystem
学生姓名)00(
专业^软件工程
学号【1305XXXXX
指导教师李XX祝XX
学院计算机科学技术学院
二。一六年六月
长春理工大学实习报告
起止周17~19周数3
计算机学院专业实验室南区研
实习地点选题自选
1213
实习目的:
培养学生未来进入职场的素质,以及企叶级行加解决方案系统的分析、设计、实
现等企业级综合应用能力。
主要任务通过项目开发培养学生的职业素质,按照软件工程的思想,训练学生
掌握面向对象分析/设计(UML建模)、编码规范、概要设计方法、详细设计方法、
模块划分方法等技能;培养学生的编程思想和基本工作技能,培养学生的编程能力。
实习要求:
要求学生能掌握软件开发的基本能力,具有项目开发的实际经验,按照专业方
向或本人就业方向选择一个项目进行实际开发,能熟练运用常用的程序设计语言和
开发工具,完成整个开发过程。
要求学生能掌握软件开发的基本能力,具有项目开发的实际经验,按照专业方
向或本人就业方向选择一个项目进行实际开发,能熟练运用常用的程序设计语言和
开发工具,完成整个开发过程。
实习内容及进度安排:
每个同学的课题的主要研究内容,完成的主要功能、按周完成的工作(总
计3周,每周具体完成的内容要写清楚)
每个同学的课题的主要研究内容,完成的主要功能、按周完成的工作(总
计3周,每周具体完成的内容要写清楚)
长春理工大学实习报告
指导教师评语:
成绩:
指导教师/带队教师(签字)
2016年6月H
长春理工大学实习报告
4.1。3用户交流聊天模块...................................8
4.1。4聊天信息显示模块...................................8
4.1。5系统消息显示模块...................................8
4.1.6管理员管理用户模块.................................8
4.1.7辅助功能...........................................9
4.2算法.......................................................9
421用户对话存储算法.....................................9
4o2.2检测用户是否被踢算法...............................9
4o2.3检测当前用户是否有新消息算法......................9
4o3界面设计................................................10
4•3.1"|^J^H•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••10
ii
长春理工大学实习报告
4o3.2注册界面...........................................10
4.3。3聊天室界面.........................................10
4o4工程结构设计............................................10
4。5各类功能设计............................................11
4。5o1实体类...........................................11
4.5o2数据库操作Dao层..................................12
4.5.3监听器..............................................12
4o5o4业务逻辑service层................................13
4.5o5工具箱Utils.................................................................................13
4.5。6Actions.........................................................................................14
五、系统实现....................................................14
5.1用户注册登录模块.........................................15
5.1.1用户注册............................................15
5.1.2用户登录............................................16
5.2在线用户显示模块.........................................17
5o3用户交流聊天模块........................................18
5.4聊天信息显示模块.........................................19
5。5系统消息显示模块.......................................20
5.6管理员管理用户模块.......................................21
5o7辅助功能................................................22
六、总结与体会..................................................24
6.1开发中遇到的问题.........................................24
6.2问题分析与解决方法.......................................24
in
长春理工大学实习报告
6o3经验与教训..............................................25
参考文献.........................................................25
附录.............................................................26
IV
长春理工大学实习报告
一、引言
随着网络的大幅度普及,以及网络技术快速发展,人们通过网络进行交流的
方式发生着巨大的变化,人们不再拘泥于移动电话的通话模式,越来越多的人通
过网络聊天工具进行交流,网络聊天室便是非常典型的聊天工具之一。聊天室系
统的即时交流方式满足了网络中人们同时与多人进行聊天交流的需要,使得较
多的人在同一个聊天页面进行交流变得方便,简单.
木设计所完成的网络聊天室具有常用聊天室的所有功能,包括使用账号登
录聊天室、注册账号、显示在线用户列表、显示系统消息、两人之间进行私密聊
天、消息提醒、发送表情、修改发送文字颜色;同时,为了管理聊天室中的用户
使用语言的文明,赋予管理员踢出使用不文明语言的用户功能,显示全部聊天信
息。
二、该系统采用B/S(浏览器/服务器)结构进行开发,参考网
络中正在使用的大型聊天室的架构、分析聊天室可实现功能,
结合本次设计的相关要求,进行开发设计并写出需求分析说
明书。
三、该系统具体开发环境:使用Windows8o1专业版作为
服务器运行平台,服务器开发语言使用Java语言,前台使用
Jsp技术、JavaScript^Jquery语言,系统框架使用
Struts2+Hibernate+Spring框架,后台数据库使用MySql数
据库。
四、需求分析
该系统采用B/S模式设计,开发目的主要是提供一个基于网络的安全文明的
供多人聊天社交平台。
2.1系统运行环境需求
该系统是在windows8.1专业版操作系统下,搭建的运行平台,使用myEclipse作
长春理工大学实习报告
为开发工具,mySql作为数据库,Java语言作为系统后台开发语言.
JSP技术作为前台开发语言,其中使用JavaScript以及Jquery作为脚本语言.工程框
架使用Struts+Spring+Hibernate框架。
服务器配置:
配置叩ache—tomcat-7.0o39服务器。
客户端要求配置:
谷歌浏览器、狐火浏览器以及IE浏览器5。0以上版本.
2.2模块功能分析
(一)用户注册登录模块
新用户在使用该聊天室系统时,必须先进行注册新用户操作,后台将注册
信息添加到数据库中,用于胡勇登录验证;在注册成功之后再进行登录;当用
户名与密码匹配成功,即可进入聊天室系统。
(-)在线用户显示模块
(三)当用户登录进入系统后,该页面实现在线用户的统计,并将在线用户
依次显示出来。如果当前用户属于管理员角色,则在普通用户角色的右边显示“踢
下线”链接,如果当前用户属于普通用户角色,则正常显示在线用户名。
(四)用户交流聊天模块
(五)该模块主要负责发送信息内容,选择聊天对象;除此之外,可以修改聊
天内容的字体颜色以及发送的表情。发言的颜色和发言的表情通过下拉式组合框
实现。发言内容书写完毕后。通过点击“发送”按钮,发送聊天内容.
(六)聊天信息显示模块
(七)当用户选择聊天对象并发送聊天内容后,显示出当前发送的内容以及
之前的历史聊天内容,聊天的内容只有对话的两人可见,其他人不可见。当用户
退出系统后,再次登录进入聊天室时,两人的对话记录依然存在.
(八)系统消息显示模块
2
长春理工大学实习报告
(九)系统消息提示所有用户,聊天室的文明守则,以及当其他用户进入、
离开或被管理员踢出聊天室的情况.
(十)管理员管理用户模块
(十一)管理员用户可以与其他用户聊天,并且随时监督其他用户的言行,
一日.
(十二)出现不文明用语,即将改用户踢出聊天室。
(十三)辅助功能
辅助功能包括:显示全部聊天信息、退出聊天室、检测用户是否
有新消息.显示全部信息是指当用户之间的聊天信息占满全屏的时候,
点击显示全部信息,即可看到全部的聊天内容,退出聊天室是指用户
离开聊天室。检测用户是否有新信息,当用户收到其他用户发来的消
息时,提示用户.
2o3系统功能结构
图2-1功能结构图
2.4系统数据流图
2。4。1顶层数据流图
图2-2顶层数据流图
2.4.2一层数据流图
图2-3一层数据流图
2o4.3二层数据流图
图2-4二层数据流图
3
长春理工大学实习报告
2.5数据字典
表2—1用户名数据字典
数据项名称:用户名
数据项别名:username
说明:用户唯一标识
类型:varchar
长度:20
取值范围及含义:用户登录聊天室的用户名长度在1〜20之内不论数字、
字符还是符号.
取值范围及含义:用户登录聊天室的用户名长度在1〜20之内不论数字、
字符还是符号.
数据项名称:密码
数据项别名:password
说明:用户登陆密码
类型:varchar
长度:20
取值范围及含义:用户登录聊天室的密码长度在I〜20之内不论数字、字
母还是符号。
取值范围及含义:用户登录聊天室的密码长度在1〜20之内不论数字、字
母还是符号。
表2—2密码数据字典
数据项名称:级别
4
长春理工大学实习报告
数据项别名:type
说明:用户身份级别
类型:varchar
长度:20
取值范围及含义:用户登录聊天室的角色,管理员(admin)或者普通用
户(user)o
取值范围及含义:用户登录聊天室的角色,管理员(admin)或者普通用
户(user)。
取值范围及含义:用户登录聊天室的角色,管理员(admin)或者普通用
户(user)o
表2—3级别数据字典
五、概要设计
3.1系统总体结构设计
3.1o1结构设计系统
图31总体结构图
3.1.2系统功能模块结构
(1)用户注册登录模块
用户注册是添加用户到数据中,只能注册普通用户,当注册验证信息合格,
即可登录进入聊天室.
图3—2用户注册登录II图
(2)在线用户显示模块
(3)当用户登录进入系统后,该页面实现在线用户的统计,并将在线用
户依次显示出来.如果当前用户属于管理员角色,则在普通用户角色的右边
显示“踢下线”链接,如果当前用户属于普通用户角色,则正常显示在线用户
名O
5
长春理工大学实习报告
(4)用户交流聊天模块
交流包括选择聊天对象,选择发送表情,字体颜色.
图3-3用户聊天H图
(5)聊天信息显示模块
聊天信息的显示,首先系统必须获得与当前用户正在进行聊天的对象,根据
聊天对象的用户名,获得存储在系统中的聊天记录,传送到浏览器客户端,浏览器
客户端进行1s刷新界面,从而获取两人之间的私密聊天记录并显示在界面上。
图3-4聊天信息显示H图
(6)系统消息显示模块
系统信息包括:聊天室守则、系统公告。
图3-5系统信息显示H图
(7)管理员管理用户模块
(8)管理员用户可以与其他用户聊天,并且随时监督其他用户的言行,
一旦出现天文明用语,即将改用户踢出聊天室。
(9)辅助功能
辅助功能包括:显示全部聊天信息、退出聊天室。显示全部信息
是指当用户之间的聊天信息占满全屏的时候,点击显示全部信息,即
可看到全部的聊天内容。退出聊天室是指用户离开聊天室.
3。2数据库设计
3.2。1概念设计
E-R图:该系统只存在用户一个实体,用户的属性包括:id、用户名、密码、
级别。
图3—6E—R图
6
长春理工大学实习报告
3。2.2逻辑设计
用户表
字段名数据类型长度说明描述
idint4不空用户id
uscrNamcvarchar20不空用户名
passwordvarchar20不空登录密码
typevarchar20不空用户级别
表3-1用户表
3.2o3物理设计
数据库类型使用mySql数据库,用户表的主键为id。
六、详细设计
4o1流程图
4cLi用户注册登录
用户注册的时候,操作人员输入想取的用户民,输入自创密码与确认密码,
点击注册;此时,系统会首先检测两次密码是有一致,若不一致,提示用户密码不
一致,请重新输入。若一致,检测用户名是否已经被注册过,若已经被注册,提示
是用户,已被注册。若为被注册,系统添加用户注册信息到数据库user表中.界面
提示用户注册成功,并跳转到登录界面.注册的用户默认type是普通用户,即
user。
图4-1注册流程图
用户登录的时候,用户输入用户名,密码,点击进入按钮,系统获取用户所
填写的用户名与密码,首先判断该用户名是否存在于数据库,若不存在,提示用
户不存在该用户,请重新填写或注册,若该用户名存在,则判断密码与用户名是
否匹配,若不匹配,提示用户密码错误,请重新填写,若匹配,进入聊天室界面。
7
长春理工大学实习报告
图4-2登录流程图
4.1.2在线用户显示模块
当用户登录进入聊天室时,系统会将用户的信息存入application属性的
userMap中,进入系统后,在jsp中获取userMap,将所有的用户信息中的用户名
显示出来。
图4-3显示在线人数流程图
4.1o3用户交流聊天模块
用户实现找人聊天,点击聊天对象的用户名,获取聊天对象,填写发送
内容,选择表情、与发送字体的颜色,点击发送即可进行聊天。
在未选择聊天对象时,点击发送,提示用户选择聊天对象;在未填写发送的
内容点击发送时,提示用户未填写发送内容。
发送的表情默认为[微笑着],字体颜色默认为黑色。
图4-4发送信息流程图
4Olo4聊天信息显示模块
聊天信息显示,首先必须保证聊天对象的用户名不为空,当不为空时,系统将
获取用户名,在application作用域中获得,相应的聊天记录属性,返回到jsp中,
并显示在界面中。
图4-5显示聊天记录流程图
4.1o5系统消息显示模块
在用户登录聊天室时,系统存储聊天室的聊天守则,并获取登录的用户名,
存储系统公告(XXX进入聊天室!);当用户离开聊天室时,修改系统公告(XXX
离开聊天室!);当用户被管理员踢出聊天室时,修改系统公告(XXX,被管理员
踢出聊天室!)。
图4-6显示系统信息流程图
4oL6管理员管理用户模块
当用户使用了不文明的语言,管理员有权利该用户踢出聊天室。获取用户名,
8
长春理工大学实习报告
在application中的userMap中获得相应的用户session,清除该session即可将用
户踢下线。
图4-7管理员管理用户流程图
4.1o7辅助功能
显示与某人的全部聊天信息,当聊天的内容占满全屏,点击显示全部消
息,即可显示全部信息。
当用户离开聊天室时,系统获取当前用户名,并释放user的session。
检测用户是否有新消息、:
图4-8检测信息流程图
4。2算法
4.2。1用户对话存储算法
首先获取进行对话双方的用户名以及id,再比较两者的id若idlvid2,则
messageName=userNamel+userName2;否则messageName=userName2+
userNamel。
图4-9用户对话存储算法
4o2。2检测用户是否被踢算法
当用户登录进入聊天室时,向application中存储一个
isKickedMap属性,将用户名添加到isKickedM叩中并赋值
为1(1表示在线,一1表示被踢)。当管理员将某个用户踢
下线时,将isKickedMap属性中的改用户名修改成“火”符
号,并赋值为一1。Jsp页面每秒刷新一次,当检测到
isKickedMap属性中geiAttribuie("*")==-1时,则该用
户被踢下线,此时要在jsp页面中提示用户已被踢下线,并
返回登陆界面。
图4-10检测用户是否被踢算法
4。2.3检测当前用户是否有新消息算法
9
长春理工大学实习报告
Jsp每隔1s就检测一次当前session中的call属性中是否有值,如
果有值,返回到jsp中,在jsp中遍历出有个值,并且让id为该值的〈tr〉标签的
背景色为红色.
图4一11检测当前用户是否有新消息算法
4.3界面设计
4o3.1登录首页
登陆首页是写在index.jsp中的,前台主要运用jsp动态网页技术.并使用JavaScript
语言判断用户是否正确输入用户名以及密码。在登录界面可以点击注册用户进入
用户注册界面。
图4-12登录界面
4<,3.2注册界面
图4—13注册界面
4.3。3聊天室界面
聊天室界面:左侧是在线人员列表显示,和在线人数的统计;右侧是专门显示系
统公告的地方;中间属于聊天内容的显示;下方是用户发送消息的模块,在该模
块中,当用户点击聊天对象的用户名,下方的第一个input框将获取到聊天对象
的用户名,还可以选择聊天的表情与字体的颜色,在最下角的input框可以编辑
所要说的话,点击发送,即可发送聊天内容。
图4-14聊天室主界面
4o4工程结构设计
该系统采用SSH(struts2+spring+hibernate)框架搭建工程。
系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负
责接收请求(Request)和传送响应(Response)、然后Struts根据配置文件
(struls-config.xml)将AclionServlel接收到的Request委派给相应的Action史理。
在业务层中,管理服务组件的SpringIOC容器负责向Action提供业务模型
(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提
10
长春理工大学实习报告
供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久
层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数
据,并返回处理结果。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现
了业务逻辑层与持久层的分离.这样无论前端如何变化,模型层只需很少的改动,
并旦数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而口由
于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
工程结构中其中:
appIicationContext.xml文件是关于配置spring的配置文件,主要是将各种
POJO,JAVA,action配置到XML转交给beanfactory管理,降低耦合度。
strutsoproperties文件配置struts的属性值,程序员可以通过它来管理Struts2框
架中定义的大量常量.perties文件是一个标准的properties文件。
struts.xml为Struts2的核心配置文件。stmts。xml文件主要负责管理应用中的
Action映射,以及该Action包含的Result定义。
图4-15工程结构
4.5各类功能设计
4.5.1类图
图4—16工程类图
4O5.2实体类
User。java,属性包括:
privateintid;//id
privateStringusername;〃用户名
privateStringpassword;//密码
privateStringtype;〃级另ij
用于建立与数据库user表表的映射关系,管理用户。
11
长春理工大学实习报告
Message.java,属性包括:
privatestaticStringcomeln=”走进聊天室!”;
privatestaticStringgoOut="离开聊天室!";
privatestaticStringkicked="被管理员踢出去!;
用于获取系统公告。
4.5o3数据库操作Dao层
BaseHibernateDAOojava,方法:
publicListquery(Stringhql,Objectvalues[],intfirstResult,int
maxResults)
用于查询数据库。
publicSerializablesave(Objectobj)
用于添加用户到数据库中
4.5o4监听器
MyServletConiextListenerojava,实现\ServletContextListener接口3
重写方法:publicvoidcontextInitialized(ServletcontextEvent
see)
用于监听:一旦创建servletContext对象,就添加用户和相应的session进
去。使用此监听器可以得到所有登录的用户以及相应的sessiono
监听器的配置:在WEB-INF下的web。xml中写上下面语句.
〈listener〉
<listener-class>com.cust。listener.MyServletContextListener
(/listener-class>
</listener>
12
长春理工大学实习报告
实体类实现监听HttpSessionBindingListener接口,当当前用户session。
setAttribute("user”,user)时,运行publicvoidvalueBound
(HttpSessionBindingEventevent)方法,当session。invalidate()时,运行
publicvoidvalueUnbound(HttpSessionBindingEventevent)方法。
4o5.5业务逻辑service层
LoginSrvImplcjava,方法:
publicMap<String,Object〉executeLogin(Stringusername,String
password)用于用户登录,返回值Map:当用户名不存在reMap.puK"result",
一1);reMap.put(“msg",”用户不存在!”);当密码错误时,eMap。put(wresult",
—2);reMap.put("msg","密码错误!”);登录成功时,reMap。put("result”,
I);reMap.put(msgH,"登录成功!");reMapoput("user",user);
RegisterSrvImplojava,方法:
publicintexecuteRegister(StringuserName,Stringpassword)
用于注册,添加用户到数据库.
publicintquery(SlringuserName)
用于判断用户名是否己经被注册了.返回值为int,当用户被注册return一
1;
4o5o6工具箱Utils
UlilSojava,方法:
publicstaticMap<User,HttpSession>gainUserMap()//获取application
里的userMap
publicstaticMap<String,String)gainSysMessageM叩()〃获取系统消
息
publicstaticHttpSessiongainToSession(Stringtold)〃得到对方session
publicstaticHttpSessiongainCurrentSession()〃得至当前session
publicstaticServletConlextgainApplication()〃得至Uapplication
13
长春理工大学实习报告
publicstaticStringgainMessageName(Stringfrom,Stringto,String
fromld,Stringtold)〃获得聊天消息的名称
4.5o7Actions
CheckNewMessageAction.java//检测当前用户是否有新消息
CheckUserlsKickAction.java〃检测当前用户是否被管理员踢出聊天室
ExitAction.java〃当前用户离开聊天室
KickAction。java〃管理员踢出语言不文明的用户
LogMAction。java//用户登录
RegisterActionojava〃新用户注册
ScndMessagcAction.java〃发送聊天消息给指定用户
ShowSendMessage□java〃显示聊天信息
SystemMessageActionojava〃显示系统消息
七、系统实现
聊天室的功能主要是实现用户的发言和观看大家发言的内容,发言界面和
聊天内容需要显示在同一屏界面中,以方便发言和观看,另外,通常还需要显示当
前在线的人数和用户列表,以方便选择对谁发言。
14
长春理工大学实习报告
用户书写发言的界面、聊天内容的显示、用户列表的显示均需要
通过单独的页面来实现,为了能在同一屏界面中同时显示多个页面
的内容,此时需要利用带框架集的页面来实现.框架集是多个框架的集
合,每一个框架可显示一个页面的内容,在同一屏中需要显示多少个
贝面,就需要创建一个具有多少个框架的框架集来实现,整个框架集
最后存盘形成一个页面,以后浏览该页面时,各框架集中的内容就会自
动显示出来.
5.1用户注册登录模块
5olo1用户注册
用户进入注册页面后,根据要求,填写表单中各项数据,单击注册按钮后,
将输入的内容通过异步刷新的方式传递给后台处理页面registeroaction进行写入
数据库处理。其中,在进行表单传递的时候,系统还调用了JavaScript的function
check()函数对填入表单的数据进行检验,一旦发现表单中有一个数据项不符合
要求,系统便会弹出出借信息,提示用户重新填写。在后台处理页面中,系统先定
义对应于表单各数据项的变量,利用Struts2配队将用户填入表单的数据赋给这
些变量,判断用户名是否已经存在,存在返回数据2,前台接收到数据2,提示用
户用户名己经被注册,请重新填写,若改用户名有效,但是两次密码不一致,则返
回数据1,前台接收到数据1,则提示用户两次密码不一致,请重新输入,这些数据
都正确的情况下,存入数据库的时候直接将变量值添入数据库即可,并返回数据
4,前台接收到数据4则提示用户注册成功,并跳转到登录界面,用户可以直接用
刚刚注册的用户登录进入聊天室主页,若存入数据库失败,则返回数据3,提示用
户注册失败.
下面以“zhuwei”为用户名,“111”为密码进行注册,前提是数据库中没有
该数据的记录,结果是注册成功.
数据库chatroom,表user中的数据记录:
图5—1数据库记录
15
长春理工大学实习报告
注册界面以及填写的信息,可以看到数据库并没有该数据的记录。
图5—2注册用户zhuwei
注册成功:
图5—3注册成功
5.1・2用户登录
用户在聊天室登录界面填入正确的注册信息,单击登录,系统将自动把用户
填入的“帐号”、“密码”于数据库中存放的用户注册信息进行比对验证。系统
进行用户身份验证时,首先利用Request对象,将用户填入的“帐号”(即用户名)、
“密码”传递给预先定义的变量,再使用Select语句,将变量值与用户信息表进行
比对
List<Object)list=dao.query(nfromUserwhereusername=?”,username);
当list不为空时,表示该用户名已经注册可以进行登录操作,然后比对密码是
否与数据库中的密码一致。
Useruser=(User)list.get(0);
if(password.equals(user0getPassword()))
如果一致,用户登录成功,页面发生跳转,如果一开始用户名不存在于数据库
list==null或者list。isEmpty(),提示用户用户名错误.如果密码不一致提示用
户密码错误。
以Response对象的Redirect方法跳转到聊天主页面,Response对象的
Redirect方法是实现页面的跳转,使当前页面跳转到指定的页面.在用户登录进聊
天主页面的同时,系统将该用户的用户名以及该用户的session存入application
中的userMap集合中,目的是利用userMap集合遍历出所有在线的用户,显示在
线用户的用户名。同时,也将该用户存入当前session中,sessionosetAtrribute
(“user”,User);目的是在聊天主页能够获取当前用户的信息,可以通过User对
象中的lype属性,判断当前用户的级别,是否为管理员,是否有权限踢出其他用
户.
通过上述的用户验证和数据传递,系统跳转到聊天页面,此时用户便可在聊
天主页面进行聊天交流了.
16
长春理工大学实习报告
下面以刚刚注册的用户信息登录进入聊天室:
图5—4zhuwei用户登录
点击进入,进入聊天室,如下图所示,可以看到该用户已经成功登录并存入
叩plication的userMap集合中,当前在线列表中也遍历出来该用户的用户名,系统
公告也显示“zhuwei走进聊天室!”。
图5—5在线人员列表显示图5—6系统公告显示
5.2在线用户显示模块
为了存储所有登录进入聊天室的用户,在jsp的内置对象application中设
置一个集合属性,userM叩〈User,HttpSession)该集合的关键字为User用户对
象,值是该用户对象所对应的session值。如此便可以根据user得到user的session
值.
为了判断集合中的关键字user对象与传入的user对象相等,在实体类
User中重写inthashCode()与booleanequals(Objectobj)方法比较两者的id
是否相同,id相同则User对象相同,反之则不相同。
当浏览器进入登录首页,创建servlelComexl对象,监听器
MyServletContextListener监听servletContext对象的创建,就在向application中添
加属性userMap<User,HttpSession);当用户确认登录成功,将User对象user添加
到时,在publicvoidvalueBound(HttpSessionBindingEventevent)方法中得到
userM叩,并向其添加当前session与用户user进去.这样application中就有所有登
录进去聊天室的用户,所以在jsp页面也就是oMine.jsp中使用el表达式
${userMap)即可将所有在线用户显示出来,如下图所示:
图5—7在线人员列表显示
当某个用户离开或被管理员踢出聊天室时,系统将得到的userMap集合
根据离开的用户的id找到相应的session,清除该session即可删除离开的用户。
在显示当前在线人员列表的时候,首先要判断当前用户是否是管理员,管理
员可以踢出其他用户,但是管理员之间是不可以相互踢出,即判断条件为:当前
用户的级别等于“admin”并且要显示的用户的级别不等于“admin",在jsp中
写成:(c:iftest="${user.type=='adminrandentry。key。type!='admin'}“)
17
长春理工大学实习报告
〈/c:if>
在满足条件的情况下,显示“踢下线”。
,T
<ahref=kick.action?id=${entryokey.id)&userName=${entryokey。
username}"class二"tixiaxian”〉踢下线(/a>
下面登录一个管理员"aaa":
图5-8登录管理员
在用户“aaa”中的在线人员列表中用户“zhuwei”的右边显示“踢下线”操作,但
在用户“zhuweV的在线人员列表当中用户“aaa”的右边不显示“踢下线”操作:
图5—9aaa的在线人员显示图5-10zhuwei的在线人员显示
5・3用户交流聊天模块
进入聊天主页面后,用户便可在主页面下方的发言界面设计书写自己想要说的
话,以及想对谁说,同时,系统还提供了发言字体颜色选择、插入表情、图片的
功能,如图下图所示,让用户的聊天更有趣味。
图5—11写对话界面
在点击发送调用JavaScript的send()方法,在发送消息之前,确保已经选择
聊天的对象,并将用户名显示在“[zhiwei]对”右边的文本框中,以及发送的内
容不为空时,即可调用后台的sendMessageoactiono
用户发言界面采用Jsp表单from模式设计,在表单包括发言对象、发言内容、
发送内容字体颜色以及发言颜色,并未它们每一人标签写上name值。这些表单
数据,通过post的异步刷新方式,提交到后台,后台action的属性中与jsp的标签
那么值相同,并为每个属性添加上set方法.在得到这些属性值后,根据
Utils.gainMessageName(from,toJromId,old);方法得到对话的名称messageName,
然后将这些属性值写成html语言:
sourceMessage+="<fontcolo^'blue'xstrong)"+from
+“(/strong></font)<fontcoIor='#CC00001"+face
+”〈/font〉对〈fontcolor='green'>_"+to+??]</fontsize-15px,>
18
长春理工大学实习报告
说:"
+”〈fontcolor='"+color+“'〉"+content+"</font>("
+sendTime+")<br>”;
之后将sourceMessage存入application中:
UtilSogainApplication()<>setAttribute(messageName,sourceMessage);
到此为止,聊天内容就已经发送,等发言对象端接收并显示消息内容.
在面管理员aaa将发送一段文字给用户zhuwei:
图5-12aaa向zhuwci发送一条对话
5o4聊天信息显示模块
当聊天对象没有选择聊天对象时,例如用户“zhuwei”开始并没有选择聊天对象
“aaa”,但是"aaa响"zhuwei”发送了消息,此吐系统检测到“zhuwei”有新
消息,所有在jsp页面中将把“aaa”的背景色变成红色以提醒“zhuwci”有新消
息来自“aaa”,如下图所示.这个功能在辅助功能中介绍:
图5—13zhuwei检索到aaa有新消息提醒
当选择聊天对象aaa后,jsp开始刷洗界面,并调用JavaScript的方法
showSendMessage(),在该方法中还是已post的异步刷新方式,调用后台的
showSendMessage©action.在该action中同样将获取application的消息名称,并根
据此消息名称获得相应的对话:
Stringmessage=(String)Utils.gainApplication()。getAttribute
(messageName);
如果message不等于null,则向jsp中输出message:
responseogetWriter().println(message);
在jsp中的回调函数中获得data,并在id为content的div中显示data:
$("#contentn)。html(sysBBS+data+”〈/span〉”);
Jsp界面每隔Is就刷新界面,调用后台showSendMessage.action的action获取最
19
长春理工大学实习报告
新的消息。例如用户“zhuwei”收到来自“aaa”的消息,如下图所示:
图5—14zhuwei收到aaa的对话并显示在聊天内容中
用户“zhuwei”回复用户“aaa”:
图5-15zhuwei向aaa回复一条对话
在用户“aaa”的界面中收到来自“zhuwei”的回话:
图5-16aaa收到zhuwei的回复
至此,聊天信息的显示完毕.
5o5系统消息显示模块
系统消息包括聊天室守则“欢迎来到聊天室请遵守聊天室规则,不要使用不
文明用语。”的显示;还有就是系统公告的显示.
首先聊天室准则的显示,一旦用户登录进入聊天室守则就被显示在聊天内
容的下方,它的实现主要是在jsp中,一旦加载了聊天室主页main.jsp就执行:
varsysBBS="〈spanstyle-font-size:14px;color:red;line一height:3()px;,>欢
迎来到聊天室,请遵守聊天室规则,不要使用不文明用语。</span><brxspan
style='line-height:22px:'〉":
$("#contentn).html(sysBBS);
这两句js代码。而当用户开始选择聊天对象进行聊天时,调用的显示聊天信
息的action返回到jsp的data时,sysBBS与data一同显示在聊天内容上:
$("#contentH),html(sysBBS+data+”(/span));
对于系统公告,首先创建了一个实体类Message,其中它的属性包括了所有
系统公告的内容;当用户调用登录action时,并且验证成功,登录成功时,向
application中添加属性sysMessageMap〈String,String〉,并且属性记录用户登录情
况:
sysMessageMapoput(userogetUsername(),Message.getComeIn());
UtilSogainApplicationQ.setAttribute("sysMessageMap",sysMessageM叩);
20
长春理工大学实习报告
当用户离开聊天室时,向application中得至UsysMessageMap属性,并根据用
户名得到对应的值,将其修改为Message。getGoOut(),再次存入叩plication当中.
当用户被管理员踢出聊天时,同样获取sysMessageMap,根据用户名得到相
应的值,将其修改成Message.getKicked(),再次存入application当中。
下面将用户“zhuwei”退出聊天室,或是将其踢出聊天室,效果如下图:
图5-17aaa将zhuwei踢出聊天室图5—18zhuwei主动离开聊天室
5。6管理员管理用户模块
当普通用户使用了不文明的语言,管理员有权将其踢出聊天室。当管理员点
击“踢下线”操作时,调用后台的kick.action,并将踢出用户的id与用户名传参到
后台,在action中,获取application中的userMap,根据id得到相应的session,清除该
session即可踢出用户.但是存在一个BUG当用户自己退出聊天室时,其session
也将被清除,由此导致,jsp在调用js方法check。检测是否被踢出去的时候,出现
用户自己退出聊天室时也被当成被踢提示用户“由于您使用不文明语言,被埸下
线了!”。解决办法是:
在application中再存入一个属性isKickedMap(String,lnteger>,关键字存入
用户名,值存入数字,1表示在线;一1表示被踢。当用户被踢时,将其用户名改为
“小',并将值改为-1。这样在调用check()方法时,先判断是否存在“*”,并
旦其值是否为一1,才进行被踢提示,否则不提示:
if(isKickedMap.get("*")!=null){
if((Integer)isKickedMap0get("*")==-1)]//被踢
isKickcdM叩。remove("*");
UtilsogainApplication().setAttribute("isKicked”,
isKickedMap);
if(user==null)(
response.getWriter()oprimln(“1");
}else{
21
长春理工大学实习报告
responseogetWriter()。printin("2”);
}
)
}else{
responseogetWriter()。printing3");
)
5o7辅助功能
显示全部聊天信息:直接调用js方法checkScrollScreen()
if(!$("#scroHScreen")。attr(vcheckedn)){
$(**#contentw)ocss("overflowv"scroll");
}else)
$("#content")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国涡流泵行业隐形冠军企业成长路径解码报告
- 2026中国涡流泵产业链上下游协同发展模式研究分析报告
- 2026中国老年健身防跌倒设备市场细分与产品创新方向报告
- 浙江省宁波七中学教育集团2027届化学九上期末质量跟踪监视模拟试题含解析
- 2026人工智能医疗影像诊断市场应用投资前景评估报告
- 2026四川成都都江堰市人力资源和社会保障局招聘机关事业单位编外人员11人模拟试卷(易错题)附答案详解
- 2026广东广州市黄埔区住房和城乡建设局招聘政府初级雇员1人考前冲刺密卷(模拟题)附答案详解
- 2026内蒙古鄂尔多斯市东胜区爱国卫生志愿者招募考前冲刺密卷带答案详解(预热题)
- 2026瑞士钟表制造行业市场供需特点分析及投资评估规划分析研究报告
- 2026云南曲靖市宣威市龙场镇中心幼儿园招聘编制外教学辅助人员3人考前冲刺密卷学生专用附答案详解
- 2026年秋季开学:高中开学第一课为梦想而战
- 凯爱瑞2026上半年餐饮新品情报合集
- 2026年湖北省事业单位联考真题及答案
- 海洋平台智能废弃物处理系统技术创新总结报告
- 2026浙江外国语学院集中招聘劳务派遣制工作人员10人模拟试卷及答案详解【网校专用】
- 高端大圆坯行业供需形势分析及重点企业投资建议研究报告
- 莆田港务集团有限公司招聘2026年笔试试题
- 综合评标专家库专家考试(法律法规)试题及解析(2026年浙江绍兴市)
- 2026-2030中国钡行业市场深度调研及发展趋势与投资前景研究报告
- 注册电气工程师《公共基础》试卷真题及解析(2026年)
- (正式版)DB42∕T 2542-2026 市政管涵基坑工程技术规程
评论
0/150
提交评论