基于JSP的学术交流论坛系统的设计与实现
学术交流论坛系统是按照MVC模式进行设计实现的,采用Tomcat作为后台服务器,以MySQL数据库作为数据服务器,使用SERVLET进行逻辑控制,表现层用JSP页面显示,用于在网络上为网民提供一个学术交流的场所.实现了查看、发表、删除帖子功能,论坛帖子版块控制,注册用户可以修改自己的个人信息、好友与黑名单以及用户之间发送消息,管理员可以对用户、帖子,版块、版块权限进行管理.论文从问题的提出、基本设计思想、数据的流向到具体的设计过程都做出了详细论述.
论坛;主题;回帖
The Design and Implementation of Academic Exchange BBS System Based on JSP
The BBS system in academic exchange is based on mode of MVC ,using Tomcat as the web server. The data is stored in the MYSQL database. The SERVLET realizes the logical control and the performance level demonstrated with the JSP page. The system is used to provide a place where people can exchange academic online. The system provides the function to look over, deliver and delete the information and the user registered can change their own information, add good friends and blacklist. The users also can transmit information between each other. The manager may to the user, the card, the sector and the sector jurisdiction carries on the management. The paper from the question proposed that the basic design thought that data has made the detailed elaboration flow direction to the concrete design process.
Forum; Topic; Comment
本文通过对学术交流论坛系统的设计到实现流程的详细描述,目的是设计学术交流论坛系统的结构和提出学术交流论坛系统从设计到实现中各个部分的解决方案,同时使自己在实现中学习更多新知识,更深入掌握JSP和Java语言,了解软件开发全过程,为以后的学习与工作打下坚实基础.
在学术交流论坛中,网友可以自由的提出问题也可以及时地帮助他人解决问题.网友之间的学术交流打破了空间、时间的限制.在与别人进行交流时,无须考虑自身的年龄、学历、知识、社会地位、财富、外貌、健康状况,即使交流双方素不相识,也可以亲近地交谈思想.交流双方可以处于一个平等的位置与其他人进行任何问题的探讨,这对于现有的所有其他交流方式来说是不可能的.
学术交流论坛在网上提供学术交流的场所.它用于讨论和在线聊天,利用网络实时、便捷的特点来方便人们的学术交流.通过学术交流论坛我们可以更好的传播我们的文化知识,更大程度地提高我们的能力,拓展我们的知识面.
进入二十一世纪,计算机技术迅速向着网络化和集成化方向发展.传统的单机版应用软件正逐渐退出舞台,取而代之的是支持网络和支持多种数据信息(多媒体)的新一代网络版应用软件,而目前网络版软件中似乎存在着两种不同的趋势,一种是称为客户端——服务器的C/S结构应用系统,这类软件具有结构严谨,运行效率高,服务器端压力小,安全性好的优点,被广泛运用于局域网中.而另一种,也是本文所采用的,称为浏览器——服务器的B/S结构应用系统,它的特点是在客户端采用了浏览器作为界面,其优点在于软件开发效率高,客户端不受操作平台限制、也不受地域限制,网络传输量少,即适用于局域网,更适用于Internet,而且投资小、见效快,用户可以不必进行服务器方面投资,而是去租用,甚至是免费使用ISP的服务器资源,因而受到中小型单位的青睐.
Internet起源于20世纪60年代末、70年代初,当时,美国国防部为了将军事基地内各种厂商的电脑主机互连,让它们进行数据交换以便研究工作顺利进行,于是成立了ARPA网络计划.ARPA计划尝试建设一个网络系统,它可将各种不同厂商的电脑连接起来.随着这个计划的成功,各学术单位,研究机构纷纷与ARPA计划所建立ARPANET连接.到了20世纪80年代,Internet这个名词因势产生,它代表着这十年来所构建的涵盖全球各地的网络系统[1].从1990年起,商业使用Internet在美国急速地扩大,而Internet也从原来属于少数人使用的网络系统转变为普通百姓也能够使用的网络系统.
最初的Internet资源服务停留在文本模式,1989年,量子物理实验室(CERN)的一个研究小组着手开发一种全新的Internet服务,它可以在网络上传送图片、文本、影像、声音等多媒体数据.于是Tim Burners Lee领导的小组开发出一种主从的分布式的网络服务系统,这就是WWW(World Wide Web),俗称“万维网”[1].
所谓WWW其实就是连上Web服务器访问资源,取得的内容就是所谓的“主页”(Homepage)[18].进入的网页通常不会只有一页,而是整个网站的内容. 随着网络普及,论坛深受广大网民的喜爱,同时在线技术支持也在论坛中开展起来.
参照王海明和韩瑞霞的国内BBS研究现状述评,将国内BBS研究现状可以划分为以下四个阶段:第一阶段,有关BBS自身的初步研究.包括历史和哲学问题、技术问题和应用、功用和服务以及政策法律等问题[2].第二阶段,BBS的使用和用户.包括用户的认知、感受和调查,使用主体以及如何使用,BBS提供了什么,它的教育和政治等其他用途[2].第三阶段,BBS的影响.包括它对人际关系和人们生活的改变,因之产生的一些新的社会和文化问题及其对传统媒介的冲击[2].第四阶段,BBS的改进和研究.包括如何发展利用BBS及对BBS产生的相关问题的专业深入研究和系统化、综合性分析[2].
学术交流论坛系统就是提供给注册用户的学术交流平台,会员用户可以通过Internet访问学术交流论坛,在这个平台上发表主题、阅读主题、回复主题.
系统有四种类型的操作用户:游客、会员用户、版主、管理员.每类用户有其不同的操作集,系统提供的登录页面能自动识别不同级别的用户,并提供不同的操作界面.与之相应,系统具有以下功能:用户注册、用户登录、用户注销、发表主题、浏览主题、回复主题、分页查找主题、作者查找、个人资料维护、版块管理、版主管理、会员用户管理和帖子管理,所有操作在客户端浏览器完成,而服务器端程序会按用户的请求来完成对系统数据的操作,并将结果传给Web服务器,再由Web服务器处理成HTML文件后发送到客户端浏览器.这就是所谓的B/S结构应用系统,B/S结构即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.
C/S结构,即Client/Server(客户机/服务器)结构,通过将任务合理分配到Client端和Server端,降低系统的通讯开销,可以充分利用两端硬件环境的优势.
B/S结构下,用户界面通过浏览器实现,一部分事务逻辑在前端实现,主要事务逻辑在服务器端实现,形成所谓N-Tier结构.B/S结构[18],利用了成熟的浏览器技术,结合浏览器的Script语言(JavaScript),实现了原来需要复杂专用软件才能实现的强大功能,是一种全新的软件系统构造技术.
学术交流论坛系统实际需要,系统采用B/S结构.本论文设计学术交流论坛系统,系统具备较大伸缩性,适应Web平台.另外,本系统具备较大扩展性,而Java 语言是面向对象的,面向对象编程注重程序的可扩展性,且字节码是跨平台执行的,所以本系统采用Java 语言+ JSP开发技术.
1.技术可行性分析
本系统采用三层结构,用MYSQL数据库作为后台数据库,安装使用简单;前台页面采用JSP动态页面;控制层采用SERVLET,SERVLET是Java Web开发中使用的比较热门的技术.服务器采用Tomcat服务器,它是一个开源软件.开发人员在学习了J2EE基础技术后,有能力开发.
2.经济可行性分析
经济可行性是指软件所带来的经济效益与开发设计所需要的投资费用相比较是否适当,软件是否会给使用者带来经济效益.随着计算机软件和硬件技术的飞速发展,计算机软、硬件价格下降,设计本系统所投入资金与学术论坛为网民发布、获取信息所节省的价值相比之下,经济效益可观,所以在经济上是可行的.
当前社会是网络化社会,人们通过网络上获取和发布信息交流,系统正是应这一需求而产生的,系统是网民发布主题,获取有价值学术信息的场所.所以本系统具有社会可行性.
需求分析处于软件开发过程开始阶段,它对软件开发过程和软件产品质量至关重要.需求是指用户对目标软件系统在功能、行为和性能设计约束方面的要求.在需求分析工作中,系统分析人员对用户的需求进行调查和分析,确定现有环境特征,定义目标软件特征 .需求分析工作是对应用环境及其问题进行理解和分析,对问题涉及的信息、功能及系统行为建立模型,使用户需求精确化.
1.目标
信息时代需要快速传播学术信息,局部范围的学术信息交流会减缓信息技术前进的步伐.学术交流论坛目的在于为人们提供一个共同交流、学习、倾吐心得的学术交流平台,实现来自不同地方的用户极强的学术信息互动性,用户在获得自己所需要的学术信息的同时也可以广交朋友,拓宽自己的学术视野和社交面.
2.系统描述
系统有版块,主题和回复.版块是对主题的分类,回复是在主题下发表的,是登陆用户对主题的评论.当用户进入首页时会显示论坛的所有版块及每个版块下的子版块、主题数、帖子总数和最后发表主题的用户.进入子版块之后显示子版块下的主题及该主题下的回复数、点击数和最后发表评论的用户.点击主题进入主题详细页面,显示主题内容,发表该主题的用户的用户名、积分、注册时间,该主题下的回复和发表回复的用户信息.
3.用户的特点
学术交流论坛的会员用户懂上网就可以进行学术交流.
① 版主和管理员.版主产生于会员用户,版主只需做一些简单的操作.系统的管理员的要求懂基本的数据库和网络技术使用系统的后台管理.
② 系统的维护人员具备较强的计算机专业水平,对系统的故障进行维护.
4.学术交流论坛系统的功能:
① 用户中心:用户注册、用户登录、用户注销、发表帖子、回复帖子、按条件搜索帖子、查看自己发表的帖子及查看精华帖子.
② 版主中心:发表帖子、编辑帖子、回复帖子、搜索帖子、删除帖子、帖子加精和帖子置顶.
③ 管理员中心:帖子删除、帖子置顶、设精华帖、按条件搜索帖子,对会员用户的删除、授权,对版块的权限管理,对版块的管理.
1.当会员用户进入网站首页时,会员用户可以登录.没有登录的用户只能查看主题,不能发表主题或评论.登录之后,用户就可以发表主题或回复;查看或修改自己个人信息.
2.没有注册的用户可以在登录窗口中点击注册超链接进入新用户注册页面,输入用户名、密码、密码提示问题、提示问题答案及安全邮箱,注册成为网站的会员用户.密码提示问题是为找密码设置的,当用户忘记密码后可以通过输入提示问题答案来找回密码,如果用户回答正确,系统会自动发送一封邮件到用户的安全邮箱里,提示用户修改密码.
版主作为权限最少的管理者只能对自己所管理的版面的主题进行删除、置顶,设置精华贴,屏蔽用户的回复,编辑版面说明.
管理员可以修改用户权限、管理会员用户、管理系统用户、管理版块和管理帖子.
系统采用的工具有JDK 、Tomcat、MYECLIPSE 和MYSQL.
JDK是Sun 公司Java应用程序和组件的开发环境,是编译和测试工具,提供java程序的Java虚拟机平台,是调试和运行JSP所不可缺少的工具[3].
2.Tomcat
Tomcat是开源的SERVLET和JSP容器,它是Jakarta项目的重要组成,由Apache、Sun和其他公司及个人开发[3].Tomcat内部实现了SERVLET和JSP引擎,而且扩展了一些应用服务器功能,例如JNDI、数据库连接池和用户事务处理.目前Tomcat被广泛地应用于中小规模的Java web应用中.
3.MYECLIPSE
Eclipse 是基于Java 的开放源代码的可扩展开发平台,Eclipse平台提供软件开发工具的集成服务,所有开发工具(包括JDE和PDE)都是用插件的形式提供的.这种设计使得Eclipse具有开放式可扩充的结构[4].
MYECLIPSE是在Eclipse集成开发环境中提供Web应用程序开发的插件.Eclipse软件是免费的,但MYECLIPSE不是一个完全免费的产品,需要购买.
4.MYSQL
MYSQL是开放源码SQL数据库管理系统,它由MYSQL AB公司开发、发布并支持.同时MYSQL数据库服务器具有快速、可靠和易于使用的特点[5].
采用的技术有Java、SERVLET、JSP、JavaScript、XML和MVC.
1.Java语言概述
Java编程语言是一种并发、基于类和面向对象的语言.Java编程语言与C和C++相关,但是在组织方式上有差别,Java具有C和C++遗漏的许多优点.它旨在成为一种生产语言,而不是一种研究语言,并且正是如此[6].
2.SERVLET概述
SERVLET是为了使用Web上的HTTP协议而设计的.SERVLET是在Web服务器上运行的程序, SERVLET可以处理客户请求并生成动态Web网页[3].
3.JSP概述
JSP (Java Server Pages)是由Sun 公司倡导,许多公司参与,共同建立的一种动态网页技术标准,JSP技术是在SERVLET技术基础上发展起来的[3].
4.JavaScript概述
JavaScript是基于对象(Object)和事件驱动(Event Driver)的脚本语言[3].
JavaScript是一种简洁的面向对象的描述语言,是专门用来开发Internet客户端和服务器端的应用程序,它可以被轻易的嵌入到HTML文件.使用JavaScript的浏览器可以回应使用者的需求事件而不用通过网络来回传数据,这样,使用者的数据可以直接被客户端应用程序处理,它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择
5.XML概述
1998年2月W3C正式推出XML(extensible Markup Language)后,XML迅速地在广大的设计人员中传播.随着Internet发展,HTML对网络设计要求显露出疲态.XML在这种大环境下孕育而生.它是一种允许用户对自己的标记语言进行定义的源语言[3].
6.MVC模式概述
M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式[3].
模型-视图-控制器(Model-View-Controll)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种设计模式.它被推荐为J2EE平台的设计模式
MVC架构模式关系图如下图2.1:
View视图负责提供可交互的用户界面和向用户显示模型数据.Model模型负责封装应用程序的内部状态和管理应用程序的业务逻.Controller控制器负责与用户进行交互.接受用户请求、调用模型处理和选择响应的视图.
数据流图即DFD(Data Flow Diagram)是分析系统数据流程的图形,让用户理解系统的功能、输入、输出和数据存储.系统的第一层数据流图如图2.2.
用户注册,校验用户信息的有效性,校验通过的将信息存入数据库,提示通知用户.
用户登录时提供用户名和密码,如果密码和用户名校验不一致的时候,在页面提示密码或用户不存在.登录成功则通知用户.
注销登录时要清除服务器端用于保存用户信息的session,并跳转到登陆页面.
发表帖子时先校验为非游客用户才能在帖子采集页输入内容来更新系统数据.
搜索帖子根据发表时间、精华帖和作者来查看主帖的点击率、作者和主题名.
首页显示版块信息,点击子版块进入显示主题列表页面,点击主题显示出回帖所属的主题信息、回帖的作者信息和回帖内容.在回帖信息采集区域书写信息进行发布回帖.
管理会员用户,对会员用户进行修改、删除、添加用户和对用户锁操作的功能;管理帖子信息包含主题贴信息管理和用户回贴信息管理.主帖管理页面中有删除主帖和编辑主帖功能.用户回贴信息管理有删除回贴和编辑回贴功能;管理版块信息有删除版块、添加主版块和编辑版块顺序;管理系统用户有修改用户信息、删除用户和添加用户功能.
用例是系统和外部的参与者(actor)交互的动作序列的说明,是对一组动作序列的抽象描述,系统执行这些动作序列,产生相应的结果反馈给参与者或作为其他用例的参数.在UML中.用例用一个椭圆表示,用例名用动宾结构或主谓结构命名.参与者是指用户在系统中的扮演的角色,其图形化表示是一个小人.用例图如图2.3所示.
系统用例有用户注册、登录、注销、浏览主题、发表主题、发表回复、搜索帖子、修改帖子、删除帖子和查看精华帖;管理员管理主题、板块、会员用户和系统用户.
系统分前台和后台模块,功能模块图.
系统的功能模块有游客注册登录、会员发帖回帖、浏览帖子、版块管理、帖子管理和会员管理.
前台模块面向版主、用户和游客,提供注册帐号、用户登录、用户注销、浏览文章、发表新主题、回复主题、修改帖子、删除帖子、搜索帖子、查看和修改个人信息功能.如图3.2.
后台模块的使用对象是管理员,后台功能包括管理用户、管理版块、管理主题和版块权限管理.后台功能模块如图3.3.
后台的具体功能有增加版块、查询版块、删除版块、修改用户、删除用户、删除主题、修改主题、置顶帖子、加精帖子、增加版主和删除版主.
系统抽象出来的数据结构有:用户信息表(users)、主板块信息表(board)、子版块信息表(subboard)、主题帖信息表(topic)、回帖信息表(reply)、管理员信息表(admin)和版主信息表(editionmaster).根据需求分析,设计如下表:
1.用户信息表:用户编号、用户姓名、用户真实姓名、用户密码、用户性别、用户Email、生日、OICQ、积分、状态、用户类型(普通用户,版主)、地址.
2.主题帖信息表:板块编码、板块名称、版块顺序.
3.子版块信息表:子版块编号、子版块名称、子版块描述、子版块主题帖数、子版块回帖数、子版块每页显示主题数、主题下的每页回帖显示数、新主题分、回帖分、顺序、建板时间.
4.主题帖信息表:主题帖编号、主题帖标题、主题帖内容、置顶标志、加精标志、点击率、发布时间.
5.回帖信息表:回帖编号、回帖主题、回帖内容、屏蔽标志、回帖时间.
6.管理员信息表:管理员编号、帐号、密码.
7.版主信息表:版主编号、子版编号、用户编号、授予时间.
下面描述的是表结构,其中0代表否,-1代表是.
用户信息表(users),该表结构如表3.1.
表3.1 用户表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
userId |
int |
11 |
0 |
-1 |
用户编号 |
userName |
varchar |
32 |
-1 |
0 |
用户名 |
userPass |
varchar |
32 |
-1 |
0 |
密码 |
realityName |
varchar |
32 |
-1 |
0 |
用户真实名 |
sex |
varchar |
10 |
-1 |
0 |
性别 |
|
varchar |
50 |
-1 |
0 |
用户邮件 |
OICQ |
varchar |
15 |
-1 |
0 |
用户QQ |
birthday |
varchar |
20 |
-1 |
0 |
用户生日 |
address |
varchar |
100 |
-1 |
0 |
用户所在地 |
ceat |
int |
11 |
-1 |
0 |
用户积分 |
fettle |
int |
11 |
-1 |
0 |
状态 |
type |
int |
11 |
-1 |
0 |
用户类型 |
registerT |
varchar |
20 |
-1 |
0 |
注册时间 |
主板块信息表(board),字段如表3.2.
表3..2 主板块信息表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
|
boardId |
int |
11 |
0 |
-1 |
板块编码 |
|
boardN |
varchar |
200 |
-1 |
0 |
板块名称 |
|
boardOrderN |
int |
11 |
-1 |
0 |
版块顺序 |
子版块信息(subboard),字段如表3.3.
表3.3 子版块信息表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
subBoardId |
int |
11 |
0 |
-1 |
子版块编号 |
boardId |
int |
11 |
-1 |
0 |
板块编码 |
subBoardN |
varchar |
200 |
-1 |
0 |
子版块名称 |
subBoardD |
varchar |
200 |
-1 |
0 |
子版块描述 |
topicNumb |
int |
11 |
-1 |
0 |
子版块主帖数 |
replyNumb |
int |
11 |
-1 |
0 |
子版块回帖数 |
rowsTopicP |
int |
11 |
-1 |
0 |
页显示主题数 |
rowsReplyP |
int |
11 |
-1 |
0 |
页显示回帖数 |
topicPoint |
int |
11 |
-1 |
0 |
新主题分 |
replyPoint |
int |
11 |
-1 |
0 |
回帖分 |
subBoardO |
int |
11 |
-1 |
0 |
顺序 |
creatTime |
varchar |
30 |
-1 |
0 |
建板时间 |
主题帖信息表(topic),字段如表3.4.
表3.4 主题帖信息表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
|
topicId |
int |
11 |
0 |
-1 |
主帖编号 |
|
subBoardId |
int |
11 |
-1 |
0 |
子版块编号 |
|
userId |
int |
11 |
-1 |
0 |
用户编号 |
|
topicTitle |
varchar |
200 |
-1 |
0 |
主帖标题 |
|
topicContent |
varchar |
250 |
-1 |
0 |
主帖内容 |
|
topSign |
int |
11 |
-1 |
0 |
置顶标志 |
|
distillateSign |
int |
11 |
-1 |
0 |
加精标志 |
|
dotNumber |
int |
11 |
-1 |
0 |
点击率 |
|
publishTime |
varchar |
20 |
-1 |
0 |
发布时间 |
回帖信息表(reply),字段如表3.5所示.
表3.5 回帖信息表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
replyId |
int |
11 |
0 |
-1 |
回帖编号 |
topicId |
int |
11 |
-1 |
0 |
主题编号 |
userId |
int |
11 |
-1 |
0 |
用户编号 |
replyTitle |
varchar |
200 |
-1 |
0 |
回帖主题 |
replyContent |
varchar |
250 |
-1 |
0 |
回帖内容 |
screenSign |
int |
11 |
-1 |
0 |
屏蔽标志 |
replyTime |
varchar |
20 |
-1 |
0 |
回帖时间 |
管理员信息表(admin),字段如表3.6所示.
表3.6 管理员信息表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
userId |
int |
11 |
0 |
-1 |
管理员编号 |
userName |
varchar |
32 |
-1 |
0 |
管理员名称 |
userPass |
varchar |
32 |
-1 |
0 |
密码 |
版主信息表(editionmaster),字段如表3.7所示.
表3.7 版主信息表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
editionMasterId |
int |
11 |
0 |
-1 |
版主编号 |
subBoardId |
int |
11 |
-1 |
0 |
子版编号 |
userId |
int |
11 |
-1 |
0 |
用户编号 |
accreditTime |
varchar |
20 |
-1 |
0 |
授予时间 |
根据以上的分析建立以下关系的数据库表.
1.用户与版主的关系,一个用户可以充当多个版主,而一个版快只允许出现一个版主.这表明用户与版主之间存在着一对多的联系.
2.用户与主题帖的关系,一个用户可以发多个主题帖,但是一个主题帖只能是一个用户发表.这表明用户与主题帖之间存在着一对多的联系.
3.用户和回帖关系,一个用户可以发回多个帖,但是一个帖子只能由一个用户来发表.这表明用户与回帖之间存在着一对多的联系.
4.主题帖和回帖关系,一个主题帖可以有多个回帖,但是一个回帖只属于一个主题贴.这表明主题帖与回帖之间存在着一对多的联系.
5.主版块和分版块的关系,一个主版块下可以有多个子版块,但是一个子版块只属于一个主版块.这表明主版块与分版块之间存在着一对多的联系.
根据以上描述得出实体关系图,如图3.4所示.
前台模块的功能,分为用户注册、用户登录、用户注销、修改个人信息、查看版面、查看主题、查看回复、发表主题和发表回帖.由此设计的前台主页如图4.1所示.
用户分为版主、管理员、会员用户.版主的权限用于维护自己版面的主题,包括删除主题、将主题置顶、设置精华帖;管理员的功能是会员用户管理、版块信息管理、帖子信息管理和系统用户管理.具体有删除用户,修改用户权限、增加版块、删除版块、查询版块、删除主题、修改主题属性、新增功能权限、查询功能权限、删除功能权限、新增版块权限、查询版块权限、删除版块权限.管理员不能删除系统内置管理员.系统内置管理员具有网站的一切功能.
管理员通过admin.jsp页面登录到主页,主页上显示后台管理相应的超链接,在管理页面有会员用户管理、版块信息管理、帖子信息管理和系统用户管理.由此设计的后台主页如图4.2所示.
1.软件环境
操作系统是WindowsXP Professional或以上版本;数据库用MySQL Server 5.1或以上版本,JDK1.5或以上版本,Tomcat6.0或以上版本.
2.硬件环境
内存至少为1GM;CPU要求1GHZ以上;硬盘容量40G以上.
3.安装路径
安装MySQL数据库后,执行 sql脚本;安装JDK再安装Tomcat,并将bbs.war包放在Tomcat的webapp目录;启动Tomcat,在浏览器输入http://localhost:8080/MyBBS/访问学术交流论坛的首页.
以登陆流程为例来介绍系统实现的整体架构.登陆流程图如图5.1所示..
View层的页面是Login.jsp和success.jsp.Controller层的MVC包的ControllerServlet.java、IAction.java和ParseConfiguration.java来解析请求和重定向到页面.
Model层的Web.action包的DoLogin.java等待request请求到达后解析封装请求参数;Web.from包的LoginUserBean.java封装数据给 Dologin.java使用;Biz包有FrontBiz.java接口,Biz.impl包的FrontBizImpl.java接受action 提交的封装数据.,biz 进行数据处理前把数据交给 dao 来处理;Dao包有UserDao.java接口,Dao.impl包的UserDaoJdbcImpl.java实现类和BaseDao.java接受 biz 的数据与后台数据库交互.并返回查询结果给biz进行检查;Factory包的BizFactory.java在action 与biz 交互时,在action中生产 biz 层对象;DaoFactory.java在biz 和dao 交互时,在biz层中生产 dao层对象,来降低高层与基础层的偶合度.;在src 目录的配置文件action-config.xml来配置Action和视图跳转的对应关系;配置文件biz-config.xml和配置文件dao-config.xml用来配置对象之间的依赖关系.
系统采用JSP+MVC架构,用JDBC连接数据库,在pache-tomcat-6.0.36\conf目录中的context.xml配置JNDI,连接数据库的基本类为BaseDao.java.
1. BaseDao 类
public class BaseDao {
private static DataSource ds = null;
private static DataSource getDataSource() {
if (ds == null) {
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext
.lookup("java:/comp/env");
ds = (DataSource) envContext.lookup("jdbc/myblog");
} catch (NamingException e) {
e.printStackTrace();
}
}
return ds;
}
protected List findList(String sqlString, Class clazz) {
List beans = null;
try {
QueryRunner qr = new QueryRunner(getDataSource());
beans = (List) qr.query(sqlString, new BeanListHandler(clazz));
} catch (SQLException e) {
e.printStackTrace();
}
return beans;
}
protected List findTotalList(String sqlString){
List beans=null;
try{
QueryRunner qr=new QueryRunner(getDataSource());
beans=(List)qr.query(sqlString,new MapListHandler());
}catch(SQLException e){
e.printStackTrace();
}
return beans;
}
protected Object findObject(String sqlString, Class clazz) {
Object object = null;
try {
QueryRunner qr = new QueryRunner(getDataSource());
object = qr.query(sqlString, new BeanHandler(clazz));
} catch (SQLException e) {
e.printStackTrace();
}
return object;
}
protected int update(String sqlString) {
int rows = 0;
try {
QueryRunner qr = new QueryRunner(getDataSource());
rows = qr.update(sqlString);
} catch (SQLException e) {
e.printStackTrace();
}
return rows;
}
}
在Dao中实现对数据表的增加、删除、查询、修改.Dao不进行逻辑操作.JSP页面的请求交由对应的Action进行逻辑操作,当其要对数据库进行操作时,将被操作的对象的相关参数传给Dao.
1. 用户注册:在register.jsp页面输入用户名,密码,密码提示问题、提示问题答案、安全邮箱信息提交数据到DoFrontUser.java中进行处理,在DoFrontUser.java中,如果用户名已经存在则返回注册页面,否则提示用户注册成功,并自动登录到首页.由此设计的用户注册时序图,如图5.2所示.
论坛平台对用户注册请求进行图像验证码和注册信息的有效性校验通过后,生成开户基本信息并通知用户.由时序图设计的用户注册页面如图5.3所示.
2. 用户登录:用户在登录页面输入用户名和密码登录,系统将用户名和密码提交到DoLogin.java的doIn ()方法,将提交数据转交给Dao查询,如果有正确的记录则登录成功,将用户信息保存在Session并跳转到主页,否则返回登录页面,通知用户登录失败. 由此设计的登陆时序图如图5.4所示.
平台对用户登录请求进行图像验证码和登录信息的有效性校验通过后跳转到主页.由时序图设计的登陆页面如图5.5所示.
3. 用户注销请求提交到DoLogin.java的doOut 方法修改用户离线时间、设置Session失效和返回到主页.由此设计的用户注销时序图如图5.6所示.
平台对注销请求进行修改登录记录信息、设置session失效后跳转到主页.由时序图设计的用户注销页面图如图5.7所示.
查看版面:首页显示版块信息,点击子版块显示主题列表,点击主题进入主题页.
访问论坛时,index.jsp用<jsp:forward page="${ctx }/doIndexDisplay.action" /> 将请求转给doIndexDisplay.java处理.doIndexDisplay. java从数据库取出所有版块信息及每个版块的最新主题保存在JSP的HttpServletRequest对象,数据由/front/index.jsp页面显示.
doIndexDisplay.java类.
public class DoIndexDisplay implements IAction {
FrontBiz frontBiz = (FrontBiz)BizFactory.instance().getBiz("frontBiz");
public String excute(HttpServletRequest request) {
Map<String,Object> map = frontBiz.displayIndex();
request.setAttribute("boards", map.get("boards"));//所有的根版本
for (BoardBean boardBean : (List<BoardBean>)map.get("boards")) {
request.setAttribute(String.valueOf(boardBean.getBoardId()), map.get("sub"+boardBean.getBoardId()));//取出对应主版的所有的子版
}
request.setAttribute("topicTotalNumber",map.get("topicTotalNumber"));//主帖数
request.setAttribute("replyTotalNumber",map.get("replyTotalNumber"));//回帖数
request.setAttribute("userTotalNumber", map.get("userTotalNumber"));//用户数
request.setAttribute("newUser", map.get("newUser"));//新会员信息
request.setAttribute("lastReplys", map.get("lastReplys"));//最后回复信息
request.setAttribute("editions", map.get("editions"));//管理员信息
request.setAttribute("news", map.get("news"));//设置新闻
return "display";
}
}
1. 查看主题:主页上点击版块名时,将请求交给DoDisplaySubBoardInfo.java处理;DoDisplaySubBoardInfo.java取出模块下所有主题信息和最后发表回复的作者信息存入request对象,.由子版块页面显示主题列表. 由此设计的查看主题时序图如图5.8所示.
平台获取主题信息由子版块页面显示主题列表.由查看主题时序图设计的主题列表显示页图如图5.9所示.
2. 查看回贴:在主题显示页面点击主题产生获取主题信息动作,系统将动作交给FrontReplyAction.java处理,FrontReplyAction.java将请求交给DAO层,从DAO取出回帖信息和回帖的主题信息.由此设计的查看回帖时序图如图5.10所示.
平台从DAO取出回帖信息和回帖的主题帖信息并显示到页面.由时序图设计的回帖内容页面如图5.11所示.
3. 回帖:从回帖信息采集区域将回帖信息提交到后台进行发布回帖的前期处理并将处理结果的反馈到页面.由此设计的发表回帖时序图如图5.12所示.
平台进行发布回帖的前期处理并将处理结果的反馈到页面.由时序图设计的回帖的页面如图5.13所示.
4. 编辑回帖.回帖更新前获取原有帖子信息,.用户可以编辑回帖的标题、内容和帖子状态,回帖修改以后返回修改结果.由此设计的编辑回帖的时序图5.15所示.
平台获取原有帖子信息到编辑页面,用户可以编辑回帖的标题、内容和帖子状态,回帖修改以后通知用户.根据编辑回帖的时序图设计的编辑回帖的页面如图5.15所示.
5. 发表主题:主题列表页和回帖详细页可以发表主题,点击链接跳转到主题信息采集页,该页将主题信息提交到FrontTopicAction.java进行新帖前期处理并将结果反馈到页面.由此设计的发表主题时序图如图5.16所示.
1. 主题采集页如图5.17
平台进行新帖前期处理和更新版块信息和主题帖信息并将结果反馈到页面.根据发表主题时序图设计的主题采集页面如图5.17所示.
6. 版主管理主题的功能有移除、置顶、加精、编辑主题帖和删除主题帖.由此设计的前台版主管理主题时序图如图5.18所示.
平台在进行权限校验通过后,对.主题帖进行置顶主题帖、加精主题帖、编辑主题帖和删除主题帖操作,并将操作结果通知用户.根据前台版主管理主题时序图设计的前台版主功能页面如图5.19所示.
1. 后台主版块信息处理:管理员点击主版块信息管理链接,系统将请求转给BackBoardAction.java的doDisplay方法,doDisplay方法取出所有的版块信息,跳转到displayBoard.jsp页分页显示所有的版块信息.
A. 管理员在页面点击删除,将版块ID提交到BackBoardAction.java的doDelete方法来将版块及该版块下的主题删除,级联删除主题的回帖.
B. 管理员点击添加主版块请求提交给BackBoardAction.java的add方法来校验权限,权限合法跳转到版块信息采集页,提交板块名称信息到后台BackBoardAction.java的addAfter方法来添加版块信息,反馈结果给管理员.
C. 管理员编辑主版块时将版块ID提交到BackBoardAction.java的doBeforeModify方法来查询原有版块信息显示到modifyBoard.jsp,再将modifyBoard.jsp页面的修改信息提交到BackBoardAction.java的doAfterModify方法进行主版块信息更新;;
D. 管理员在页面点击上移、下移链接,将版块ID提交到后台,在BackBoardAction.java的doDown和doUp方法分别调整版块显示的上下顺序.
根据上述设计的主版块信息管理时序图如图5.20所示
平台在进行权限校验通过后,调整主版块在前台主页显示的上下顺序、编辑主版块、添加主版块和删除主版块操作,并将操作结果通知用户.根据主版块信息管理时序图设计的主版块信息管理页面如图5.21所示.
2. 后台子主版快信息处理:管理员点击子主版块信息管理,将请求提交给BackSubBoardAction.java的doGuide方法获取主版块信息并显示到subBoardGuide.jsp页面,以便管理员对相应主版块的子版块操作.管理员选择对应的主版块后进入子版块信息管理页面.由此设计的子版块信息管理时序图如图5.22所示.
平台在进行权限校验通过后,调整子版块在前台主页显示的上下顺序、编辑子版块、添加子版块和删除子版块操作,并将操作结果通知用户.根据子版块信息管理时序图设计的子版块信息管理页面如图5.23所示.
帖子信息管理包含主题贴信息管理、用户回贴信息管理.
1. 主贴信息管理:点击主贴信息管理跳转到 displayTopicGuide.jsp页面来根据主版块和子版块组合条件检索主帖.主帖管理页面中有删除主帖和编辑主帖功能.编辑主帖有置顶和加精功能.采用把对应属性值改为1的方式完成.删除主题是将主题id传给BackTopicAction.java的DoDelete方法先删除主帖的回帖,再调用TopicDao的deleteTopic(int id)删除主帖.由此设计的主题管理时序图如图5.24所示.
.
平台在进行权限校验通过后,调整子版块在前台主页显示的上下顺序、编辑子版块、添加子版块和删除子版块操作,并将操作结果通知用户.根据主题管理时序图设计的主帖管理页面如图5.25所示.
系统用户管理的页面中有修改用户信息、删除用户和添加用户功能.由此设计的系统用户管理时序图如图5.26所示.
平台在进行权限校验通过后,查找系统用户显示与页面,进行修改用户信息、删除用户和添加用户操作,并将操作结果通知用户.根据系统用户管理时序图设计的系统用户管理页面如图5.27所示.
会员用户管理有修改、删除、添加用户和对用户锁操作的功能.这里介绍锁的实现,只需采用一个标志字段即可.代码如下:
//解锁一个用户
public String doUnLock(HttpServletRequest request)throws ServletException, IOException {
int userId=0;
try{
userId = Integer.valueOf(request.getParameter("userId"));
} catch (Exception e) {
e.printStackTrace();
return "error";
}
UserBean userBean = backBiz.findUserBean(userId);
ModifyUserFormBean modifyUserFormBean = null;
if(userBean!=null){
modifyUserFormBean = new ModifyUserFormBean();
modifyUserFormBean.setUserId(userBean.getUserId());
modifyUserFormBean.setUserName(userBean.getUserName());
modifyUserFormBean.setUserPass1(userBean.getUserPass());
modifyUserFormBean.setUserPass2(userBean.getUserPass());
modifyUserFormBean.setRealityName(userBean.getRealityName());
modifyUserFormBean.setSex(userBean.getSex());
modifyUserFormBean.setEmail(userBean.getEmail());
modifyUserFormBean.setOicq(userBean.getOICQ());
modifyUserFormBean.setBirthday(userBean.getBirthday());
modifyUserFormBean.setAddress(userBean.getAddress());
modifyUserFormBean.setCeat(userBean.getCeat());
modifyUserFormBean.setFettle(1); //设置为 1 则锁定状态失效
modifyUserFormBean.setType(userBean.getType());
modifyUserFormBean.setRegisterTime(userBean.getRegisterTime());
}
if(!backBiz.updateUserInfo(modifyUserFormBean)){
request.setAttribute("msg", "错误,解锁用户出现数据库错误!");
}else{
request.setAttribute("msg", "恭喜,用户已经正常解锁!");
}
return this.doAll(request);
}
//锁定一个用户
public String doLock(HttpServletRequest request)throws ServletException, IOException {
int userId=0;
try{
userId = Integer.valueOf(request.getParameter("userId"));
} catch (Exception e) {
e.printStackTrace();
return "error";
}
UserBean userBean = backBiz.findUserBean(userId);
if(userBean.getType()==2){
request.setAttribute("msg","版主不允许锁定!");
return this.doAll(request);
}
ModifyUserFormBean modifyUserFormBean = null;
if(userBean!=null){
modifyUserFormBean = new ModifyUserFormBean();
modifyUserFormBean.setUserId(userBean.getUserId());
modifyUserFormBean.setUserName(userBean.getUserName());
modifyUserFormBean.setUserPass1(userBean.getUserPass());
modifyUserFormBean.setUserPass2(userBean.getUserPass());
modifyUserFormBean.setRealityName(userBean.getRealityName());
modifyUserFormBean.setSex(userBean.getSex());
modifyUserFormBean.setEmail(userBean.getEmail());
modifyUserFormBean.setOicq(userBean.getOICQ());
modifyUserFormBean.setBirthday(userBean.getBirthday());
modifyUserFormBean.setAddress(userBean.getAddress());
modifyUserFormBean.setCeat(userBean.getCeat());
modifyUserFormBean.setFettle(0); //设置为 0 则锁定该用户
modifyUserFormBean.setType(userBean.getType());
modifyUserFormBean.setRegisterTime(userBean.getRegisterTime());
}
if(!backBiz.updateUserInfo(modifyUserFormBean)){
request.setAttribute("msg", "错误,锁定用户出现数据库错误!");
}else{
request.setAttribute("msg", "恭喜,已经正常锁定用户!");
}
return this.doAll(request);
}
根据上述分析设计的会员用户管理时序图如图5.28所示
平台在进行权限校验通过后,查找会员用户显示与页面,进行修改、删除、添加用户和锁住用户操作,并将操作结果通知用户.根据会员用户管理时序图设计的会员用户管理页面如图5.29所示.
[1] 谢希仁.计算机网络[M].北京:电子工业出版社,2008.
[2] 王海明,韩瑞霞.国内BBS现状研究述评[J].兰州石化职业技术学院学报,2004,(4):25.
[3] 张娜,陈宁,金焱,姜仲.java web开发技术教程[M].北京:清华大学出版社,2011.
[4] 刘亚滨,杨红.精通Eclipse[M].北京:电子工业出版社,2004.
[5] 任永功,王政军. 软件技术与数据库[J]. 计算机工程,2006,32(5):60-62,134.
[6] 阎宏.JAVA与模式[M].北京:电子工业出版社,2002.
[7] 陈晋.论虚拟图书馆的个性化服务[J].情报探索,2003,(1):6-7.
[8] 李媛,刘涤尘.一个使用JavaBeans连接数据库的JSP应用[J]. 控制工程,2005,12(1):77-80.
[9] 程凯.JSP中文问题及一套整体解决方案[J].许昌学院学报,2006,25(5):77-80.
[10] 李兴锋,王移芝.基于JSP的Web动态数据库交互技术的探讨[J].计算机应用与软件,2005,22(4):26-27.
[11] Tsui,FrankF.JSP EM DASH A RESEARCH SIGNAL PROCESSOR IN JOSEPHSON TECHNOLOGY[C]. IBM Journal of Research and Development,1980,24(2):243-252.
[12] 孙敏.JSP连接数据库方法探讨[J].电脑知识与技术,2005,3:21-22.
[13] 姜秀宇,曹蕴.基于JSP模式的在线考试系统的应用分析[J].电脑知识与技术(学术交流), 2006,(11):122-146.
[14] 王正成.基于J2EE技术的企业管理信息系统设计[J].科技进步与对策,2004,21(10):152-154.
[15] 屈霞.基于JSP的数据库应用程序安全访问控制设计[J].电脑开发与应用,2005,18(6):15-l6.
[16] 姚春龙.数据库系统基础教程[M].北京:航空航天大学出版社,2003.
[17] Javey.S.CONCEPT OF ‘CORRESPONDENCE‘ IN JSP[C].Proceedings of the Hawaii International Conference on System Science,1987,2:14-22.
[18] Markus Aleksy,Axel Korthaus,Martin Schader.Use Java and the CORBA realization distribute type system[J].Journal of Pingxiang College,2005,(4):104-105.
[19] 史志国.基于JSP的教务管理系统设计[J].长春工业大学学报(自然科学版),2008,29(3):306-310.
基于JSP的学术交流论坛系统的设计与实现,布布扣,bubuko.com
原文地址:http://blog.csdn.net/z929118967/article/details/30467047