目 录
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 数据库概念设计 .................................................. VI 3。3 数据库的逻辑设计 ................................................ VI 4 系统详细设计与实现 ................................................. VIII
4。1 前台设计 ...................................................... VIII
1 前台页面设计与实现 ........................................... VIII 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
字 段名 属性 约束 意义 1 id int primary 帖子id
key 2 3 pid rootid editNo title cont pdate writer vieint int Int varchar(30) text datetime varchar(30) 无 无 无 无 无 无 foreign key 父亲id 根id 所属版块 标题 内容 发帖时间 作者 帖子4 5 6 7 8 9 wCount repint 无 查看量 帖子10 lyCount int 无 回复量 判断帖子11 isleaf int 无 是否为叶子节点 12 isEssence int 无 判断帖子是否
为精华帖 说明:*id是帖子的编号,为本表的主键. *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 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〉href=”http://localhost:8080/BBS/loginUser。jsp\">普通用户注册href=”http://localhost:8080/BBS/recordUser.jsp”〉普通用户登录 〈/A> 〈/DD〉 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 ArrayListStatement 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〉