版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深圳信息职业技术学院计算机应用系毕业设计题目:编程聊天室学生姓名:池龙生专业班级:08计算机应用3-2班学号:0803010220指导教师:高维春2011年4月12日
深圳信息职业技术学院计算机应用系毕业设计(论文)任务书设计(论文)题目编程聊天室校内(外)指导教师职称工作单位及部门联系方式高维春讲师计算机应用系学生姓名专业班级小组人数联系方式池龙生计算机应用技术08计算机应用3-22曾慧敏计算机应用技术08计算机应用3-22主要设计(研究)内容设计的系统是编程聊天室。首先进行系统概述,了解该系统需要实现的功能总体;然后进行需求分析,与用户沟通,进一步理解设计目的,撰写需求报告;接着进行系统分析,得到功能模块划分和系统流程分析;最后进行系统设计,包括数据库设计,各模块实现流程、关键技术以及编码。技术要求(指标)或研究目标1.用户注册、登录功能;2.编程房间选择功能;3.编程讨论网上聊天室功能。主要参考资料及文献[1]杨昭.JSP课程设计案例精编[M].北京:中国水利水电出版社,2005.[2]武延军,黄飞跃.精通JSP编程技术[M].北京:人民邮电出版社,2001.[3]赛奎春.JSP工程应用与项目实践[M].北京:机械工业出版社,2005.[4]贾素玲,王强.JSP应用开发技术[M].北京:清华大学出版社,2008.[5]王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006.[6]刘瑞新.ASP动态网站开发毕业设计指导及实例[M].北京:机械工业出版社,2005.毕业设计领导小组评审意见:日期:系主任签名:毕业设计(论文)任务书附表:说明:本进程表内容一栏由指导教师填写。阶段完成情况一栏由学生按周填写并签名。毕业设计(论文)进程控制表说明:本进程表内容一栏由指导教师填写。阶段完成情况一栏由学生按周填写并签名。开课周次内容阶段完成情况及学生签名教师签名第一周进行需求分析、系统功能模块划分第二周数据库设计、查阅相关资料第三周编写代码实现聊天室整体框架;第四周编写代码实现用户注册、登录功能;第五周编写代码实现编程房间选择功能;第六周编写代码实现编程讨论网上聊天室功能。第七周系统测试,撰写论文第八周撰写论文编程聊天室池龙生08计算机应用3-2班目录摘要 11前言 22可行性分析 22.1技术可行性分析 22.2经济可行性分析 22.3社会因素可行性分析 33需求分析 34系统概要设计 4系统功能模块图 44.2系统流程图 5数据库逻辑结构设计 65详细设计及编码实现 6系统需要解决的主要问题 6用户登录模块设计 7聊天者发言模块设计 105.2.1聊天者以默认的设置发言 105.2.2以用户自定义方式发言 115.2.3发言提交和更换房间的设计 15文件上传 155.2.5用户离开聊天室的设计 165.3显示发言信息模块设计 175.3.1记录的显示顺序和显示范围 175.3.2聊天信息的自动刷新问题 185.4显示在线用户模块设计 195.5管理员管理模块设计 225.6逻辑控制模块的设计 266系统的测试和维护 266.1jsp在线聊天室测试 26结束语 27谢辞 27参考文献 28摘要网上聊天室是网络用户最喜欢的Web应用程序。借助聊天室,用户可以即时地互通信息,交流思想。聊天室程序设计根据需求的不同可繁可简。本系统实现的是一个具有简易功能的聊天室,是使用JSP技术开发的动态网站。系统开发的任务主要包括前台界面设计和后台数据库管理系统设计。本系统采用JSP作为开发工具,后台数据库采用sqlserver2005数据库设计,利用基于JDBC的ODBC数据库访问技术实现对数据库的各种管理操作,实现聊天室的聊天功能和显示在线聊天用户信息等功能。关键词:聊天室,JDBC,ODBC数据库访问技术,Application,Session1前言随着Internet的普及和宽带网络技术的成熟,越来越多的用户进入到网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效。与此同时,一个新型的Web应用程序为网民之间提供了一个即时互通信息的功能和场所,这就是聊天室。聊天室在网络早期就开始盛行了,不论是BBS、IRC都有类似的网上聊天机制。聊天室为网友提供了实时对话的渠道,是网络上极为流行的一种服务。聊天室适用于网上会议或闲聊的场合。聊天室为网友提供了较好的交友环境,网友之间互相以文字交谈,在形式上类似笔友的性质,却大大节省了书信往返的时间。2可行性分析可行性分析是依据初步调查的结果作出系统开发可行性与否的结论的过程。可行性分析是从技术可行性、经济可行性和运行可行性三个方面考虑的,论证系统开发是否可行。2.1技术可行性分析为实现系统目标,需要技术保证。此系统开发所需要的技术主要有计算机硬件、软件技术、系统开发人员的水平、用户管理与使用的能力等。通过比较ASP和JSP这两种传统的动态网页制作技术,觉得JSP具有明显的优势:(1)作为Java平台的一部分,JSP拥有Java编程语言“一次编写,到处运行”的特点,一次写入之后,可以运行在任何具有符合Java语法结构的环境中,取代过去单一开发。而ASP主要工作环境是微软的IIS应用程序,又因Activex对象具有平台特性,所以ASP技术不能很容易的实现跨平台的WEB服务器的工作。(2)ASP仅支持组建对象模型COM,而JSP技术提供的组建都是基于JavaBean技术或JSP标签库。除此之外,JSP还有组件的可重用性,标签的可扩充性和易于维护等特点。如上的分析比较不难看出,JSP技术编写的程序运用要更加灵活,可扩展性更强,在现有技术条件下,能够完成功能目的。鉴于以上分析,系统开发在技术上是完全可行的。2.2经济可行性分析 本系统开发在软件方面主要使用了JSP网站设计技术、网页制作三剑客、MyEclipse8.6、SQLserver2005后台数据库等软件,这些均可在网上下载获得,注册码且不涉及商业盈利问题,因此,在经济方面可行。2.3社会因素可行性分析本系统仅作为实习项目而提出。不会违反相关法律法规。且本系统能保证在当前的操作环境下正常运行。Jsp在线聊天室,实现了一对一,一对的多,多对多的聊天,并且能共享文件,非常方便.综上所述,系统开发完全可行。3需求分析这是一个具有最简单功能的聊天室。通过该聊天室,用户可以通过设置不同的用户名和密码以各种不同的身份进入聊天室,用户的类型有两种:普通用户和管理员。普通用户可以在聊天室中发送信息,也可以和指定的聊天对象用户私聊,还可以对发送的信息进行动作、颜色等方面的限制。管理员出了具有普通用户的功能外,还可以对在线用户和所有数据库中的用户进行设置,以便对聊天室进行维护。管理员可以把在线用户踢出聊天室,还可以删除其他管理员不希望再次进入聊天室的用户。聊天室又分为三类,用户可以根据自己的需要进入不同的聊天室进行聊天。系统还应具有自动把在线但不发言的时间超过系统设置的时间的用户踢出聊天室和的功能,还应具有当有新用户进入聊天室时,实时更新在线用户的功能。聊天室的特点就是要求能够实时显示出聊天者所谈的内容。即在同一个聊天室的使用者,可以在短时间内立刻看到其他聊天者的发言。作为用户喜欢的Web应用程序,出了具有能够实时显示出聊天者所谈论的内容外,还应具有以多种方式发布信息的功能。JSP正好可以满足聊天室的这种要求,它可以快速地创建和显示Web页面的动态内容。总的来说,本聊天室主要实现了以下的功能:用户输入帐号,密码登录聊天室用户选择聊房间,一共三个把用户的聊天信息写入数据库用户可以修改聊天语句的颜色,选择说话动作用户聊天室可以选择聊天对象(私聊,群聊)用户可以噢变换聊天房间聊天室不断地对数据库进行刷新、读取实时更新在线的用户管理员管理在线用户,管理注册用户4系统概要设计Jsp在线聊天室Jsp在线聊天室文件共享显示在线用户显示聊天信息聊天发言用户退出用户登陆文件共享显示在线用户显示聊天信息聊天发言用户退出用户登陆管理员登陆普通用户登录管理员登陆普通用户登录查看用户信息踢出在线用户查看用户信息踢出在线用户4.2系统流程图开始开始用户登陆用户登陆帐号错误帐号正确张却帐号错误帐号正确张却帐号判断提示从新输入或注册提示从新输入或注册是否是否管理员是否是否管理员选择聊天室选择聊天室选择聊天室选择聊天室显示聊天内容显示聊天内容文件共享删除注册用户踢出在线用户文件共享选择动作选择聊天对象选择动作选择聊天对象文件共享删除注册用户踢出在线用户文件共享选择动作选择聊天对象选择动作选择聊天对象结束是否退出结束是否退出建立一个名为chatroom的sqlserver数据库。数据库中共使用四个表分别名为:表4-1用户信息表(userinfo)列名数据类型长度允许空nickNamevarchar50userPasswordvarchar50lastlogintimedatatime8Yeslastchatroomvarchar50Yesrolevarchar50表4-2在线用户表(onlineuser)列名数据类型长度允许空nicknamevarchar50chatroomvarchar50intcountint4Yeslastlogintimedatetime8Yeslastchattimedatetime8Yes表3-3发送信息表(msginfo)列名数据类型长度允许空chatroomvarchar50msgfromvarchar50msgtovarchar50chattimedatetime8Yesmsgcontenttext16YesIDint4chatactionvarchar100Yessecretint4Yes表3-3发送信息表(upload)列名数据类型长度允许空filenamevarchar50uluservarchar50ultimedatetime5详细设计及编码实现在规划设计聊天室时,首先要确定好谈话内容存储方式,JSP可以用三种形式实现聊天内容的存取:1)用全局变量Application和Session对象实现。这种形式速度快、效果好,但较消耗系统资源。2)用读写数据库的方法实现。这种方法相对简单,但会使数据库负担重。本系统采用的就是该方法。本设计选择了sqlserver2000数据库来存储谈话内容。3)用读写文本文件方法。该方法适合简单的聊天室。另一个设计聊天室时要考虑的因素就是聊天室成员的动态刷新。有的用户在退出聊天室时并不是从退出链接退出的,但服务器并不知道用户已经离开了。因此需要建立一个在线用户数据库,每隔一段时间检查一次,看用户从最后一次发言到现在是否超时,若是,则将该用户自动删除。本系统需注册,输入用户名和密及即可。登录成功后,显示聊天室列表,用户选择想要进入的聊天室,则在相应的聊天室中显示出欢迎信息,并在当前在线用户中增加刚才登录的当前用户的名字。如图4-1所示:图5-1用户登录界面图5-2房间列表页面图5-3聊天室主界面系统的主界面是一个框架页面chatroom.jsp,定义如下:<html><head><%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%><META-equiv="Content-Type"content="text/html;charset=GB2312"><title>chatroom</title><%@includefile="chkSession.jsp"%></head><framesetrows="400,*"border="0"framespacing="0"frameborder="NO">//先定义上下型框架<framesetcols="1050,*">//在上框架中再定义左右型框架<framesrc="show.jsp"name="mainFrame"marginwidth="10"marginheight="10"scrolling="auto"frameborder="0"><framename="userlistFrame"src="userList.jsp"marginwidth="10"marginheight="10"scrolling="no"frameborder="0"></frameset><framesrc="input.jsp?username=<%=session.getAttribute("_USER")%>"name="inputFrame"marginwidth="10"marginheight="10"scrolling="no"frameborder="0"></frameset><noframes><bodybgcolor="#FFFFFF">您的浏览器不支持框架,对不起!</body></noframes></html>此框架页面由三部分组成:下面的框架,实现聊天者发送信息和进入管理员对聊天室进行管理页面,打开的网页文件为:input.jsp。上面框架的左边部分,用来显示聊天者发送的信息,打开的网页文件为:show.jsp。上面框架的右边部分,用来显示所有在线聊天用户的信息,打开的网页文件为:。用户从登陆页面进入聊天室时,如果登录失败则显示出错原因。比如用户名或密码错误,或者申请已经存在的用户名,出现检正后重新输入等提示。如果该用户已在线,出现用户以在线提示,如图4-4,4-5,4-6所示。图5-4用户名或密码为空图5-5输入的用户已在聊天室中图5-6申请的用户名已存在实现用户登录验证的程序为chklogin.jsp,代码如下:<%@pagelanguage="java"import="java.util.*,net.chat.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>聊天用户登录</title><meta-equiv="pragma"content="no-cache"><meta-equiv="cache-control"content="no-cache"><meta-equiv="expires"content="0"></head><jsp:useBeanid="check"class="net.chat.CheckLogin"/><body><%request.setCharacterEncoding("GB2312");StringnickName=request.getParameter("nickName");StringuserPassword=request.getParameter("userPassword");StringloginMsg=check.checklogin(nickName,userPassword);if(loginMsg.equals("SUCCESS_LOGIN")){session.setAttribute("_USER",nickName);session.setAttribute("_LOGIN","_SUCCESS");response.sendRedirect("chatRoomList.jsp");}elseif(loginMsg.equals("WRONG_PASSWORD")){("你输入的用户名或密码错误,请检正后重新输入");if(session.getAttribute("_LOGIN")!=null)session.removeAttribute("_LOGIN");}elseif(loginMsg.equals("NONE_USER")){check.saveToDataBase(nickName,userPassword);session.setAttribute("_USER",nickName);session.setAttribute("_LOGIN","_SUCCESS");response.sendRedirect("chatRoomList.jsp");}elseif(loginMsg.equals("existed")) {out.println("用户已存在!");%></body></html>该模块的主要作用是实现聊天者以各种表情、各种身份、不同颜色的文字对不同的用户发送聊天信息。当用户以正确的用户名和密码登录聊天室后就可以通过聊天者发言的功能,发送聊天信息。实现发言功能的程序为input.jsp。5.2.1聊天者以默认的设置发言聊天室默认的发言设置是:字体:黑色字体发言对象:所有人动作:说话用户以聊天室默认的设置发言的过程如图4-6所示。图5-7用户以聊天室默认的设置发言如果用户没有输入发言内容直接点击发送按钮,则显示相应的提示信息,如图4-8所示。图5-8发送内容为空时显示提示信息在input.jsp程序中,用于处理发言信息的程序段如下:<scriptlanguage="JavaScript"type="">//javascript函数,检查用户发言信息是否为空functioncheckForm(){ if(document.chatForm.msg.value==""){ alert("发言不能为空!"); document.chatForm.msg.focus(); returnfalse; } else{ document.chatForm.msg.focus(); returntrue; }}5.2.2以用户自定义方式发言使用用户自定义方式发言可以定义的功能如下:发言文字的颜色:下拉列表中选择发言对象:在线用户列表中选择发言的动作:下拉列表中选择发言文字颜色的设置用户发言前可以从颜色下拉列表中选择某种颜色后,再进行发言,网页中显示的发言内容的颜色即为用户选择的颜色,如图4-9所示。图5-9选取用户定义的颜色发言在input.jsp中,用于实现用户定义发言字体颜色的程序段为:<selectname="color"size="1"style="font-size:9pt"><optionstyle="COLOR:#000000"value="#000000">黑色</option><optionstyle="COLOR:#7ec0ee"value="#7ec0ee">淡蓝</option><optionstyle="COLOR:#0088ff"value="#0088ff">海蓝</option><optionstyle="COLOR:#0000ff"value="#0000ff">草蓝</option><optionstyle="COLOR:#000088"value="#000088">深蓝</option><optionstyle="COLOR:#8800ff"value="#8800ff">蓝紫</option><optionstyle="COLOR:#ab82ff"value="#AB82FF">紫色</option><optionstyle="COLOR:#ff88ff"value="#ff88ff">紫金</option><optionstyle="COLOR:#ff00ff"value="#ff00ff">红紫</option><optionstyle="COLOR:#ff0088"value="#ff0088">玫红</option><optionstyle="COLOR:#ff0000"value="#ff0000">大红</option><optionstyle="COLOR:#f4a460"value="#f4a460">棕色</option><optionstyle="COLOR:#888800"value="#888800">卡其</option><optionstyle="COLOR:#888888"value="#888888">铁灰</option><optionstyle="COLOR:#90e090"value="#90E090">绿色</option><optionstyle="COLOR:#008800"value="#008800">橄榄</option><optionstyle="COLOR:#008888"value="#008888">灰蓝</option></select>发言对象的设置用户发言可以从在线用户中选择某个用户后,再进行发言,将来网页中显示的发言内容是专门指向用户选择的对象,如果不选择聊天对象,则默认为对所有人说话。如图4-10所示。图5-10选取用户指定的对象发言用于实现用户定义发言对象由input.jsp,sendmsg.jsp,datavalue.jsp三个程序共同实现,程序段如下:Input.jsp中,将文本框的name属性赋值为msgTo。<inputtype="text"name="msgTo"size="8"style="font-size:9pt"readonly>sendmsg.jsp中,接受text的值msgTo,如果msgTo为空值,则赋值为allpeople;如果为特定聊天对象,则赋值为该对象的名字,并将该值和发送的消息一起存到数据库中。if(chatRoom.denyUser(session.getAttribute("_USER").toString(),session.getAttribute("_CHAT_ROOM").toString())){out.println("<script>parent.alert(\"对不起,你已经被踢出本聊天室\")</script>");out.println("<script>parent.parent.document.location.href='chatRoomList.jsp'</script>");return;}request.setCharacterEncoding("GB2312");/*接收用户输入的聊天信息以及用户选择的信息显示颜色,聊天表情,是否悄悄话,聊天对象*/StringmsgContent=(String)request.getParameter("msg");Stringaction=(String)request.getParameter("action");Stringcolor=(String)request.getParameter("color");StringmsgTo=(String)request.getParameter("msgTo");intsecret=0;//如果聊天对象为空表示对所有人说话if(msgTo==null||msgTo.equals(""))msgTo="allpeople";//如果悄悄话的选框被选中表示这个消息是悄悄话if(request.getParameter("secret")!=null){secret=1;}//message对象,用于抽象(保存)一条聊天信息message.setMsgFrom(session.getAttribute("_USER").toString());message.setChatAction(action);message.setChatRoom(session.getAttribute("_CHAT_ROOM").toString());message.setMsgTo(msgTo);message.setSecret(secret);message.setMsgContent("<fontcolor="+color+">"+msgContent+"</font>");//将聊天信息保存到数据库中message.saveToDataBase();datavalue.jsp中,将发言对象的信息和发言内容一起去出来,并在页面上显示出来。out.println("<script>parent.document.chatForm.msg.value=\"\"</script>");//刷新dataValue页面,将刚才发送的信息立即显示出来out.println("<script>parent.parent.mainFrame.dataValue.location.reload()</script>");%><%//中显示这个字符串StringmsgString="";try{//从聊天信息数据库中选取出最近的15条聊天信息//这里要注意查询语句的写法//selecttop30IDfrommsgInfowherechatRoom=?orderbychatTimeDESC这句查询实际//上已经查询出最新的15条信息//但是这样查询出来的信息是按时间倒顺排序的,最新的信息在最上面,而显示的时候要//把最新信息显示在聊天室下面,所以要再做次查询排序Stringsql="select*frommsgInfowhereIDin(selecttop15IDfrommsgInfowherechatRoom=?OrderbychatTimeDESC)orderbychatTime";StringuserName=session.getAttribute("_USER").toString();PreparedStatementps=conn.preparedStatement(sql);ps.setString(1,session.getAttribute("_CHAT_ROOM").toString());ResultSetrs=conn.executeQuery();//下面while循环里的程序就是实现控制聊天信息显示格式的功能while(rs.next()){ng("msgFrom");//获取聊天信息发送者StringmsgTo=rs.getString("msgTo");//获取聊天信息接收者Stringaction=rs.getString("chatAction");//获取聊天表情StringmsgContent=rs.getString("msgContent");//获取聊天信息内容intsecret=rs.getInt("secret");//获取是否悄悄话//判断是否系统公告if(msgFrom.equals("systemnotice"))msgString=msgString+"<div>systemnotice:"+msgContent+"</div>";//判断是否悄悄话elseif(secret==0){//判断是否使用聊天表情if(action==null||action.equals("no"))msgString=msgString+"<div><fontcolor=blue>"+msgFrom+"</font>对<fontcolor=blue>"+msgTo+"</font></span>说:"+msgContent+"</div>";else{msgString=msgString+"<div><fontcolor=blue>"+msgFrom+"</font>"+action.replaceAll("B","<fontcolor=blue>"+msgTo+"</font>")+msgContent+"</div>";}3、用户发言动作的设置和发言文字颜色的设置方法相同。所以不再赘述。5.2.3发言提交和更换房间的设计当用户定义了发言文字的颜色、发言的动作、发言的对象并输入了发言内容后,就可以点击send按钮将发言的内容提交。用户也可以点击changroom按钮更换房间。实现发言提交和更换房间的代码如下:<inputtype="submit"name="Submit"value="send"style="font-size:9pt"onclick="returncheckForm();"><inputtype="button"name="changeRoom"value="changeroom"style="font-size:9pt"onclick="returnuserChangeRoom();"> 选择文件后,提交即可,后台会记录文件的名字,上传者和上传时间图5-10文件上传<% if(request.getParameter("flag")==null&&request.getParameter("flags")==null){ SmartUploadsu=newSmartUpload(); //上传初始化 su.initialize(pageContext); //新建一个SmartUpload对象 //设定上传限制 //1.限制每个上传文件的最大长度。 su.setMaxFileSize(10240000);//单个文件最大10M //2.限制总上传数据的长度。 su.setTotalMaxFileSize(10240000);//总容量限制在20M try{ su.upload(); }catch(Exceptione) {//得到当前工程目录 StringfileRealPath=request.getRealPath("/"); //加上临时文件夹 fileRealPath=fileRealPath+"chatroom/upload/"; java.io.Filemd=newjava.io.File(fileRealPath); //如果不存在,则创建. if(!md.exists()) md.mkdir();// System.out.println(fileRealPath); //重命名文件 Stringext=file.getFileExt(); StringfileName=Attachment.reFileName()+"."+ext; //得到文件大小 intfileSize=file.getSize(); System.out.println(fileRealPath+fileName); //保存文件 file.saveAs(fileRealPath+fileName);%>5.2.5用户离开聊天室的设计用户离开聊天室时,将用户从在线列表中删除。用于实现该功能的程序为logout.jsp,代码如下:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><HTML><HEAD><%@pageimport="java.util.*,net.chat.*"%><%@pagelanguage="java"contentType="text/html;charset=utf-8"pageEncoding="utf-8"%><META-equiv="Content-Type"content="text/html;charset=GBK"><META-equiv="Content-Style-Type"content="text/css"><TITLE>logout.jsp</TITLE></HEAD><BODY><jsp:useBeanid="chatRoomObj"class="net.chat.ChatRoom"/><%try{//chatRoomObj对象调用logout方法将该用户从聊天室在线用户列表中删除chatRoomObj.logout(session.getAttribute("_USER").toString());//设置session失效session.invalidate();//跳转到聊天室登录界面response.sendRedirect("login.jsp");}catch(Exceptionex){ex.printStackTrace();out.println("error!");}%></body></html>5.3显示发言信息模块设计用户输入正确的用户名和密码,进入聊天室便可进行聊天,按send按钮时,用户的发言内容、发言文字的颜色、发言的动作以及发言的对象便会一起写入msginfo表中。接下来,系统便要将发言的信息显示在浏览器中,而且还要实现自动刷新最新的聊天内容。5.3.1记录的显示顺序和显示范围程序将发言信息写入数据库时,记录是不断往数据表的尾部增加的。因此,用户必须知道那一句话是最新的,那一句话是在前面说的。在msginfo表中,有一个自动编号的字段ID,这个字段起着十分重要的作用。ID最大的记录是最新输入的记录,每添加一个记录,ID自动加1。因此,用户可以通过ID来选出最新的信息,并按时间的先后顺序显示在浏览器中,即把最新的信息显示在聊天室的最下面。由于用户的聊天信息不断地加入msginfo表中,数据库将会变得越来越大。为了获得较快的信息读取和现实速度,用户只需看到最新的N条聊天信息即可。本系统中N设置为15。实现这一功能的程序代码如下:Stringsql="select*frommsgInfowhereIDin(selecttop15IDfrommsgInfowherechatRoom=?OrderbychatTimeDESC)orderbychatTime";StringuserName=session.getAttribute("_USER").toString();PreparedStatementps=conn.preparedStatement(sql);ps.setString(1,session.getAttribute("_CHAT_ROOM").toString());ResultSetrs=conn.executeQuery();//下面while循环里的程序就是实现控制聊天信息显示格式的功能while(rs.next()){StringmsgFrom=rs.getString("msgFrom");//获取聊天信息发送者StringmsgTo=rs.getString("msgTo");//获取聊天信息接收者Stringaction=rs.getString("chatAction");//获取聊天表情StringmsgContent=rs.getString("msgContent");//获取聊天信息内容intsecret=rs.getInt("secret");//获取是否悄悄话//判断是否系统公告if(msgFrom.equals("systemnotice"))msgString=msgString+"<div>systemnotice:"+msgContent+"</div>";//判断是否悄悄话elseif(secret==0){//判断是否使用聊天表情if(action==null||action.equals("no")) msgString=msgString+"<div><fontcolor=blue>"+msgFrom+"</font>对<fontcolor=blue>"+msgTo+"</font></span>说:"+msgContent+"</div>"; elsemsgString=msgString+"<div><fontcolor=blue>"+msgFrom+"</font>"+action.replaceAll("B","<fontcolor=blue>"+msgTo+"</font>")+msgContent+"</div>";}//如果是悄悄话只在发送者和接收者的页面中显示elseif(msgFrom.equals(userName)||msgTo.equals(userName)){if(action==null||action.equals("no"))msgString=msgString+"<div><fontcolor=red>[悄悄话]</font><fontcolor=blue>"+msgFrom+"</font>对<fontcolor=blue>"+msgTo+"</font></span>说:"+msgContent+"</div>";elsemsgString=msgString+"<div><fontcolor=red>[悄悄话]</font><fontcolor=blue>"+msgFrom+"</font>"+action.replaceAll("B","<fontcolor=blue>"+msgTo+"</font>")+msgContent+"</div>";}}5.3.2聊天信息的自动刷新问题实现聊天信息自动刷新功能的代码如下:<scriptlanguage="javascript">//javascript函数,每融2000毫秒(2秒)刷新一次页面functionGetData(){vartimeoutid=setTimeout("window.location.reload()",2000)}</script></head><bodyonload="GetData()">本设计中设置页面的自动刷新的时间为2s,body属性设置,页面载入时就自动执行。当用户输入聊天信息并点击send按钮后,在短暂的时间延迟就可以看到发言的内容,如图4-11所示。图4-10显示聊天者的发言信息5.4显示在线用户模块设计每当一个新的用户进入聊天室后,系统应当将该用户显示在在线用户列表中,如图4-11所示。图4-11用户登陆后线列表的显示实现显示在线用户功能的程序为userlist.jsp,代码如下:<HTML><HEAD><%@pagelanguage="java"contentType="text/html;charset=GB2312"pageEncoding="GB2312"%><%@includefile="chkSession.jsp"%><META-equiv="Content-Type"content="text/html;charset=GB2312"><%@pageimport="java.sql.*"%><jsp:useBeanid="conn"class="net.chat.BaseConn"scope="page"/><jsp:useBeanid="list"class="net.chat.ChatRoomList"scope="page"/><jsp:useBeanid="chatRoomObj"class="net.chat.ChatRoom"/><meta-equiv="Content-Type"content="text/html;charset=gb2312"><!--在这里设置,每8秒钟刷新一次页面--><META-equiv="refresh"content="8"><scriptlanguage="JavaScript"type="">//javascript函数,实现用户选择特定聊天用户发送消息 functionPerformSubmit(user){ parent.inputFrame.chatForm.msgTo.value=user; returnfalse; }</script></HEAD><BODYbgcolor="yellow"><%//检查当前用户是否已经被踢出聊天室,如果已经被踢出聊天室后面程序不再执行if(chatRoomObj.denyUser(session.getAttribute("_USER").toString(),session.getAttribute("_CHAT_ROOM").toString())){out.println("<script>alert(\"对不起,你已经被踢出本聊天室\")</script>");out.println("<script>parent.document.location.href='chatRoomList.jsp'</script>");//response.sendRedirect("chatRoomList.jsp");return;}StringuserName=session.getAttribute("_USER").toString();//断用户是否已经和聊天室断开连接if(userName==null){ out.println("<script>alert(\"你已经和聊天室断开\")</script>");out.println("<script>parent.document.location.href='login.jsp'</script>"); return; }StringchatRoom=(String)session.getAttribute("_CHAT_ROOM").toString();%> <fontcolor="#0000ff">onlineuser</font>[<fontcolor="#ff0000"><%=list.countUser(chatRoom)%></font>] <ahref="#"onClick=PerformSubmit("allpeople")>allpeople</a><br><%try{//获取当前聊天房间中的所有用户列表Stringsql="select*fromonlineUserwherechatRoom='"+session.getAttribute("_CHAT_ROOM")+"'";ResultSetrs=conn.executeQuery(sql);while(rs.next()){%> [<ahref="#"class="l1"onClick=PerformSubmit("<%=rs.getString("nickName")%>")><%=rs.getString("nickName")%></a>]<br><%}}catch(Exceptionex){out.println("数据库维护");}finally{}%></BODY></HTML>5.5管理员管理模块设计管理员具有将在线发言不当的用户踢出聊天室和删除数据库中已注册用户的权限。该功能由程序advanced.jsp来实现,如图4-12所示。图4-12管理员管理界面代码如下:<%@pagelanguage="java"import="java.sql.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>高级管理页面</title><scriptlanguage="javascript">//javascript函数,实现踢人功能functionkick(){document.form1.action="kick.jsp";document.form1.submit();}//javascript函数,实现删除用户功能functiondel(){document.form1.action="delete.jsp";document.form1.submit();}//javascript函数,实现列出所有注册会员列表functionlist(){document.location.href="advanced.jsp?list=true";}</script><jsp:useBeanid="chatRoom"class="net.chat.ChatRoom"/><jsp:useBeanid="conn"class="net.chat.BaseConn"/></head><bodybackground="D:\Tomcat5.0\webapps\WebRoot\images\1.jpg"><%try{ //检查用户是否管理员用户,如果是管理员用户才执行下面代码if(chatRoom.checkAdmin(session.getAttribute("_USER").toString())){%> <formmethod="post"name="form1"target="_blank"><table><%if(request.getParameter("list")==null){%><tr><td>用户</td><td>最后发言时间</td><td>最近登录时间</td></tr> <% //如果不是列出所有注册用户列表,则列出当前聊天房间所有在线用户列表 //Stringsql="selectonlineUser.nickNameAsnickName,lastChatTime,lastLoginTimefromuserInfo,onlineUserwhereuserInfo.nickName=onlineUser.nickNameandchatRoom='"+session.getAttribute("_CHAT_ROOM").toString()+"'"; Stringsql="selectnickName,lastChatTime,lastLoginTimefromonlineUserwherechatRoom='"+session.getAttribute("_CHAT_ROOM").toString()+"'"; ResultSetrs=conn.executeQuery(sql); while(rs.next()) { %> <tr> <td> <inputtype="checkbox"name="userName"value="<%=rs.getString("nickName")%>"><%=rs.getString("nickName")%> </td> <td> <%=rs.getString("lastChatTime")!=null?rs.getString("lastChatTime"):"没有发言"%> </td> <td> <%=rs.getString("lastLoginTime")%> </td> </tr><%} %> <tr> <td> <!--鼠标点击时触发事件,调用删除用户函数--> <inputtype="button"value="踢出聊天室"onClick="kick()"> <!--鼠标点击时触发事件,调用删除用户函数--> <inputtype="button"value="删除用户"onclick="del()"> <!--鼠标点击时触发事件,调用列出所有会员函数--> <inputtype="button"value="列出所有用户列表"onclick="list()"> </td> </tr> <% }else { %> <tr> <td>用户<td>最近登录时间</td> </tr> <% //管理选择列出所有用户列表,按登录时间顺序排序 Stringsql="selectnickName,lastLoginTimefromuserInfoorderbylastLoginTime"; ResultSetrs=conn.executeQuery(sql); while(rs.next()) { StringnickName=rs.getString("nickName"); //系统公告是系统用户,在这里不允许删除,不允许查看 if(!nickName.equals("系统公告"))
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宿舍楼钢筋绑扎施工方案
- 关于医院感染管理工作总结范文
- 燃气管道工程验收标准
- 公司人力部门外包合同
- 银行VIP服务外包合同
- 公司说转正后签外包合同
- 管道试压专项施工方案
- 项目部安全混凝土搅拌车措施
- 消防管道压力试验施工工艺
- 糖尿病患者口腔护理宣教
- 2025-2030年中国核桃种植深加工行业竞争格局与前景发展策略分析报告
- 临床护理带教现状及改善
- 2025年高考英语完形填空+语法填空专练(原卷版+解析版)
- 室内设计cad培训
- 六年级数学总复习立体图形名师公开课获奖课件百校联赛一等奖课件
- 湖南高中物理学业水平考试公式及知识点总结学生
- 2022年湖南省普通高中学业水平合格考试-英语(含答案)
- 安全文明施工奖罚明细表
- HG/T 2782-2024 化工催化剂颗粒抗压碎力的测定(正式版)
- 2024年歌尔股份有限公司校园招聘考试试题汇编
- MOOC 针灸学-经络养生与康复-暨南大学 中国大学慕课答案
评论
0/150
提交评论