项目题目:网络聊天室评分项得分技术(40分)ServletJSPELFilterListenerTagJSTLDataSourceJavaMailEJB需求设计文档(8分)注释说明(8分)一.项目规划:开发环境:NetBeans&MySQL开发语言:java,SQL二.需求分析:伴随的网络的普及,网络聊天室成为群众网络生活的一部分,各种类型的聊天室为大众学习,生活,工作服务。本聊天室系统专门针对大学生中对J2EE编程有兴趣的同学提供一个可以互相交流的平台,分享经验和知识。结构化分析:该程序分成4个模块及分工:i.数据库建立和链接模块——ii.用户登录和注册模块——iii.聊天室模块——iv.管理员功能模块——数据库建立:数据库连接代码:用户登录界面和管理员登录选项连接:注册界面:聊天室3个框体:全体3人共同完成管理员删除功能:在线用户分页显示:文档制作:系统完善:1.数据库建立和链接模块:需求分析:创建程序所需的数据库,2个表的建立及链接数据库的java文件编写,要求能够将各模块有关的数据操作行为所造成的数据变更及时准确的提交到数据库并改变。复杂度分析:多表建立,连接,查询功能,连接MySQL数据库。可行性分析:使用powerdesigner建立合适的数据库,上网查找连接MySQL的链接代码。2.用户登录和注册模块:需求分析:要求创建简单明了的登陆界面,包括普通用户的账号密码输入框,管理员特殊登录选项,找回密码,普通用户注册选项以及相应的注册界面。同时在用户登录及注册时,能够将用户的输入信息准确的链接到数据库中,对数据进行添加,修改和比较。当管理员登录后自动连接至管理员模块界面。复杂度分析:界面创建及点击后的界面转换,登录与注册时连接数据库后的数据对比和添加。可行性分析:使用JSP编程实现界面及转换,利用数据库连接模块对数据进行比较和添加。3.聊天室模块:需求分析:本程序的主体部分,要求建立3个分框体:聊天信息框,在线成员框和用户聊天信息输入框形成主窗体。3个框体中要求聊天信息框体按照时间顺序显示所有用户的聊天信息并声明是否是私人聊天信息,在线成员框体能够及时准确的表现在线成员的名字和在线总人数,聊天信息输入框体要求除信息输入栏外还要有动作,表情选项,并在输入栏下方显示当前时间,并将信息时间存放入数据库相应的表中复杂度分析:3部分框体实现,聊天信息的保存,信息输入框与聊天信息框显示的链接。可行性分析:JSP实现3部分框体及框体信息的链接,聊天信息保存到XML文件中,聊天时间存放入charroom表中。4.管理员功能模块:需求分析:要求当管理员登陆后进入高级管理界面,显示所有用户的信息以分页形式显示,并允许对用户进行删除操作,同时改变数据库中的数据信息。复杂度分析:高级界面的实现及用户信息的分页显示,连接数据库并操作数据库数据。可行性分析:JSP实现界面,标签Tag实现分页显示及数据库的链接。系统总体模块模块名文件名功能描述数据库建立和链接模块BaseConnection.java链接和数据查询更新操作用户登录和注册模块login.jsp用户登录界面Check.jsp用户登录后台处理Search.jsp密码找回界面regist.jsp用户注册界面SecureFilter.java登录过滤Check_login.java检查登录注册操作loginCheckBean.java封装登录功能的JavaBeanReceiveMail.java接收用户密码SendMail.java发送用户密码聊天室模块ChatRoom.jsp聊天室界面,信息输入界面Contant.jsp聊天内容界面leave.jsp用户退出处理online.jsp显示在线用户列表UserInfo.java在线用户后台处理UserListener.java监听用户在线情况MessageAction.java聊天内容后台处理StringUtils.java修改字符编码管理员功能模块manage.jsp高级管理界面ManageTag.java分页实现及用户删除三.数据库设计E—R图数据库物理结构在线用户列表onlineusernickNameVARCHAR(50)主码用户名loginTimeVARCHAR(50)NotNull登录时间注册用户列表playernicknameVARCHAR(50)外码用户名passwordVARCHAR(50)NotNull用户密码MySQL建表SQL脚本(包含索引)/*==============================================================*//*DBMSname:MySQL4.0*//*Createdon:2010-1-1014:13:05*//*==============================================================*/dropindexRelationship_1_FKononlineuser;droptableifexistsonlineuser;droptableifexistsplayer;/*==============================================================*//*Table:onlineuser*//*==============================================================*/createtableonlineuser(nicknamevarchar(50),logintimevarchar(50))type=InnoDB;/*==============================================================*//*Index:Relationship_1_FK*//*==============================================================*/createindexRelationship_1_FKononlineuser(nickname);/*==============================================================*//*Table:player*//*==============================================================*/createtableplayer(nicknamevarchar(50)notnull,passwordvarchar(50),primarykey(nickname))type=InnoDB;altertableonlineuseraddconstraintFK_Relationship_1foreignkey(nickname)referencesplayer(nickname)ondeleterestrictonupdaterestrict;四.设计:a)数据库建立和连接模块实现i.实现功能:程序对应的数据库及2个表的创建,包括,在线用户表和登陆用户表。在线用户表中的数据来自登录用户表中。ii.逻辑设计运用的组件以及组件之间的关系:运用DATASOURCE技术实现数据库的连接b)1.0层数据流图用户聊天系统用户退出系统管理员/用户登录注册退出系统useruser22.高层数据流图包含登陆成功输入注册成功聊天信息返回密码包含退出系统修改数据库登录显示返回密码验证用户名/密码插入数据用户名查找密码插入数据user5user3user41验证登录1player2注册用户名/密码3聊天室2onlineuser4找回密码5在线用户列表6聊天内容7聊天信息处理8退出聊天室c)子模块设计1,用户登录和注册模块实现1.1逻辑设计运用的组件以及组件之间的关系:用servlet和JSP组件技术实现用户的登陆功能。在用户登录时,运用session组件保存用户的登陆信息,并用loginCheckBean的javabean组件封装登录功能。Filter组件用来阻止用户的非法登录,如果用户企图不登录而直接进入聊天室错误登录方式等都将通过filter拦截。运用javamail技术实现用户的密码找回功能。1.2界面设计用户登录界面应包含用户名和密码输入框,找回密码按钮,注册按钮,重置按钮,登录按钮。各个按钮分别按内容实现各自的功能。2,聊天室模块实现2.1逻辑设计运用的组件以及组件之间的关系:运用servlet和JSP组件技术实现聊天的的信息显示功能和基本对话功能。运用EL组件技术显示用户登录时间。运用JSTL组件技术实现在线人员列表的显示和普通用户的删除。运用listener监听用户的登录情况(用户是否在线)。2.2界面设计聊天系统界面,应包含在线人员列表,信息发送框,信息发送按钮,信息发送对象框,悄悄话选项按钮,管理员实现管理功能的高级选项按钮,信息显示框。3,管理员功能模块实现3.1逻辑设计运用的组件以及组件之间的关系:运用servlet和JSP技术实现管理员的管理功能。管理员可以查看在线人员列表,在此处运用TAG组件技术实现在线人员的分页显示。3.2界面设计该页面应包含管理员实现管理的删除普通用户功能,显示所有注册用户列表,四.系统实现代码说明1.数据库连接模块1.1数据库连接:BaseConnection.javapublicBaseConnection()throwsException{try{initCtx=newInitialContext();DataSourceds=(DataSource)initCtx.Lookup(java:comp/env/jdbc/mysql/chatroom);conn=ds.getConnection();stmt=conn.createStatement();}catch(Exceptione){e.printStackTrace();}}//执行静态SQL查询语句并返回它所生成结果的对象publicResultSetexecuteQuery(Stringsql)throwsSQLException{rs=null;try{rs=stmt.executeQuery(sql);}catch(SQLExceptionex){System.out.println(Erroroccuredwhenquerydatabase:+ex);throwex;}returnrs;}//执行静态SQL更新语句并返回影响数据条数publicintexecuteUpdate(Stringsql)throwsSQLException{try{conn.setAutoCommit(false);intre=stmt.executeUpdate(sql);conn.commit();returnre;}catch(SQLExceptione){conn.rollback();System.out.println(Erroroccuredwhenupdatedatabase:+e);throwe;}}//数据库关闭操作publicbooleancloseDB()throwsException{try{if(this.rs!=null)rs.close();if(this.stmt!=null)this.stmt.close();if(this.ps!=null)this.ps.close();if(this.conn!=null)conn.close();if(this.initCtx!=null)initCtx.close();returntrue;}catch(SQLExceptione){System.out.println(Erroroccuredwhenclosedatabase:+e);throwe;}}}________________________________