基于JSP的学术交流论坛系统的设计与实现
版权声明:本文为[博主](https://zhangkn.github.io)原创文章。未经博主同意不得转载。
https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ https://blog.csdn.net/u011018979/article/details/30467047
# [新的博客](https://zhangkn.github.io/)
[个人技术站](https://zhangkn.github.io/)https://zhangkn.github.io/
世纪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事实上就是连上Webserver訪问资源,取得的内容就是所谓的“主页”(Homepage)[18].进入的网页通常不会仅仅有一页,而是整个站点的内容. 随着网络普及。论坛深受广大网民的喜爱。同一时候在线技术支持也在论坛中开展起来.
參照王海明和韩瑞霞的国内BBS研究现状述评,将国内BBS研究现状能够划分为下面四个阶段:第一阶段,有关BBS自身的初步研究.包含历史和哲学问题、技术问题和应用、功用和服务以及政策法律等问题[2].第二阶段,BBS的使用和用户.包含用户的认知、感受和调查。使用主体以及怎样使用,BBS提供了什么,它的教育和政治等其它用途[2].第三阶段,BBS的影响.包含它对人际关系和人们生活的改变。因之产生的一些新的社会和文化问题及其对传统媒介的冲击[2].第四阶段,BBS的改进和研究.包含怎样发展利用BBS及对BBS产生的相关问题的专业深入研究和系统化、综合性分析[2].
1.3 本文的工作
学术交流论坛系统就是提供给注冊用户的学术交流平台。会员用户能够通过Internet訪问学术交流论坛,在这个平台上发表主题、阅读主题、回复主题.
系统有四种类型的操作用户:游客、会员用户、版主、管理员.每类用户有其不同的操作集,系统提供的登录页面能自己主动识别不同级别的用户。并提供不同的操作界面.与之相应。系统具有下面功能:用户注冊、用户登录、用户注销、发表主题、浏览主题、回复主题、分页查找主题、作者查找、个人资料维护、版块管理、版主管理、会员用户管理和帖子管理。全部操作在client浏览器完毕。而server端程序会按用户的请求来完毕对系统数据的操作。并将结果传给Webserver,再由Webserver处理成HTML文件后发送到client浏览器.这就是所谓的B/S结构应用系统。B/S结构即Browser/Server(浏览器/server)结构。是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.
C/S结构,即Client/Server(客户机/server)结构,通过将任务合理分配到Client端和Server端,减少系统的通讯开销,能够充分利用两端硬件环境的优势.
B/S结构下。用户界面通过浏览器实现,一部分事务逻辑在前端实现。主要事务逻辑在server端实现,形成所谓N-Tier结构.B/S结构[18]。利用了成熟的浏览器技术。结合浏览器的Script语言(JavaScript),实现了原来须要复杂专用软件才干实现的强大功能。是一种全新的软件系统构造技术.
学术交流论坛系统实际须要,系统採用B/S结构.本论文设计学术交流论坛系统,系统具备较大伸缩性,适应Web平台.另外,本系统具备较大扩展性,而Java 语言是面向对象的,面向对象编程注重程序的可扩展性,且字节码是跨平台执行的,所以本系统採用Java 语言+ JSP开发技术.
2 系统分析
2.1 可行性分析
1.技术可行性分析
本系统採用三层结构。用MYSQL数据库作为后台数据库,安装使用简单;前台页面採用JSP动态页面;控制层採用SERVLET,SERVLET是Java Web开发中使用的比較热门的技术.server採用Tomcatserver。它是一个开源软件.开发者在学习了J2EE基础技术后,有能力开发.
2.经济可行性分析
经济可行性是指软件所带来的经济效益与开发设计所须要的投资费用相比較是否适当,软件是否会给使用者带来经济效益.随着计算机软件和硬件技术的飞速发展,计算机软、硬件价格下降,设计本系统所投入资金与学术论坛为网民公布、获取信息所节省的价值相比之下,经济效益可观。所以在经济上是可行的.
3.社会可行性分析
当前社会是网络化社会,人们通过网络上获取和公布信息交流,系统正是应这一需求而产生的,系统是网民公布主题,获取有价值学术信息的场所.所以本系统具有社会可行性.
2.2 需求分析
2.2.1 需求分析概述
需求分析处于软件开发过程開始阶段。它对软件开发过程和软件产品质量至关重要.需求是指用户对目标软件系统在功能、行为和性能设计约束方面的要求.在需求分析工作中,系统分析人员对用户的需求进行调查和分析。确定现有环境特征,定义目标软件特征 .需求分析工作是相应用环境及其问题进行理解和分析,对问题涉及的信息、功能及系统行为建立模型,使用户需求精确化.
2.2.2 任务概述
1.目标
信息时代须要高速传播学术信息。局部范围的学术信息交流会减缓信息技术前进的步伐.学术交流论坛目的在于为人们提供一个共同交流、学习、倾吐心得的学术交流平台,实现来自不同地方的用户极强的学术信息互动性,用户在获得自己所须要的学术信息的同一时候也能够广交朋友,拓宽自己的学术视野和社交面.
2.系统描写叙述
系统有版块,主题和回复.版块是对主题的分类,回复是在主题下发表的,是登陆用户对主题的评论.当用户进入首页时会显示论坛的全部版块及每一个版块下的子版块、主题数、帖子总数和最后发表主题的用户.进入子版块之后显示子版块下的主题及该主题下的回复数、PV数和最后发表评论的用户.点击主题进入主题具体页面,显示主题内容,发表该主题的用户的username、积分、注冊时间,该主题下的回复和发表回复的用户信息.
3.用户的特点
学术交流论坛的会员用户懂上网就能够进行学术交流.
① 版主和管理员.版主产生于会员用户,版主仅仅需做一些简单的操作.系统的管理员的要求懂主要的数据库和网络技术使用系统的后台管理.
② 系统的维护人员具备较强的计算机专业水平,对系统的故障进行维护.
4.学术交流论坛系统的功能:
① 用户中心:用户注冊、用户登录、用户注销、发表帖子、回复帖子、按条件搜索帖子、查看自己发表的帖子及查看精华帖子.
② 版主中心:发表帖子、编辑帖子、回复帖子、搜索帖子、删除帖子、帖子加精和帖子置顶.
③ 管理员中心:帖子删除、帖子置顶、设精华帖、按条件搜索帖子。对会员用户的删除、授权,对版块的权限管理,对版块的管理.
2.2.3 会员用户
1.当会员用户进入站点首页时。会员用户能够登录.没有登录的用户仅仅能查看主题。不能发表主题或评论.登录之后,用户就能够发表主题或回复;查看或改动自己个人信息.
2.没有注冊的用户能够在登录窗体中点击注冊超链接进入新用户注冊页面,输入username、password、password提示问题、提示问题答案及安全邮箱,注冊成为站点的会员用户.password提示问题是为找password设置的,当用户忘记password后能够通过输入提示问题答案来找回password,假设用户回答正确,系统会自己主动发送一封邮件到用户的安全邮箱里,提示用户改动password.
2.2.4 版主
版主作为权限最少的管理者仅仅能对自己所管理的版面的主题进行删除、置顶。设置精华贴,屏蔽用户的回复,编辑版面说明.
2.2.5 管理员
管理员能够改动用户权限、管理会员用户、管理系统用户、管理版块和管理帖子.
2.3 开发工具以及相关技术简单介绍
2.3.1 相关工具简单介绍
系统採用的工具有JDK 、Tomcat、MYECLIPSE 和MYSQL.
JDK是Sun 公司Java应用程序和组件的开发环境,是编译和測试工具,提供java程序的Java虚拟机平台。是调试和执行JSP所必不可少的工具[3].
2.Tomcat
Tomcat是开源的SERVLET和JSP容器,它是Jakarta项目的重要组成,由Apache、Sun和其它公司及个人开发[3].Tomcat内部实现了SERVLET和JSP引擎,并且扩展了一些应用server功能,比如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数据库server具有高速、可靠和易于使用的特点[5].
2.3.2 相关技术概述
採用的技术有Java、SERVLET、JSP、JavaScript、XML和MVC.
1.Java语言概述
Java编程语言是一种并发、基于类和面向对象的语言.Java编程语言与C和C++相关,可是在组织方式上有区别,Java具有C和C++遗漏的很多长处.它旨在成为一种生产语言,而不是一种研究语言,并且正是如此[6].
2.SERVLET概述
SERVLET是为了使用Web上的HTTP协议而设计的.SERVLET是在Webserver上执行的程序, SERVLET能够处理客户请求并生成动态Web网页[3].
3.JSP概述
JSP (Java Server Pages)是由Sun 公司倡导,很多公司參与,共同建立的一种动态网页技术标准。JSP技术是在SERVLET技术基础上发展起来的[3].
4.JavaScript概述
JavaScript是基于对象(Object)和事件驱动(Event Driver)的脚本语言[3].
JavaScript是一种简洁的面向对象的描写叙述语言,是专门用来开发Internetclient和server端的应用程序。它能够被轻易的嵌入到HTML文件.使用JavaScript的浏览器能够回应使用者的需求事件而不用通过网络来回传数据。这样。使用者的数据能够直接被client应用程序处理。它的出现弥补了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控制器负责与用户进行交互.接受用户请求、调用模型处理和选择响应的视图.
2.4 系统的数据流图
数据流图即DFD(Data Flow Diagram)是分析系统数据流程的图形,让用户理解系统的功能、输入、输出和数据存储.系统的第一层数据流图如图2.2.
用户注冊。校验用户信息的有效性。校验通过的将信息存入数据库,提示通知用户.
用户登录时提供username和password。假设password和username校验不一致的时候。在页面提示password或用户不存在.登录成功则通知用户.
注销登录时要清除server端用于保存用户信息的session。并跳转到登陆页面.
发表帖子时先校验为非游客用户才干在帖子採集页输入内容来更新系统数据.
搜索帖子依据发表时间、精华帖和作者来查看主帖的点击率、作者和主题名.
首页显示版块信息。点击子版块进入显示主题列表页面,点击主题显示出回帖所属的主题信息、回帖的作者信息和回帖内容.在回帖信息採集区域书写信息进行公布回帖.
管理会员用户。对会员用户进行改动、删除、加入用户和对用户锁操作的功能;管理帖子信息包含主题贴信息管理和用户回贴信息管理.主帖管理页面中有删除主帖和编辑主帖功能.用户回贴信息管理有删除回贴和编辑回贴功能;管理版块信息有删除版块、加入主版块和编辑版块顺序;管理系统用户有改动用户信息、删除用户和加入用户功能.
2.5 用例图
用例是系统和外部的參与者(actor)交互的动作序列的说明,是对一组动作序列的抽象描写叙述,系统执行这些动作序列,产生相应的结果反馈给參与者或作为其它用例的參数.在UML中.用例用一个椭圆表示。用例名用动宾结构或主谓结构命名.參与者是指用户在系统中的扮演的角色,其图形化表示是一个小人.用例图如图2.3所看到的.
系统用例实用户注冊、登录、注销、浏览主题、发表主题、发表回复、搜索帖子、改动帖子、删除帖子和查看精华帖;管理员管理主题、板块、会员用户和系统用户.
3 总体设计
3.1 系统架构设计
3.1.1 功能分析
系统分前台和后台模块,功能模块图.
系统的功能模块有游客注冊登录、会员发帖回帖、浏览帖子、版块管理、帖子管理和会员管理.
3.1.2 前台架构设计
前台模块面向版主、用户和游客,提供注冊帐号、用户登录、用户注销、浏览文章、发表新主题、回复主题、改动帖子、删除帖子、搜索帖子、查看和改动个人信息功能.如图3.2.
3.1.3 后台架构设计
后台模块的使用对象是管理员,后台功能包含管理用户、管理版块、管理主题和版块权限管理.后台功能模块如图3.3.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvejkyOTExODk2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
后台的具体功能有添加版块、查询版块、删除版块、改动用户、删除用户、删除主题、改动主题、置顶帖子、加精帖子、添加版主和删除版主.
3.2 数据库设计
3.2.1 数据字典概述
系统抽象出来的数据结构有:用户信息表(users)、主板块信息表(board)、子版块信息表(subboard)、主题帖信息表(topic)、回帖信息表(reply)、管理员信息表(admin)和版主信息表(editionmaster).依据需求分析,设计例如以下表:
1.用户信息表:用户编号、用户姓名、用户真实姓名、用户password、用户性别、用户Email、生日、OICQ、积分、状态、用户类型(普通用户,版主)、地址.
2.主题帖信息表:板块编码、板块名称、版块顺序.
3.子版块信息表:子版块编号、子版块名称、子版块描写叙述、子版块主题帖数、子版块回帖数、子版块每页显示主题数、主题下的每页回帖显示数、新主题分、回帖分、顺序、建板时间.
4.主题帖信息表:主题帖编号、主题帖标题、主题帖内容、置顶标志、加精标志、点击率、公布时间.
5.回帖信息表:回帖编号、回帖主题、回帖内容、屏蔽标志、回帖时间.
6.管理员信息表:管理员编号、帐号、password.
7.版主信息表:版主编号、子版编号、用户编号、授予时间.
3.2.2 表结构
下面描写叙述的是表结构,当中0代表否。-1代表是.
用户信息表(users)。该表结构如表3.1.
表3.1 用户表
字段名 |
类型 |
长度 |
是否为空 |
是否主键 |
备注 |
userId |
int |
11 |
0 |
-1 |
用户编号 |
userName |
varchar |
32 |
-1 |
0 |
username |
userPass |
varchar |
32 |
-1 |
0 |
password |
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 |
password |
版主信息表(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 具体设计
4.1 系统前台视图层具体设计
前台模块的功能,分为用户注冊、用户登录、用户注销、改动个人信息、查看版面、查看主题、查看回复、发表主题和发表回帖.由此设计的前台主页如图4.1所看到的.
4.2 系统后台视图层具体设计
用户分为版主、管理员、会员用户.版主的权限用于维护自己版面的主题,包含删除主题、将主题置顶、设置精华帖;管理员的功能是会员用户管理、版块信息管理、帖子信息管理和系统用户管理.具体有删除用户,改动用户权限、添加版块、删除版块、查询版块、删除主题、改动主题属性、新增功能权限、查询功能权限、删除功能权限、新增版块权限、查询版块权限、删除版块权限.管理员不能删除系统内置管理员.系统内置管理员具有站点的一切功能.
管理员通过admin.jsp页面登录到主页。主页上显示后台管理相应的超链接,在管理页面有会员用户管理、版块信息管理、帖子信息管理和系统用户管理.由此设计的后台主页如图4.2所看到的.
5 系统实现
5.1 执行环境
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.2 系统架构概述
以登陆流程为例来介绍系统实现的总体架构.登陆流程图如图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用来配置对象之间的依赖关系.
5.3 数据库连接模块实现
系统採用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.
5.4 前台核心模块实现
5.4.1 用户模块的实现
1. 用户注冊:在register.jsp页面输入username,password,password提示问题、提示问题答案、安全邮箱信息提交数据到DoFrontUser.java中进行处理,在DoFrontUser.java中,假设username已经存在则返回注冊页面,否则提示用户注冊成功。并自己主动登录到首页.由此设计的用户注冊时序图,如图5.2所看到的.
论坛平台对用户注冊请求进行图像验证码和注冊信息的有效性校验通过后,生成开户基本信息并通知用户.由时序图设计的用户注冊页面如图5.3所看到的.
2. 用户登录:用户在登录页面输入username和password登录,系统将username和password提交到DoLogin.java的doIn ()方法,将提交数据转交给Dao查询,假设有正确的记录则登录成功,将用户信息保存在Session并跳转到主页。否则返回登录页面,通知用户登录失败. 由此设计的登陆时序图如图5.4所看到的.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvejkyOTExODk2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
平台对用户登录请求进行图像验证码和登录信息的有效性校验通过后跳转到主页.由时序图设计的登陆页面如图5.5所看到的.
3. 用户注销请求提交到DoLogin.java的doOut 方法改动用户离线时间、设置Session失效和返回到主页.由此设计的用户注销时序图如图5.6所看到的.
平台对注销请求进行改动登录记录信息、设置session失效后跳转到主页.由时序图设计的用户注销页面图如图5.7所看到的.
5.4.2 版块模块的实现
查看版面:首页显示版块信息。点击子版块显示主题列表,点击主题进入主题页.
訪问论坛时。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";
}
}
5.4.3 主题模块的实现
1. 查看主题:主页上点击版块名时,将请求交给DoDisplaySubBoardInfo.java处理。DoDisplaySubBoardInfo.java取出模块下全部主题信息和最后发表回复的作者信息存入request对象,.由子版块页面显示主题列表. 由此设计的查看主题时序图如图5.8所看到的.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvejkyOTExODk2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
平台获取主题信息由子版块页面显示主题列表.由查看主题时序图设计的主题列表显示页图如图5.9所看到的.
2. 查看回贴:在主题显示页面点击主题产生获取主题信息动作,系统将动作交给FrontReplyAction.java处理,FrontReplyAction.java将请求交给DAO层,从DAO取出回帖信息和回帖的主题信息.由此设计的查看回帖时序图如图5.10所看到的.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvejkyOTExODk2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
平台从DAO取出回帖信息和回帖的主题帖信息并显示到页面.由时序图设计的回帖内容页面如图5.11所看到的.
3. 回帖:从回帖信息採集区域将回帖信息提交到后台进行公布回帖的前期处理并将处理结果的反馈到页面.由此设计的发表回帖时序图如图5.12所看到的.
平台进行公布回帖的前期处理并将处理结果的反馈到页面.由时序图设计的回帖的页面如图5.13所看到的.
4. 编辑回帖.回帖更新前获取原有帖子信息,.用户能够编辑回帖的标题、内容和帖子状态,回帖改动以后返回改动结果.由此设计的编辑回帖的时序图5.15所看到的.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvejkyOTExODk2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
平台获取原有帖子信息到编辑页面。用户能够编辑回帖的标题、内容和帖子状态,回帖改动以后通知用户.依据编辑回帖的时序图设计的编辑回帖的页面如图5.15所看到的.
5. 发表主题:主题列表页和回帖具体页能够发表主题,点击链接跳转到主题信息採集页,该页将主题信息提交到FrontTopicAction.java进行新帖前期处理并将结果反馈到页面.由此设计的发表主题时序图如图5.16所看到的.
1. 主题採集页如图5.17
平台进行新帖前期处理和更新版块信息和主题帖信息并将结果反馈到页面.依据发表主题时序图设计的主题採集页面如图5.17所看到的.
6. 版主管理主题的功能有移除、置顶、加精、编辑主题帖和删除主题帖.由此设计的前台版主管理主题时序图如图5.18所看到的.
平台在进行权限校验通过后,对.主题帖进行置顶主题帖、加精主题帖、编辑主题帖和删除主题帖操作,并将操作结果通知用户.依据前台版主管理主题时序图设计的前台版主功能页面如图5.19所看到的.
5.5 后台核心模块实现
5.5.1 后台主版块模块的实现
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所看到的
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvejkyOTExODk2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
平台在进行权限校验通过后。调整主版块在前台主页显示的上下顺序、编辑主版块、加入主版块和删除主版块操作,并将操作结果通知用户.依据主版块信息管理时序图设计的主版块信息管理页面如图5.21所看到的.
2. 后台子主版快信息处理:管理员点击子主版块信息管理,将请求提交给BackSubBoardAction.java的doGuide方法获取主版块信息并显示到subBoardGuide.jsp页面,以便管理员对相应主版块的子版块操作.管理员选择相应的主版块后进入子版块信息管理页面.由此设计的子版块信息管理时序图如图5.22所看到的.
平台在进行权限校验通过后。调整子版块在前台主页显示的上下顺序、编辑子版块、加入子版块和删除子版块操作。并将操作结果通知用户.依据子版块信息管理时序图设计的子版块信息管理页面如图5.23所看到的.
5.5.2 帖子信息管理模块的实现
帖子信息管理包含主题贴信息管理、用户回贴信息管理.
1. 主贴信息管理:点击主贴信息管理跳转到 displayTopicGuide.jsp页面来依据主版块和子版块组合条件检索主帖.主帖管理页面中有删除主帖和编辑主帖功能.编辑主帖有置顶和加精功能.採用把相应属性值改为1的方式完毕.删除主题是将主题id传给BackTopicAction.java的DoDelete方法先删除主帖的回帖,再调用TopicDao的deleteTopic(int id)删除主帖.由此设计的主题管理时序图如图5.24所看到的.
.
平台在进行权限校验通过后,调整子版块在前台主页显示的上下顺序、编辑子版块、加入子版块和删除子版块操作,并将操作结果通知用户.依据主题管理时序图设计的主帖管理页面如图5.25所看到的.
5.5.3 系统用户管理模块的实现
系统用户管理的页面中有改动用户信息、删除用户和加入用户功能.由此设计的系统用户管理时序图如图5.26所看到的.
平台在进行权限校验通过后,查找系统用户显示与页面。进行改动用户信息、删除用户和加入用户操作,并将操作结果通知用户.依据系统用户管理时序图设计的系统用户管理页面如图5.27所看到的.
5.5.4 会员用户管理模块的实现
会员用户管理有改动、删除、加入用户和对用户锁操作的功能.这里介绍锁的实现。仅仅需採用一个标志字段就可以.代码例如以下:
//解锁一个用户
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]. 计算机project,2006,32(5):60-62,134.
[6] 阎宏.JAVA与模式[M].北京:电子工业出版社,2002.
[7] 陈晋.论虚拟图书馆的个性化服务[J].情报探索,2003,(1):6-7.
[8] 李媛,刘涤尘.一个使用JavaBeans连接数据库的JSP应用[J]. 控制project,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的学术交流论坛系统的设计与实现的更多相关文章
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...
- 基于JSP+SERVLET的新闻发布系统(一)
本系统使用的是基于JSP+SERVLET+TOMCAT6 数据库使用的是MYSQL IDE是MYECLIPSE8.5,页面编辑使用的是百度的ueditor,比较适合咱国人 采用MVC模式,使用的关键技 ...
- NodeBB – 基于 Node.js 的开源论坛系统
NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...
- 基于Android的在线播放器系统的设计与实现
文章结构: 1 引言 1.1系统的研究背景 现在的时代是互联网的时代,互联网高速发展的同时,无线网络也接入了互联网.社会的各个领域都已经被无线网络渗透.小的比如手机,电脑,电视.大的比如灯光系统,智能 ...
- 基于JSP+SERVLET的新闻发布系统(三)
拖了这么久..今天把栏目管理还有新闻管理模块的也挂出来.. 栏目管理跟用户管理一样. 这里重点讲解新闻管理. 效果图如上: 1,可选择栏目类别,且栏目类别是动态生成的. 默认生成的文章是未审核状态的. ...
- 基于JSP+SERVLET的新闻发布系统(二)
接下来讲解的是通过AJAX验证用户名是否已经添加 用户名: <input type="text" name="userName" id="use ...
- 基于JSP开发医院预约挂号系统 Java源码
开发环境: Windows操作系统 开发工具: Eclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: 源码及原文链接:http://javadao.xyz/forum.php?mod= ...
- 基于Spring Boot的在线问卷调查系统的设计与实现+论文
全部源码下载 # 基于Spring Boot的问卷调查系统 ## 介绍 > * 本项目的在线问卷调查调查系统是基于Spring Boot 开发的,采用了前后端分离模式来开发. > * 前端 ...
- 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码
基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...
随机推荐
- html 基本标签 ---短语
<em> </em> 着重 <strong> </strong> 强调 <dfn> </dfn> 定义 <code> ...
- python学习笔记3---浅拷贝和深拷贝,file操作
import copy a=[1,2,3,['a','b']] b=a c= copy.copy(a)---浅拷贝 d=copy.deepcopy(a)---深拷贝 file操作: python 文件 ...
- 关联数据和formatter问题-easyui+微型持久化工具
控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...
- 数组有没有length()这个方法?String有没有length()这个方法?
数组有没有length()这个方法?String有没有length()这个方法? 解答:数组没有length()方法 它有length属性 String有length()方法.
- python 多线程糗事百科案例
案例要求参考上一个糗事百科单进程案例 Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 ...
- .NET中二进制图片的存储与读取
判断HttpContext是否为空: string configPath = "img/defaultPhoto.png"; if (HttpContext.Current != ...
- oracle 里 插入空字符串会被转成null插入
oracle 里 插入空字符串会被转成null插入 因为非空列如果要插入空字符串数据,最好是插个空格,因为空字符串会报错
- HDU-1095-A+B for Input-Output Practice (VII)(多一个空格?)
A+B for Input-Output Practice (VII) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32 ...
- 【Raspberry pi+python+mysql】红外传感器-发邮件-存数据库
1.mysql http://dev.mysql.com/doc/refman/5.5/en/tutorial.html mysql+python http://dev.mysql.com/doc/c ...
- 4、手把手教React Native实战之flexbox布局(伸缩属性)
###伸缩项目的属性 1.order 定义项目的排列顺序,数值越小,排列越靠前,默认值为0,语法为:order:整数值 2.flex-grow 定义伸缩项目的放大比例,默认值为0,即表示如果存在剩余空 ...