jsp(java)bbs论坛的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 背景及意义........................................................... II 2系统总体设计. (3)
1 系统目标 (3)
2系统功能划分 (4)
1 前台功能结构 (4)
2 后台功能结构 (5)
3 系统开发环境 (5)
1 开发环境 (6)
2 系统平台体系结构的选择 (6)
3 JAVASCRIPT语言简介及特点 (6)
4 JSP概述 (6)
5 MYSQL (7)
6 JDBC技术 (7)
3数据库设计 (8)
3。
1 数据库分析 (9)
3.2 数据库概念设计 .................................................. VII
3。
3 数据库的逻辑设计 ............................................... VII 4系统详细设计与实现 ................................................... IX
4.1 前台设计 ......................................................... IX
1 前台页面设计与实现.............................................. X
2 用户登录、管理员登录 (14)
3 论坛版块的展示 (14)
4 发表新主题 (15)
5 查看及回复主题 (15)
4。
2 后台设计 (16)
1 管理员登录 (16)
2用户信息管理 (17)
结束语 (17)
参考文献 (18)
1、背景及意义
网络的兴起与发展,极大地改变了人们的思维和行为习惯。
基于网络的应用也层出不穷,论坛就是最早兴起的应用之一。
作为一种传递消息的方式,最早的BBS的作用是公布股市的即时消息,而随着时代的发展,现在的BBS的内容已达到无所不包的程度。
小到生活趣事,大到专业知识,各种各样的主题论坛让人眼花缭乱。
论坛网页的形式也由最初的静态页面发展到现在的动态页面,更好的实现了用户之间的交互。
财大家园论坛就是通过动态Web开发技术和数据库技术实现的以财大学生与老师为主要服务对象的一个基于现实环境之上的一个网上论坛,力求创造出一个模拟的网上校园虚拟环境。
此论坛是基于B/S模式的一种JSP网页论坛的设计与实现,力求做到界面友好、简单和易于操作.论文从几个大的方面来对系统的开发做出了阐述。
在系统分析一章从需求分析和可行性分析两方面来做具体阐述;系统整体设计则从系统目标、系统功能划分和系统开发环境三大方面说明,结合后面的系统详细设计与实现一章完成对系统从整体到细节的全方
位的理解。
开发BBS论坛系统的目的是为了提供一个大家交流的平台,供人们发表看法、探讨经验、讨论问题.因此,BBS论坛系统的最基本的功能是发表主题,其次是其它人员根据主题发表自己的看法,即回复主题.考虑到现实情况,并不是每一个访问的游客都具有发表主题的权利,所以必须用一个身份绑定用户,赋予其发表主题的权利,这就需要实现用户注册及登录的功能。
每一个系统都需要管理员这个特殊群体的存在,所以也需要实现管理员登陆的功能。
管理员区别于一般用户的地方在于,管理员往往具有更高的权限,有权对用户信息和帖子内容作出某些“增删改查”的操作,所以,针对管理员,系统应该实现删除和修改帖子以及对用户的管理等功能,以实现管理员对社区的管理。
考虑到社区访问量会很大,用户发表的帖子的数量自然很多,在浩瀚的帖子海洋中,如何才能查看自己感兴趣的帖子成为了一个不得不考虑的问题.所以,系统还应该实现搜索帖子的功能,用模糊查询的方法,对社区的帖子进行筛检的工作。
本系统针对用户还实现了一个特殊的功能,即邮件发送.如果某个用户对其他的用户感兴趣,那么可以通过将邮件发送到指定用户注册时所填写的邮箱地址,这样的话,就能够实现即时通讯的功能。
2 系统总体设计
1 系统目标
基于BBS论坛在现实生活的实际应用,本系统的系统目标是提供一个以现实环境为基础的网上模拟交流平台,通过它,人们可以不必拘泥于空间和时间上的限制,方便交流,畅所欲言,同时也能够更加便利的看到周围人的想法,观点,最大化的丰富人们的视野和生活,让人随时都能身在其中,随时也能置身事外。
2 系统功能划分
2.1 前台功能结构
系统的前台初始页面如下,登录地址为
“http://localhost:8080/BBS”:
图2-1财大家园网首页
当用户登录到论坛首页时,其默认的身份就是游客,只能查看、回复、搜索帖子,而不能执行发帖等其它操作。
如果用户为非注册用户,则其可以进行注册以获得一个登录身份.如果用户为已注册用户,则其可以直接进行登录,然后以注册用户的身份执行诸如发表新主题、查看新主题、回复主题、搜索主题等一系列操作.
此时,用户已经具有了一种身份,此后用户可以以此种身份执行诸如发表新主题、查看主题、搜索主题、回复主题等操作。
2.2 后台功能结构
后台功能主要是针对管理员而设置的,用户以管理员的身份登陆后,就能执行后台管理的操作,具体到此BBS论坛,主要是指删除和修改主题以及对用户信息的管理。
后台系统流程图如下:
图2。
2 后台系统流程图
2。
3 系统开发环境
1 开发环境
在建立工程前,需要首先搭建开发环境。
此BBS论坛系统的开发需要用到以下几种工具,故开发前需要进行相应的下载和安装:
开发平台:MyEclipse 9。
0M2
Web服务器:Tomcat 7。
0。
5
数据库服务器:MySQL 5.1
Java开发工具:JDK 1.6。
0
辅助工具:Dreamweaver CS4
2 系统平台体系结构的选择
在系统开发领域内,目前存在两大主流系统平台的开发结构,一种是C/S结构,而另一种是B/S结构.C/S结构,即大家熟知的客户端/服务器结构,是一种应用较早,相对传统的开发模式。
通过它,可以充分利用两端硬件环境的优势,将任务合理的分配到Client 端和Server端,降低了系统的通讯开销。
B/S结构,即浏览器/服务器结构,是随着Internet的兴起,对C/S结构的一种变化或者改进。
在这种结构下,用户不需要借助于客户端软件,通过WWW浏览器,即可实现系统的全部既定功能.在这种模式下,一部分事务逻辑在前段实现,但是主要事务逻辑在服务器端实现,大大简化了客户端电脑载荷,减轻了系统维护与升级的成本,从而降低了用户的整体成本。
从开放程度来说,传统的C/S 结构虽然采用的是开放模式,但这个开放性只是针对系统开发一级的,在特定的应用中,无论是客户端还是服务器端都还需要特定的软件支持。
而B/S结构,是一次性到位的开发,应用此模式开发的系统,不同人员,在不同地点,以不同的接入方式(比如LAN、WAN 等)访问并操作共同的数据库,能有效地保护数据平台和管理访问权限,服务器的数据库也很安全。
特别是在Java这样的跨平台语言出现之后,B/S架构管理软件起来更是显得方便,快捷和高效。
可以说,B/S是乘着Internet兴起的风而杨风远航的,是适应时代的产物。
但是,B/S也存在着自己的不足,比方说其在大量数据分析,实时控制应用方面就存在着需要改进的地方。
综合考虑,本系统还是考虑使用当下流行的B/S结构作为系统的开发模式。
3 JSP概述
JSP是由Sun公司在Java语言的基础上开发出来的一种动态网页制作技术,其将标记<%%〉插入到页面中,从而使网页中的静态部分和动态部分分离开来。
JSP是类似ASP的一种技术,在传统的静态网页HTML文件插入Java程序段和JSP标记,就形成了JSP文件.
JSP技术的强势在于:
1、一次编写,到处运行。
在更换系统时,代码不需要做任何修改。
2、系统的多平台支持。
基本上可以在所有平台上的任意环境下开发,在任意环境中进行系统部署,在任意环境中扩展.
3、强大的可伸缩性。
通过小小的jar文件运行servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,一台服务器到无数台服务器,JSP 表现了强大的可伸缩性。
4、多样化和功能强大的开发工具支持,常用的编辑工具有Dreamweaver和MyEclipse 等。
3。
3。
5 MySQL
MySQL可以称得上是目前运行速度最快的SQL语言数据库,除了具有许多其他数据库所不具备的功能和选择外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数据库,用于个人和商业用途,而不必支付任何费用。
3。
3.6 JDBC技术
数据库管理是每个应用系统开发过程中不得不考虑的问题,目前主流的数据库有Oracle、SqlServer、MySql等。
不管使用何种技术,都离不开JDBC技术的支持。
JDBC的全称是Java DataBases Connectivity standard,即Java数据库连接,是一种数据库通用接口采用的主流技术.其定义了用来访问数据库源的标准Java类库,通过它使用一种标准方法,就能够方便的访问数据库资源。
所以,JDBC又是一种规范,其目标是使应用程序开发人员通过它连接任何提供JDBC驱动程序的数据库系统,这样就使得程序员无需对某种数据库有过多的了解,大大加快了开发过程.
有了JDBC,向各种数据库发送SQL语句就是一件再简单不过的事了.换言之,有了JDBC,就不必为访问数据库A专门再写一个程序,又为访问数据库B专门写一个程序。
所以,JDBC为Java应用程序与各种不同数据库之间进行对话提供了一个标准的方法,这也是Java语言“一次编写,到处运行”的优势.
4 数据库设计
4。
1 数据库分析
数据库的设计,在应用系统的开发中起着举足轻重的作用.一个合理、有效的数据库设计不仅是做好系统的保证,也能降低程序的复杂性,使程序的开发过程变得更加容易。
本系统是一个中型的BBS论坛系统,考虑到用户信息量和用户需求等问题,决定采用MySQl作为项目用数据库.
MySQl是一个中小关系型数据管理系统,最初由MySQL AB公司发布。
MySQL由于体积小、速度快、总体拥有成本低等原因,成为许多中小型网站数据库的首选.MySQL可以称得上是目前运行速度最快的SQL语言数据库,此外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数据库,用于个人和商业用途,而不必支付任何费用。
4.2 数据库概念设计
ER图是实体联系图,E-R模型是对现实世界的一种抽象。
其组成部分主要包括实体、联系和属性。
使用这三种成分,我们可以很好的抽象出现实世界中的个体,并通过彼此之间的联系来抽象整个世界。
E-R模型是设计数据库时经常使用到的方法。
经过分析,本系统创建了五张数据库表,即帖子表(article)、版块表(edit)、用户等级表(grade)、用户表(user)和管理员表(admin)。
下面划分出本系统所使用的数据库实体,它们分别为用户(User)和帖子(Article)以及管理员(admin)。
以下是帖子、用户和管理员的实体图:
图4—1帖子实体图
4.3 数据库的逻辑设计
1、帖子表(Article)
下面是对表Article的具体设计
表4-3 article
*pid是父亲id的编号,表示被回复的帖子id号。
*rootid表示根贴的id号,表示最初发起主题的帖子id号。
*editNo表示帖子所属的板块号,每个版块的帖子分版块区别显示。
*title表示帖子的主题。
*cont表示帖子的内容。
*pdate表示发帖的具体时间。
*writer表示发帖的作者,此外键对应user表中userName字段。
*viewCount表示帖子的查看量。
*replyCount表示帖子的回复量。
*isLeaf判断帖子是否为叶子节点,值为1时表示为非叶子节点;为0时表示为叶子节点。
*isEssence判断帖子是否为精华帖,值为1是表示是精华帖;反之,则不是。
4 系统详细设计与实现
4。
1 前台设计
系统的前台,即是直接面向用户的所有页面。
因为前台的功能模块较多,而各个模块的实现过程都是类似的,所以对于系统前台的介绍,只是做有选择的系统重点设计介绍。
1 前台页面设计与实现
本系统的所有页面都采用了统一的简化页面框架,包括页头和内容显示区。
前台首页的页面运行结果已在前文中出现过,此处不再累述。
下面主要介绍前台首页面index.jsp的具体实现。
由于论坛是以主题分版块展示的,下面以其中一个板块页面做详细介绍。
部分主要代码如下:
〈%
List〈Article> articles = new ArrayList<Article>();
Connection conn = DB.getConn(); //创建与数据库的连结
Statement stmt = DB。
createStmt(conn);//通过连结创建Statement对象
String sql = "select *from article”;
ResultSet rs = DB.executeQuery(stmt, sql ); //执行sql语句,并返回结果集
while (rs。
next()){
Article a = new Article();
a.initFromRs(rs);
articles.add(a);
}
//记录总查看量
int totalViewNum=0;
//记录帖子总数
int totalArticleNum=0;
/*查询出帖子的总查看量*/
for (Iterator〈Article〉 it = articles.iterator(); it。
hasNext();) { Article a = it.next();
totalViewNum+=a.getViewCount();
}
/*查询出帖子的总回复量*/
String sql1="select count(id) from article where pid=0";
ResultSet rs1 = DB.executeQuery(stmt, sql1);
rs1。
next();
totalArticleNum = rs1.getInt(1);
/*查询出最后的发帖作者*/
String sql2=”select * from article order by pdate desc";
ResultSet rs2 = DB。
executeQuery(stmt, sql2);
while(rs2。
next()){
Article a = new Article();
a。
initFromRs(rs2);
articles.add(a);
}
Iterator〈Article> it1 = articles。
iterator();
Article a1=it1.next();
String lastWriter=a1。
getWriter();
DB。
close(rs2);
DB.close(rs1);
DB。
close(rs);
DB.close(stmt);
DB.close(conn);
%>
以上的语句实现的有三个功能:1、查询出帖子的总查看量;2、查询出帖子的总回复量;3、查询出最后的发帖作者。
这些都是对整个板块的总体统计,是对板块信息的最直观的展现。
2 用户登录、管理员登录
在论坛首页,提供了三个登录、注册入口,包括:用户注册/登录、管理员登录;通过点击如下链接,进入到对应各个界面。
<DD〉〈A class=jive-acc-login
href=”http://localhost:8080/BBS/loginUser.jsp”〉普通用户注册〈/A〉〈/DD〉〈DD〉<A class=jive-acc—login
href=”http://localhost:8080/BBS/recordUser.jsp">普通用户登录〈/A〉〈/DD〉〈A class=jive-acc-login
href=”http://localhost:8080/BBS/recordManager。
jsp"〉管理员登录入口〈/A〉1)用户登录
用户完成注册后,就可以进行用户登录的操作,用户登陆页面如下:
图4—3用户登录界面
在用户登录时,如果用户名或密码输入有误,则会出现“invalid username or password”的错误信息提示,然后页面返回到登陆页面供用户修正输入继续登录。
3 论坛版块的展示
版块页面运行效果
图4—4 “最初的梦想“版块页面运行效果图
从运行效果来看,此处运用了分页技术。
分页技术实现的关键点依赖于一条重要的sql语句,具体如下:
Select * from Table order by 参数1 limit startPage+",” endPage;
其中,Table是所要查询的表名称;
startPage是起始页面;
endPage是结束页面。
执行的效果是查询出排序结果的制定起始行到指定结束行的所有页面。
板块页面的展示是通过一个循环来实现的,在循环的基础上,为页面实现了一个优化:奇偶行以不同的显示效果展现。
优化的方式主要向jsp页面导入class文件,在导入的时候,针对行数的奇偶性采取不同的对应操作。
主要代码如下:
<%
int lineNum = 0;
for(Iterator<Article〉 it = articles。
iterator(); it.hasNext();) { Article a = it.next();
String classStr = lineNum % 2 == 0 ? "jive—even" : ”jive—odd";//区分奇偶行,以不同效果区分显示
%>
实现代码具体如下:
代码段1:获取制定部分行的查询结果
〈%
final int PAGE_SIZE = 8;//每页显示的主题数目
int pageNo = 1;//记录当前页数
String strPageNo = request.getParameter("pageNo”);
if (strPageNo != null &&!strPageNo.trim().equals("”)){
try {
pageNo = Integer.parseInt(strPageNo);
}catch (NumberFormatException e) {
pageNo = 1;
}
}
if (pageNo <= 0) {
pageNo = 1;
}
int totalPages = 0;//记录符合要求的总主题页数
List<Article〉 articles = new ArrayList〈Article〉();
Connection conn = DB。
getConn();
Statement stmtCount = DB.createStmt(conn);
ResultSet rsCount = DB.executeQuery(stmtCount,
"select count(*) from article where pid=0");
rsCount.next();
int totalRecords = rsCount.getInt(1);
totalPages = (totalRecords + PAGE_SIZE - 1) / PAGE_SIZE;
if(pageNo > totalPages) {
pageNo = totalPages;
}
Statement stmt = DB。
createStmt(conn);
int startPos = (pageNo — 1)* PAGE_SIZE;
String sql = ”select * from article where pid=0 order by pdate desc limit "
+ startPos + ",” + PAGE_SIZE;
ResultSet rs = DB。
executeQuery(stmt, sql);
while (rs。
next()) {
Article a = new Article();
a。
initFromRs(rs);
articles.add(a);
}
代码段2:将获取的结果根据行号的奇偶性分页展示:
〈%
int lineNum = 0;
for (Iterator<Article> it = articles.iterator(); it。
hasNext();){Article a = it。
next();
String classStr = lineNum % 2 == 0 ?"jive-even" : ”jive-odd";
<TR class="〈%=classStr%>">
<%
lineNum++;
%〉
4 发表新主题
在论坛版块展示页面中,注册用户可以执行发表新主题的操作,对游客而言,则不能实现此功能。
这个功能是通过区分用户登录方式的不同而实现的,非注册用户点击“发表新主题”的连接后会出现一个错误提示及跳转页面,以提示用户目前处于“非登录用户”状态,无权发表新主题.
已注册用户成功登陆后,则可以进行发表新主题的操作,运行页面效果如下:
图4—5发表主题页面
成功发表后,所发表主题会显示在论坛版块展示页面下(图4-5)。
5 查看及回复主题
点击主题链接,进入主题查看页面。
图4—6主题显示页面
在此页面,用户点击“回复"按钮,即可进入到回复主题页面,运行效果如下。
图4-7主题回复页面
在此,需要说明的是:为了美化回复的效果,在此加入了Fckeditor网页编辑器.具体实现步骤为:首先从网上下载一个Fckeditor,将解压文件拷贝到工程“WebRoot”目录下,然后到压缩包解压文件“FCKeditor2。
6.4 ”下的路径:
“\fckeditor\_samples\html\sample02.html"下,打开静态页“sample02.html",然后将其代码复制、粘贴到回复页面“reply.jsp”.修改即可。
修改后的代码段如下:
〈!-— fckeditor ——〉
〈script type=”text/javascript"src="FCKeditor/fckeditor.js">〈/script〉〈script type="text/javascript">
window。
onload = function()
{
// Automatically calculates the editor base path based on the _samples directory。
// This is usefull only for these samples. A real application should use something like this:
// oFCKeditor.BasePath = '/fckeditor/’ ;// '/fc keditor/’ is the default value。
var sBasePath = "<%=request。
getScheme()+"://”+request.getServerName ()+”:”+request.getServerPort()+request。
getContextPath()+"/FCKeditor/”%>”;
var oFCKeditor = new FCKeditor('cont’ ) ;
oFCKeditor.BasePath = sBasePath ;
oFCKeditor。
ReplaceTextarea() ;
}
〈/script>
〈!—— end of fckeditor -—〉
4。
2 后台设计
1 管理员登录
后台设计主要指管理员登录页面及登陆后的主题删除与修改页面.管理员登录可以
通过点击“管理员登录入口”链接实现。
管理员登录页面和用户登陆页面相似,见图5—3,此处不再赘述。
2 删除主题
当需要对论坛上的帖子实现管理的时候,就需要以管理员的身份登录页面。
管理员所见的页面与普通用户所见的页面不同,在管理员页面下,能够实现对帖子的删除操作.
管理员登陆后的主题版块具体内容页面与普通用户和游客登陆后的页面相比,多了个按键【DEL】,分别代表删除帖子,点击链接即可进入相应删除页面。
身份是权利的象征,当一个用户以“游客”的身份登录论坛时,其只能实现查看、回复帖子的最基本功能;而当一个用户以“注册用户”的身份登录时,其除了能够实现游客的所有权利外,还能够进行发表新帖的操作;如果用户是以管理员的身份登陆的话,他就拥有了最高的权限级别,除了能够实现注册用户的所有功能外,还具有删除及修改帖子、管理用户的权利。
以上的权限区分是通过Session来实现的.Session一般来区分用户的登录方式,通过在用户/管理员登陆后设置一个Session值,来达到区分用户登录方式,提升系统安全性的目的。
用户登陆后所作的Session操作:
session。
setAttribute(”userLogined","true”);
管理员登陆后所作的Session操作:
session.setAttribute(”adminLogined”,”true”); //区分登录方式(普通用户登录;管理员登录)
3 用户信息管理
管理员登陆后,能够实现非管理员用户不能实现的三个功能,他们是:删除帖子、修改帖子和管理用户信息。
删除和修改帖子是在主题展示页面(图5-4)的帖子左端,增加【Mod】和【Del】两个按钮,分别跳转到“modify。
jsp”和“delete。
jsp”页面进行相应的修改和删除操作,过程较简单,具体实现步骤此处不再赘述。
用户信息管理是每个管理员必备的功能之一。
用户以管理员身份登陆后,在论坛首页就会多出两个按钮:【退出登录】和【用户管理】,点击【用户管理】按钮,就进入用户管理界面,以下是界面展示图:
图4-8用户管理界面
如图示,在此界面列出了系统所有已注册的用户部分信息。
管理员可以根据需要对个别用户执行删除或者修改的操作,以实现对用户信息的管理。
单击【删除】按钮,被选定用户删除后自动跳转到论坛首页。
结束语
经过自己的不懈努力,毕业设计“财大家园BBS论坛"的工作已进入了收尾阶段。
回首此次毕业设计的设计、开发过程,大致经历了四个阶段:
➢搜集资料阶段
在开始的毕业设计定题过程中,面对大量的选择题目,感觉一头雾水。
结合自己在大学所学的知识及兴趣,并在网上查看了一下时下最流行的网络应用等选题素材,最终在老师的建议和指导下,才最终将选题确定下来。
确定选题后,就开始了资料收集的准备工作.所幸,现在的资源都是共享的。
通过网络、图书馆收集了一大堆与选题相关的资
料。
其间,也摒弃了很多无关紧要的内容。
掌握了一手资料后,接下来,就开始对所搜集的资料进行整理、分析和研究,并在此基础上制作了课题研究的方案及系统的设计规划。
➢功能设计阶段
在前一步的基础上,我就开始了系统功能设计。
根据分析,此BBS论坛的功能模块主要包括:用户/管理员注册及登录、发布主题、搜索主题、回复主题、修改及删除主题以及用户信息的管理。
功能设计就是从大的方面来划分系统需要实现的功能模块.囿于时间的限制,此系统实现的都是BBS最基本的功能。
如果后期时间允许的话,可以增加一些新颖的功能。
➢系统详细设计与实现阶段
系统详细设计就是针对某个具体的模块,从细节方面实现模块具体功能的阶段。
一个网络应用系统的开发离不开后台数据库的而支持,针对这类固定的操作,可以专门创建一个方法来实现。
值得一提的是,针对不同的登录方式,用户所见的页面展示效果也不同,这是为了提升系统的安全性而设计的.在帖子展现页面,应用了分页技术;在帖子回复页面,添加了在线文本编辑器的应用;在页面跳转时,增加了延迟并动态显示延迟时间的功能。
这些都是对系统的优化工作,仅仅是为了实现基本功能的系统注定没有多大的生命力,如何为用户提供更加舒适,更加人性化的服务才是我们需要额外考虑的重点.
➢撰写初稿及定稿阶段
通过本系统的设计与开发,真的使我获益良多。
但由于各种原因,本系统还存在许多不足,先将系统存在的不足列举如下,便于以后更新与修改:
1、在数据库的设计上,存在着很大的改进空间.在针对用户的权限管理上没有做过
多的考虑,用户虽然有权限级别上的划分,但是没有落实到具体的功能实现上.
2、用户注册/登录界面过于简便,未加入过多的验证处理,有待改进.
系统雏形已成,囿于本人的知识和时间有限,系统本身还存在着很大的不足,但通过独立设计与开发系统,我学到了许多知识,也越来越大的激发了我学习计算机的热情与动力,我想,这才是最重要的。
九、参考文献
JAVA开发实战宝典————-—-—编著:李钟蔚出版社:清华大学出版社
JAVA面向对象编程—-------编著:孙卫琴出版社:电子工业出版社。