《Web开发》课程设计报告聊天室


     《Web开发》 课程设计报告 (2011— 2012学年 第 2 学期) 题 目: 聊 天 室 专 业: 计算机网络技术 班 级: 姓名学号: 指导教师: 成 绩: XX职业技术学院计算机系 2012 年 X 月 X 日 目 录 目 录 II 1 概 述 1 1.1 设计目标 1 1.2 项目规划 1 1.3 开发工具的选择 2 2 需求分析 3 2.1 需求分析 3 2.2 数据库表设计 4 3 系统总体设计 6 3.1系统结构 6 4系统功能模块实现 7 4.1 登录和注册界面模块 7 4.2 选择聊天室界面模块 10 4.3 聊天室主界面模块 12 4.4 用管理员高级功能管理模块 20 5 调试分析 28 6心得体会 29 致 谢 30 参 考 文 献 31 1 概 述 1.1 设计目标 从功能角色上来讲,在线聊天室可以有两种类型的用户,普通用户和管理员。 其中,普通用户在登录后,可以选择性的进入不同的聊天室,并通过聊天界面,向一人或多人发送聊天消息,进行聊天交流。如果是第一次进入到该聊天室,还可以通过本模块提供的注册功能,提交注册信息,成为本聊天室的用户。 管理员在登陆后,除了可以聊天外,还可以拥有各种管理的权限,比如查看所有在线用户信息,还可以把一些不遵守聊天规则的用户赶出聊天室,甚至从数据库里把一些恶意聊天用户除名。 1.2 项目规划 本聊天室需要提供如下的界面和功能。 1、需要提供支持用户登陆以及身份验证的WEB界面和实现后台对应功能的模块。在这个模块中,能根据登入者拥有的权限,分别开放不同的权限。 2、需要一个支持用户注册的界面和对应的后台模块。 3、需要为普通用户和管理员提供一个浏览所有聊天室的界面和对应后台功能模块。在这个界面中,用户可以选择性的进入不同的聊天室。 4、需要为普通用户和管理员提供一个支持多人聊天的界面和对应的后台模块。在这个界面中用户和管理员可以选择聊天对象,也可以想聊天对象发送信息。 5、需要为管理员提供一个查询所有用户的界面和对应的功能模块,这个界面其实就是管理员实现其管理功能的界面,在这个界面里,管理员可以实现“赶人”的功能,也可以实现“删除聊天用户”的动作。 1.3 开发工具的选择 JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和 scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。 JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。 JSP的优势 (1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。 (2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。 (3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。 (4)多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。 2 需求分析 2.1 需求分析 21世纪是网络的时代,Internet的普及已经影响了传统的交流方式。网络聊天室系统是计算机网络发展的产物,是最为常见、最受广大互联网使用者所认可的基于Web的网络应用系统。随着互联网的发展,人们通过网络可以更方便快捷地进行信息交流和学习,聊天系统可以为大家提供一个更好的交流平台,在这个平台上,人们可以通过文字与符号进行实时的交谈、聊天,它是一个向整个因特网开放的地方,是提供给网民一个交友与娱乐的场所,在聊天室里网民可选择自已的聊天对象,与其进行对话交流,是网民之间相互沟通、交流情感的最佳方式之一。 从传播方式上讲, 聊天室传播是非线性传播。非线形传播指聊天室传播的信息是为无数的共享空间的网络用户所发出的, 任何拥有网络传播权利的人都可以得到, 网络打破了传统媒体单向传送信息的格局, 信息传播者与接收者之间的互动变得切实可行。从传播的信息内涵上讲, 聊天室的消息结构是无中心的。聊天室所给受 众带来的信息与感受作为一种现代生活资源, 在实现了从传统大众传播的单向传播向多向传播的转变后, 极大地拓展了现代生活空间, 使传播者与受众之间的直接连通成为可能。这一转变使整个传播结构与传播效果发生了巨大变化, 是传统媒体无法比拟的。 根据CNNIC 发布的第十五次中国互联网络发展状况统计报告, 有3.5%的商业网站提供网络聊天。热衷于网上聊天的人群大部分集中于16~24 年龄段上, 经济上没有独立, 又缺乏网上支付手段的特点也是聊天室不为商业网站看好的重要理由之一。目前经营商获得收益的渠道有两条: 在线广告和电子商务。青少年在经济上没有自立, 经营商通常很难通过电子商务获得收入; 而在在线广告方面, 各商业网站目前的广告客户主要目标人群锁定中、高收入的白领阶层, 面向青少年消费市场的网上广告几乎没有, 无法通过网上广告获得收益。因此, 对于青少年聚集的网上聊天室, 网络公司自然没有太高的热情。 实际上, 青少年的消费市场一向是规模可观、利润丰厚的一块大蛋糕。无论流行音乐、新潮服饰、娱乐场所, 青少年消费都是其中的主力。论市场规模, 全国青少年消费市场的总规模不低于一千亿。我们看到, 并非聊天的人群本身缺乏商业价值, 而是目前没有好的办法将这种价值加以发掘。在线广告理应成为聊天室获得商业收益的主要手段。 随着研发技术的进步,qq.msn等聊天软件的面世,取代了聊天室。同时,聊天室内用户过激,不法等言辞,也是聊天室逐渐没落的原因。但是,聊天软件的局限性,不比聊天室开放性强,面向广。只有真正了解聊天室的主要使用人群, 才能更好地设置聊天室的主题、话题、页面风格等。要重视聊天室产品的氛围经济效益, 可以成为各种汽车俱乐部、攀岩俱乐部、自行车俱乐部等的合作伙伴, 吸引更多会员,成为网上会所。聊天室还应注意自身形象的塑造, 只有个性化、特色化才能使聊天室产品脱颖而出。要注意适当的广告宣传。在以上的种种因素下,本课题的研究方向就是运用JSP技术营造一个简单,友好的网络聊天室,为互联网使用者提供学习,讨论和交流的平台。 2.2 数据库表设计 在ChatRoom数据库中建一个名为userinfo的表,如表3.2所示。 列名 数据类型 长度 可否为空 说明 ID int 11 NOT NULL 索引号,主键,自增 nickName varchar 50 NOT NULL 用户昵称、用户昵称 userPassword Varchar 50 NOT NULL 用户密码 role tinyint 1 NOT NULL 用户权限0代表普通会员,1代表管理员 lastLoginTime date NULL 用户最后登陆时间 表3.2userinfo数据表 在ChatRoom数据库中新建一个名为msginfo的表,用来保存聊天信息。在显示聊天记录时,可以通过查询语句对不同的用户显示不同的信息。如表3.3所示。 列名 数据类型 长度 可否为空 说明 ID int 11 NOT NULL 索引号,主键,自增 chatRoom varchar 50 NOT NULL 聊天信息对应的房间 msgFrom varchar 50 NOT NULL 聊天信息发言人 msgTo varchar 50 NOT NULL 聊天信息发表对象 chatTime datetime NOT NULL 聊天信息发表时间 chatAction varchar 50 NULL 聊天信息的动作和表情 msgContent varchar 200 NOT NULL 聊天信息的内容 secret tinyint 1 NOT NULL 0代表非悄悄话,1代表悄悄话 表3.3msginfo表 在ChatRoom数据库表中新建一个名为onlineUser的表,用来保存在线用户信息。如表3.4所示。 列名 数据类型 长度 可否为空 说明 ID int 20 NOT NULL 索引号、主键、自增 chatRoom varchar 50 NOT NULL L 用户所在的房间 nickName varchar 50 NOT NULL 用户的昵称 lastChatRoom dateTime NULL 用户最后发言时间 denyRoom varchar 255 NULL 用户被封的时间 表3.4 onlineUser表 3 系统总体设计 3.1系统结构 本系统将分为四大模块,即数据库通用模块、用户登录与注册模块、聊天主模块、管理员模块,具体描述如表3.1所示。 模块名 文件名 功能描述 数据库通用管理描述 BaseConn.jsp 连接和数据的查询更新操作 用户登录与注册模块 login.jsp 用户登入界面 chklogin.jsp 用户登录后台处理界面 Checklogin.java 封装登陆后的javabean 聊天室模块 chkSession.jsp 检查session信息判断用户是否登陆 chatRoomList.jsp 聊天房间选择界面 chatRoomList.java 封装选择聊天房间的javabean chatRoom.jsp 聊天框架界面 redirectChatRoom.jsp 转向聊天室中转界面 input.jsp 聊天室输入界面 sendMsg.jsp 聊天信息发送界面 userList.jsp 在线用户列表界面 dataValue.jsp 聊天信息显示界面 logout.jsp 离开聊天室 changeRoom.jsp 切换聊天房间 Message.java 聊天信息封装javabean ChatRoom.java 封装聊天功能的Javabean 管理员模块 advanced.jsp 管理员管理高级界面 kick.jsp 踢人功能 delete.jsp 删除用户 表3.1 系统结构表 4系统功能模块实现 4.1 登录和注册界面模块 登录界面模块是通过访问数据库中的userinfo表中的Name和Password两个字段来判断用户名和密码是否匹配,如果匹配就登入成功,否则登入失败,如果用户是第一次登录该聊天室,则自动注册。如图4.1所示。 图4.1 登录界面 核心代码: package net.chat; import java.sql.*; import java.util.*; import java.text.SimpleDateFormat; public class CheckLogin { public String checklogin(String userName,String userPassword) throws SQLException,ClassNotFoundException { BaseConn conn = null; try { conn = new BaseConn(); String sql = “select * from userInfo where nickName=?“; PreparedStatement ps = conn.preparedStatement(sql); ps.setString(1,userName); ResultSet rs = conn.executeQuery(); if(rs.next()) { if(rs.getString(“userPassword“).equals(userPassword)) { SimpleDateFormat cal = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“); String time = cal.format(new java.util.Date()); sql=“update userInfo set lastLoginTime=? where nickName=?“; ps=conn.preparedStatement(sql); ps.setString(1,time); ps.setString(2,userName); conn.executeUpdate(); return “SUCCESS_LOGIN“; } else return “WRONG_PASSWORD“; } else return “NONE_USER“; }catch(SQLException ex) { ex.printStackTrace(); throw ex; }catch(ClassNotFoundException ex) { ex.printStackTrace(); throw ex; } finally { conn.closeDB(); } } public boolean saveToDataBase(String userName,String userPassword) throws SQLException,ClassNotFoundException { BaseConn conn = null; try { conn = new BaseConn(); SimpleDateFormat cal = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“); String time = cal.format(new java.util.Date()); String sql = “insert into userInfo(nickName,userPassword,lastLoginTime,role) values(?,?,?,?)“; PreparedStatement ps = conn.preparedStatement(sql); ps.setString(1,userName); ps.setString(2,userPassword); ps.setString(3,time); ps.setInt(4,0); conn.executeUpdate(); return true; }catch(SQLException ex) { ex.printStackTrace(); throw ex; }catch(ClassNotFoundException ex) { ex.printStackTrace(); throw ex; }finally { conn.closeDB(); } } } 4.2 选择聊天室界面模块 如果登录成功则进入选择聊天室界面的模块,如图4.2所示: 图4.2 选择聊天室 核心代码: <%@ page language=“java“ import=“java.util.*,net.chat.*“ pageEncoding=“GB2312“%> <%@include file=“chkSession.jsp“%> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN“> <html> <head> <title>聊天室列表</title> <meta http-equiv=“pragma“ content=“no-cache“> <meta http-equiv=“cache-control“ content=“no-cache“> <jsp:useBean id=“chatList“ class=“net.chat.ChatRoomList“/> </head> <body style=“background:url('image/crl.jpg')“> <span style=“color:#ff88ff“>欢迎您:</span></style><span style=“color:red“><%=session.getAttribute(“_USER“)%></span><span style=“color:#ff88ff“>希望您在这里聊得愉快!</span> <!-- form表单,让用户选择一个聊天房间提交给redirectChatRoom.jsp处理--> <form action=“redirectChatRoom.jsp“ method=“post“> <table border=0> <tr> <td><input type=“radio“ name=“chatRoom“ value=“情感倾诉“><span style=“color:#ff0000“>情感倾诉</style> <%//这里通过javaBean组件获取每个聊天室房间的在线人数%> [<%=chatList.countUser(“情感倾诉“)%>]人</td> </tr> <tr> <td><input type=“radio“ name=“chatRoom“ value=“交友天地“><span style=“color:#000088“>交友天地</style> [<%=chatList.countUser(“交友天地“)%>]人</td> </tr> <tr> <td><input type=“radio“ name=“chatRoom“ value=“龙门客栈“ checked><span style=“color:#90E090“>龙门客栈</style> [<%=chatList.countUser(“龙门客栈“)%>]人</td> </tr> <tr> <td><input type=“submit“ value=“进入“></td> </tr> </table> </form> <div id=“ad“ style=“position:absolute“> <a href=“http://room.9158.com/“ target=“_blank“> <img src=“C:\Users\Administrator\Workspaces\MyEclipse 8.5\ChatRoom\WebRoot\image\room1.jpg“ border=“0“> </a></div> <script> var x = 50,y = 60 var xin = true, yin = true var step = 1 var delay = 10 var obj=document.getElementById(“ad“) function floatAD() { var L=T=0 var R= document.body.clientWidth-obj.offsetWidth var B = document.body.clientHeight-obj.offsetHeight obj.style.left = x + document.body.scrollLeft obj.style.top = y + document.body.scrollTop x = x + step*(xin?1:-1) if (x < L) { xin = true; x = L} if (x > R){ xin = false; x = R} y = y + step*(yin?1:-1) if (y < T) { yin = true; y = T } if (y > B) { yin = false; y = B } } var itl= setInterval(“floatAD()“, delay) obj.onmouseover=function(){clearInterval(itl)} obj.onmouseout=function(){itl=setInterval(“floatAD()“, delay)} </script> </body> </html> 4.3 聊天室主界面模块 此界面由三个用户输入模块、聊天信息显示模块和在线用户列表等三个模块组成,如图4.3所示。 图4.3聊天室主窗体 核心代码: package net.chat; import java.text.SimpleDateFormat; import java.sql.*; public class Message { private String chatRoom; private String msgFrom; private String msgTo; private String chatAction; private String msgContent; private int secret; public void setChatRoom(String chatRoom) { this.chatRoom = chatRoom; } public void setMsgFrom(String msgFrom) { this.msgFrom = msgFrom; } public void setMsgTo(String msgTo) { this.msgTo = msgTo; } public void setChatAction(String chatAction) { this.chatAction = chatAction; } public void setMsgContent(String msgContent) { this.msgContent = msgContent; } public void setSecret(int secret) { this.secret = secret; } public boolean saveToDataBase()throws SQLException,ClassNotFoundException { BaseConn conn = null; try { conn = new BaseConn(); SimpleDateFormat cal = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“); String time = cal.format(new java.util.Date()); String sql=“insert into msgInfo(chatRoom,msgFrom,msgTo,chatTime,chatAction,msgContent,secret) values(?,?,?,?,?,?,?)“; PreparedStatement ps = conn.preparedStatement(sql); ps.setString(1,chatRoom); ps.setString(2,msgFrom); ps.setString(3,msgTo); ps.setString(4,time); ps.setString(5,chatAction); ps.setString(6,msgContent); ps.setInt(7,secret); conn.executeUpdate(); sql = “update onlineUser set lastChatTime = ? where nickName=? and chatRoom= ?“; ps = conn.preparedStatement(sql); ps.setString(1,time); ps.setString(2,msgFrom); ps.setString(3,chatRoom); conn.executeUpdate(); return true; }catch(SQLException ex) { ex.printStackTrace(); throw ex; }catch(ClassNotFoundException ex) { ex.printStackTrace(); throw ex; } } } <html> <%@include file=“chkSession.jsp“%> <%@ page language=“java“ import=“java.sql.*“ pageEncoding=“GB2312“%> <head> <script language=“javascript“> //javascript函数,每融2000毫秒(2秒)刷新一次页面 function GetData() { var timeoutid = setTimeout(“window.location.reload()“,2000) } </script> </head> <body onload=“GetData()“> <jsp:useBean id=“conn“ class=“net.chat.BaseConn“ scope=“page“/> <% String msgString = ““; try { String sql = “select*from msgInfo where ID in(select top 30 ID from msgInfo where chatRoom=? Order by chatTime DESC) order by chatTime“; String userName=session.getAttribute(“_USER“).toString(); PreparedStatement ps = conn.preparedStatement(sql); ps.setString(1,session.getAttribute(“_CHAT_ROOM“).toString()); ResultSet rs = conn.executeQuery(); //下面while循环里的程序就是实现控制聊天信息显示格式的功能 while(rs.next()) { String msgFrom = rs.getString(“msgFrom“);//获取聊天信息发送者 String msgTo=rs.getString(“msgTo“);//获取聊天信息接收者 String action = rs.getString(“chatAction“);//获取聊天表情 String msgContent=rs.getString(“msgContent“);//获取聊天信息内容 int secret = rs.getInt(“secret“);//获取是否悄悄话 //判断是否系统公告 if(msgFrom.equals(“系统公告“)) msgString=msgString+“<div>系统公告:“+msgContent+“</div>“; //判断是否悄悄话 else if(secret==0) { //判断是否使用聊天表情 if(action==null||action.equals(“no“)) msgString=msgString+“<div><font color=blue>“+msgFrom+“</font>对<font color=blue>“+msgTo+“</font></span>说:“+msgContent+“</div>“; else msgString=msgString+“<div><font color=blue>“ +msgFrom+“</font>“+action.replaceAll(“B“,“<font color=blue>“ +msgTo+“</font>“)+msgContent+“</div>“; } //如果是悄悄话只在发送者和接收者的页面中显示 else if(msgFrom.equals(userName)||msgTo.equals(userName)) { if(action==null||action.equals(“no“)) msgString=msgString+“<div><font color=red>[悄悄话]</font><font color=blue>“ +msgFrom+“</font>对<font color=blue>“+msgTo+“</font></span>说:“ +msgContent+“</div>“; else msgString=msgString+“<div><font color=red>[悄悄话]</font><font color=blue>“ +msgFrom+“</font>“+action.replaceAll(“B“,“<font color=blue>“ +msgTo+“</font>“)+msgContent+“</div>“; } } }catch(Exception ex) { ex.printStackTrace(); out.println(“系统维护“); }finally { conn.closeDB(); } %> <script language=“javascript“> parent.loadContent.innerHTML=“<%=msgString%>“; parent.location.hash=“position“; </script> </body> </html> <HTML> <HEAD> <%@ page language=“java“ contentType=“text/html; charset=GB2312“ pageEncoding=“GB2312“ %> <%@include file=“chkSession.jsp“%> <META http-equiv=“Content-Type“ content=“text/html; charset=GB2312“> <%@page import=“java.sql.*“%> <jsp:useBean id=“conn“ class=“net.chat.BaseConn“ scope=“page“/> <jsp:useBean id=“list“ class=“net.chat.ChatRoomList“ scope=“page“/> <jsp:useBean id=“chatRoomObj“ class=“net.chat.ChatRoom“/> <meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“> <!-- 在这里设置,每8秒钟刷新一次页面--> <META http-equiv=“refresh“ content=“8“> <script language=“JavaScript“ type=““> //javascript函数,实现用户选择特定聊天用户发送消息 function PerformSubmit(user) { parent.inputFrame.chatForm.msgTo.value=user; return false; } </script> </HEAD> <BODY bgcolor=“#FF9900“ > <% //检查当前用户是否已经被踢出聊天室,如果已经被踢出聊天室后面程序不再执行 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; } String userName =session.getAttribute(“_USER“).toString(); //断用户是否已经和聊天室断开连接 if (userName == null) { out.println(“<script>alert(\“你已经和聊天室断开\“)</script>“); out.println(“<script>parent.document.location.href='login.jsp'</script>“); return; } String chatRoom =(String)session.getAttribute(“_CHAT_ROOM“).toString(); %> <font color=“#0000ff“>在线人员</font> [<font color=“#ff0000“> <%=list.countUser(chatRoom)%></font>] <a href=“#“ onClick=PerformSubmit(“所有人“)>所有人</a><br> <% try { //获取当前聊天房间中的所有用户列表 String sql=“select * from onlineUser where chatRoom='“+session.getAttribute(“_CHAT_ROOM“)+“'“; ResultSet rs = conn.executeQuery(sql); while(rs.next()) { %> [<a href=“#“ class=“l1“ onClick=PerformSubmit(“<%=rs.getString(“nickName“)%>“)> <%=rs.getString(“nickName“)%></a>]<br> <% } }catch(Exception ex) { out.println(“数据库维护“); }finally { } %> </BODY> </HTML> 4.4 管理员高级管理功能界面 如果是管理员登录,则可通过高级功能进入高级管理界面,可以实现踢人、删除用户以及查看所有用户的功能,如图4.4所示 图4.4管理员高级管理界面 核心代码: <%@ page language=“java“ import=“java.sql.*“ pageEncoding=“UTF-8“%> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN“> <html> <head> <title>高级管理页面</title> <script language=“javascript“> //javascript函数,实现踢人功能 function kick() { document.form1.action=“kick.jsp“; document.form1.submit(); } //javascript函数,实现删除用户功能 function del() { document.form1.action=“delete.jsp“; document.form1.submit(); } //javascript函数,实现列出所有注册会员列表 function list() { document.location.href=“advanced.jsp?list=true“; } </script> <jsp:useBean id=“chatRoom“ class=“net.chat.ChatRoom“/> <jsp:useBean id=“conn“ class=“net.chat.BaseConn“/> </head> <body> <% try { //检查用户是否管理员用户,如果是管理员用户才执行下面代码 if(chatRoom.checkAdmin(session.getAttribute(“_USER“).toString())) { %> <form method=“post“ name=“form1“ target=“_blank“> <table > <% if(request.getParameter(“list“)==null) { %> <tr> <td> 用户 </td> <td> 最后发言时间 </td> <td> 最近登录时间 </td> </tr> <% //如果不是列出所有注册用户列表,则列出当前聊天房间所有在线用户列表 String sql=“select onlineUser.nickName As nickName,lastChatTime,lastLoginTime from userInfo,onlineUser where userInfo.nickName=onlineUser.nickName and chatRoom='“+session.getAttribute(“_CHAT_ROOM“).toString()+“'“; ResultSet rs = conn.executeQuery(sql); while(rs.next()) { %> <tr> <td> <input type=“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> <!-- 鼠标点击时触发事件,调用删除用户函数--> <input type=“button“ value=“踢出聊天室“ onClick=“kick()“> <!-- 鼠标点击时触发事件,调用删除用户函数--> <input type=“button“ value=“删除用户“ onclick=“del()“> <!-- 鼠标点击时触发事件,调用列出所有会员函数--> <input type=“button“ value=“列出所有用户列表“ onclick=“list()“> </td> </tr> <% } else { %> <tr> <td> 用户 <td> 最近登录时间 </td> </tr> <% //管理选择列出所有用户列表,按登录时间顺序排序 String sql=“select nickName,lastLoginTime from userInfo order by lastLoginTime“; ResultSet rs = conn.executeQuery(sql); while(rs.next()) { String nickName = rs.getString(“nickName“); //系统公告是系统用户,在这里不允许删除,不允许查看 if(!nickName.equals(“系统公告“)) { %> <tr> <td> <input type=“checkbox“ name=“userName“ value=“<%=rs.getString(“nickName“)%>“> <%=rs.getString(“nickName“)%> </td> <td> <%=rs.getString(“lastLoginTime“)%> </td> </tr> <% } } %> <tr> <td> <!-- 鼠标点击时触发事件,调用删除用户函数--> <input type=“button“ value=“删除用户“ onclick=“del()“> <!-- 鼠标点击时触发事件,调用列出所有会员函数--> <input type=“button“ value=“列出所有用户列表“ onclick=“list()“> </td> </tr> </table> </form> <% } } else { //如果不是管理员用户弹出无权限对话框,并关闭页面 out.println(“<script>alert('你不是管理,不能操作此项');location.href='javascript:window.close()'</script>“); } }catch(Exception ex) { out.println(“系统维护“); }finally { conn.closeDB(); } %> <br> </body> </html> 5 调试分析 在本次jsp网络编程课程设计中遇到了很多实际性问题在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。以下是我在设计系统时的三个阶段中遇到的问题: 1. JSP设计阶段 JSP设计界面及逻辑功能时,遇到了前所未有的困难,开始设计的时候,是想为了简单起见,把系统的功能和界面都放在jsp中来写,也就不用java程序了,可是没写几个jsp页面就写不下去了,处处是错误,而且还看不懂错在什么地方,想了好久,最后决定,系统功能在java中写,界面的设计在jsp中写,这样jsp里面的东西就显得简单一些了,更具逻辑性。各种复杂的问题也就慢慢的迎刃而解了! 2. 数据库设计阶段 数据库表建成后,各个表要有一个字增的非空主键,在建立表与表之间的相互联系时会出现错误。另外,数据库建成后,在为数据库创建用户时,创建的用户不能映射到此数据库! 3. JSP连接数据库阶段 这是数据库最后一个阶段了,可是也遇到了很大的问题。开始在JSP中连接数据库时,总是连接不成功,显示一些看不懂的错误,通过上网查资料才知道要对sql server 2005进行设置,开启远程连接以及TCP/IP服务,还要重启服务才可以。这个问题一直纠结了我好久,最终经过我的不懈努力下,终于把它解决了。 6心得体会 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,网站设计已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握网站的开发技术是十分重要的。   通过本次课程设计,我感受颇多,尽管上课时也认真听了老师的讲课,但是已开始面对自己的题目时,还是有些不知所措,都不知道如何下手,后来去图书馆借了几本相关的书籍,心里在感觉有了一些底。经过这差不多四个星期来的学习与编码,总算还是收获不少,对jsp的认识也更加的深刻了。在这个过程中,我感觉就像人生的一个缩影,充满了酸甜苦辣。当一个问题想了好久也无法解决时,我感到沮丧与无助。当经过努力解决了一个程序上的难题时,我感到无比的喜悦。当经过每天为了编写代码一坐就是四五个小时,晚上还要写到凌晨一两点钟的时候,我感到无比的痛苦。但艰难痛苦已成往事,灿烂的明天向我走来,今天我总算迎接了胜利的果实,以前的辛酸与痛苦化作我坚强的力量,将在我将来的人生历程中,为我的美好明天打下坚实的基础。经过了这次磨练,我又一次感受到只有付出才能有收获,成功永远是属于不懈努力的人们的。不过经过这几个星期来的不断拼搏,虽然有一点成功的喜悦,但是我依然感受到我的这个在线电子商城依然还有很多不足的地方,我将在以后的时间好好完善它,以求能使我的这个聊天室系统能达到一个更加高的水平,同时也能从中获得更加多的宝贵的经验。    这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在唐老师的辛勤指导下,终于游逆而解。同时,在唐老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢! 致 谢 在本次课程设计实践中,指导教师以对学生认真负责的态度,提供了非常有益的指导意见,给予我很大的帮助,使我得到实质性的提高。这对于我以后的工作和学习是巨大的财富。 我会珍惜这次课设中学到的大量知识和经验,为以后的工作学习提供必要的帮助。在做这个系统的过程中,程序调试给我留下最深的印象,在调试上花的时间最多,这说明了我在平时学习的时候学的不够扎实,对错误研究不够,编写代码的时候不够仔细,还有就是缺乏足够的耐心。 经过课程设计的训练,我学到很多,也成熟许多。在整个课程设计的过程中指导老师和同学都帮助我很多,特别是老师严谨的治学作风、深厚的理论水平、热情的待人态度给我留下了深刻的印象。他为我提出一些关键性的问题和宝贵的意见,这些关键性的问题和宝贵的意见,对我的作业的成功完成起了决定性作用!我再次感谢您的帮助! 参 考 文 献 [1] 范芸.JSP动态网站开发基础与上机指导.清华大学出版社,2010年6月 [2] JSP网站开发逐步深入中文版.第一版.电子工业出版社,2006年:P56 [3] 刘韬,楼兴华.JSP系统开发实例导航.第一版.北京:人民邮电出版社,2004年:P197 [4] 李保春,曾慧.JSP网络开发教程.第一版.北京:清华大学出版社,2006年:P69 [5] 张跃廷,JSP系统开发完全手册.第一版.人民邮电出版社,2006年:P44 [6] JSP程序设计.第一版.高等教育出版社,2006年:P201 [7] SQL Server实验指导.第3版.清华大学出版社,2010年 本文档由香当网(https://www.xiangdang.net)用户上传

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    Web系统开发课程设计报告

    录入学生基本信息的功能学生基本信息主要包括:学号、姓名、年龄、出生地、专业、班级总学分,在插入时,如果数据库已经存在该学号,则不能再插入该学号。1.2、修改学生基本信息的功能

    7个月前   
    555    0

    WEB前端开发规范文档

    为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必 须按本文档规范进行前台页面开发. 本文档如有不对或者不...

    5年前   
    151    0

    基于WEB的图书管理系统的设计与实现课程设计

    软件工程课程设计报告基于WEB的图书信息管理系统的设计与实现所 在 学 院 信息科学技术学院 专 业 名 称 计算机科学与技术 ...

    1个月前   
    99    0

    《Android平台软件开发》课程设计报告

    《Android平台软件开发》课程设计报告题 目 基于安卓的计算标准体重的应用程序 专 业 计算机科学与技术 ...

    3周前   
    63    0

    WEB开发转正申请书范文

    WEB开发转正申请书范文  web开发转正申请书范文一  尊敬的领导:  我于20xx年xx月xx日进入公司技术部,在技术部担任web开发程序员一职。在这两个月的工作时间里,我一直对自己要求严...

    9年前   
    126    0

    软件开发NGRTPS-WEB组项目工作总结和工作计划

    2010年12月月度总结及2011年01月工作计划 (NGRTPS-WEB组) 2010年12月工作总结 1.        12月度目标完成情况 【项目部分】 项目整体完成进度约9...

    10年前   
    13765    0

    日期和时间课程设计报告

    日期和时间课程设计报告 1. 功能 1.1课程设计题目功能:定义了日期类、时间类和日期时间综合类,重载了+、-、++、--、=、>=、<=、==、!=等运算符,可以设置时间、日期,比较时间和日...

    2年前   
    694    0

    单片机课程设计报告

    1 方案设计与论证1.1 硬件总体设计设计并制作一个基于单片机的数字电压表的电路其结构框图如图 1-1 所示: 图1-1 硬件结构框图(1)单片机最小系统电路部分 (2)数码管显示部分(3) ...

    1年前   
    781    0

    职工住房管理系统说明书软件项目开发课程设计

    ******************* 实践教学 ******************* XX大学 计算机与通信学院 20XX年春季学期 软件开发综合训...

    2年前   
    712    0

    职工考勤管理系统说明书软件项目开发课程设计

    ******************* 实践教学 ******************* XX大学 计算机与通信学院 20XX年秋季学期 软件开发综合训...

    2年前   
    663    0

    五子棋的开发与测试软件测试课程设计

     软件测试小论文题目:五子棋的开发与测试 班 级: 计算机科学与技术特色本班 小组成员: 完成日期: ...

    1个月前   
    124    0

    文学网站的设计说明书软件项目开发课程设计

    ******************* 实践教学 ******************* XX大学 计算机与通信学院 20XX年春季学期 软件开发综合训...

    1年前   
    657    0

    学籍管理系统的设计与实现说明书软件项目开发课程设计

     ******************* 实践教学 ******************* XX学 计算机与通信学院 20XX年秋季学期 软件开发综合训练 课程设计 题...

    2年前   
    821    0

    广东海洋大学.NET开发技术课程设计论坛

     《.NET开发技术》课程论文 BBS论坛 姓名__________ 班级__ _ 学号__ ...

    1年前   
    596    0

    Web呼叫中心(web callcenter)解决方案-呼叫中心解决方案

    Web呼叫中心(web callcenter)解决方案-呼叫中心解决方案  几乎每个网站都有“客户服务和支持”,但,客户能在线上得到有效的服务和支持吗?  接近半数(49%)的客户,不能从网站...

    6年前   
    181    0

    Web数据库系统的安全性分析开题报告

    1.1.课题背景简介随着WWW应用领域的不断拓展,人们已不满足于只用Web服务器浏览和发布静态的信息,人们需要通过它发表意见、查询数据甚至进行网上购物。原来的静态Web页面已经满足不了用户对信息...

    4个月前   
    101    0

    2018年网络营销WEB2.0实验总结报告

    网络营销WEB2.0实验总结报告  网络营销是我这学期接触的一门课程,虽然一开始自己所认知的营销与其不尽相同,但不得不说它使我收获颇丰。  当今世界,互联网高速发展,但我自己对于网络的认识,仅...

    2年前   
    71    0

    自动控制原理课程设计报告

    课 题: 课题十六 专 业: 电气工程及其自动化班 级: 姓名学号: ...

    4周前   
    94    0

    物业管理系统课程设计报告

    物业管理系统课程设计报告目 录第一章 前 言 11. 物业管理系统研究的意义 12. 数据库开发简介 13. asp.net简介 2第二章 数据库设计 31.选择数据库管理系统 ...

    4周前   
    127    0

    物流信息系统课程设计报告

    课程设计指导教师评定成绩表项目分值优秀(100>x≥90)良好(90>x≥80)中等(80>x≥70)及格(70>x≥60)不及格(x<60)评分参考标准参考标准参考标准参考标准参考标准学习态...

    3个月前   
    142    0

    文档贡献者

    文***品

    贡献于2021-01-12

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档