BBS论坛系统的设计与实现论文答辩资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为了方便信息的交流,在结合动态服务网页(JSP)和SQL2005 技术之下开发了这个界面友好的小型论坛系统。论坛使用动态服务网页(JSP)技术建设论坛的骨干框架,使用SQL2005制作系统的数据库,利用了Struts、Spring、Hibernate三大框架技术的部分知识点,还结合使用了AJAX技术,通过这些实现了一个功能相对齐全的论坛系统。
该论坛为网友们提供了一个交流的平台,在这里注册用户可以自由地发表自己的观点和对论坛的主题帖子发表意见,还可以及时的解决网友提出的问题,获取对自己有用的知识。本系统采用JSP与SQL Server技术用作网站架设,选用SQL2005数据库及Windows XP操作系统。该论坛还有一些特殊的功能,强大的搜索功能等。
系统技术及运行环境
JSP技术简介
JSP是服务器端的脚本语言,是以SERVLET为基础开发而成的动态网页生成技术,它的底层实现是JAVA SERVLET。JSP(JAVA SERVER PAGES)由HTML代码和潜入其中的JAVA代码所组成[6]。服务器在页面被客户端请求以后对这些代码进行处理,然后将生产的HTML页面返回客户端的浏览器JSP的特点是面向对象、 跨平台、 和SERVLET一样稳定、 可以使用SERVLET提供的API,同时克服了SERVLET的缺点。在使用JSP时一般和JAVABEANS结合使用,从而将界面表现和业务逻辑分离[7]。
JAVABEAN技术简介
JAVABEAN是基于JAVA的组建模型,有点类似于MICROSOFT的COM组建。
在JAVA平台中,可以无限扩充JAVA程序的功能,通过JAVABEAN的组合可以快速生产新的应用程序。对于程序员来说,最好的一点就是JAVABEAN可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。JAVABEAN 通过JAVA虚拟机(JAVA VIRTUAL MACHINE)执行,运行JAVABEAN最小的需求是JDK1.1或者以上的版本。JAVABEAN传统的应用在于可视化的领域,如AWT下的应用。自从JSP诞生后,JAVABEAN更多的应用在了非可视化领域,在服务器端应用方面表现出了越来越强的生命力[8]。
其它的一些技术
本系统还使用了一些其它的技术,如Struts[9],Hibernate[10],Spring[11],AJAX等。这些都会在后面的代码处作相应的介绍。
运行环境
为了保证BBS论坛管理系统运行的高效性和可靠性,服务器应具有较高的软硬件配置,客户端的要求不是很高。此应用程序可广泛运行于国际互联网即Internet,也可适用于内部的局域网。其运行要求如下:
系统需求分析说明
系统介绍
本系统是基于B/S结构的一个小型论坛,主要基于Windows平台,通过这个论坛,用户之间可以实现互动交流。
功能需求
通过对网上的一些著名论坛的认识,该论坛至少应该实现以下功能:
(1) 注册管理:能够对用户名,密码的简单验证,能够防止
利用页面刷新重复注册,已经存在的用户名称不能重复注册。
(2) 浏览帖子:可以根据作者或内容等为关键字搜索帖子,分论坛版块显示帖子,显示帖子详情,浏览帖子时不要求用户登录,但回复帖子前用户必须登录。
(3) 发表及回复帖子:只有登录用户才可以发表和回复帖子,并且对帖子的字数有限制。
(4) 用户个人信息管理:登陆用户可以编辑注册后的个人资料,如修改密码等,但是不可以修改用户名称。也可以对自己发表的帖子进行操作:如修改,删除。
(5) 回复管理:各论坛版块的版主可以对自己管理的版块的帖子的回复的帖子进行管理,可以屏蔽回复。
(6) 论坛版块管理:只有管理员有该权限,管理员可以添加,删除版块,也可以修改版块资料,如版块名称,上级版块,版主。
(7) 用户管理:只有管理员有该权限,管理员可以禁用,启用用户,进行用户密码重置。
(8) 公告管理:只有管理员有该权限,管理员可以添加,删除公告。
(9) 帖子管理:各论坛版块的版主可以对自己管理的版块的帖子进行管理,可以屏蔽和删除帖子。
总体设计
本系统采用B/S模式设计,方便系统的维护和使用。采取MVC设计模式与多层架构的基于J2EE平台的设计[13],使系统拥有良好的扩展性,在满足当前使用需求同时还兼顾系统以后可能的功能扩充。系统分成几个相对独立的模块,但这些模块都进行集中式管理。
总体结构和模块设计
该系统可分为前台和后台两个部分,前台是提供给一般用户和版主使用的,后台是提供给管理员进行一些系统维护的。处理流程
对于本系统的使用者来说,可以分为以下几类:未注册的用户,已注册的用户。已注册的用户又可以分为一般用户、版主、管理员三类。根据用户角色的不同,用户拥有的权限也会不同。根据这个来分析该系统的业务流程。
数据库设计
在建设网站系统之前,必须对系统所用到的数据进行大致的分类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏,可以说数据库是系统的重中之重。
数据库设计要遵循一些规则,一个好的数据库满足一些严格的约束和要求。尽量分离各实体对应的表,一个实体对应一个表,分析该实体有哪些属性,对应有些什么字段,以及各实体之间的联系。实体、属性与联系是进行概念设计时要考虑的三个元素,也是一个好的数据库设计的核心[14]。
系统详细设计
前台和后台页面设计采用的技术是JSP。之所以选择它是因为JSP技术具有下面的特点:
1)Write Onc
e Run Anywhere
JSP技术继承了JAVA先天性的先进概念“Write Once Run Anywhere”这种概念正越来越深远的影响着互连网行业的交互式、WEB设计的理念。JSP Pages 可以非常容易的开平台跨WEB服务器软件来是设计和开放源代码。
2)支持多种动态网页格式
目前对使用JSP技术设计出来的网页应该采取什么样的格式还没有一个明确的标准。一般来说JSP技术即可以支持HTML/DHTML的传统浏览器文件格式,又可以支持应用与无线通讯设备例如移动电话、PDA等设备进行网页浏览器的VML文件格式,还可以支持其它一些B2B应用的XML格式。与以往的其它WEB应用技术相比较JSP技术有它很鲜明的特点。
3)JSP 标签可扩充性
尽管JSP与ASP都使用标签与脚本技术来制造动态WEB网页,但是JSP技术能够使开发者扩展JSP标签,使得应用JSP的开发者能定制标签库所以网页制作者可以充分利用与XML兼容的标签技术,大大减少了对脚本语言的依赖。由于指定标签库技术使得网页制作者降低了制作网页和想多个网页扩充关键功能的复杂程度[15]。
4)JSP跨平台的可重用性
JSP的开发人员在开发过程中一直关注可重用性,JSP足见、企业JavaBean或制定的标签都是跨平台可重用的。企业JavaBean可以访问传统的数据库并能并能已分布式系统模式工作于UNIX和WINDOWS平台,JSP标签可扩充功能为开发人员提供简便的与XML兼容的接口,即共享网页的打包功能使其完全的工业标准化。这种基于组建的模式能够有效的提高应用程序的开发效率。因为这种模式能够使开发人员利用快捷的子组建快速创建模板应用程序。然后再整和一些附加功能将其打包成一个JAVABEAN组建。
5)易于维护性
基于JSP技术的应用程序比基于ASP的应用程序更易于维护和管理。脚本语言都很好服务于小的应用程序但不能适宜大型的复杂的应用程序,因为JAVA是结构化的,它比较比较容易创建和维护庞大的组建化的应用程序。
在此页面中,用户如果点击“浏览进入”这个超链接,即以相当于游客的身份进入论坛,进入的是论坛的首页(图5.2所示),那么就只拥有浏览和搜索帖子的权限。如果用户输入了正确的用户名称和密码,就会以用户的身份进入论坛的首页。该用户就可以拥有更多的权限,可以浏览和搜索帖子,修改个人资料,删除和修改自己发表的主题帖子,发表和回复帖子。如果用户输入了不正确的信息,则系统阻止进入论坛的首页,还是会跳转到该登录页面。如果用户点击了“注册”这个超链接,则会进入注册页面
论坛首页
在该页面中,显示了很多信息。主要是各个版块的详细信息,包括版块的名称,版主,发表于该版块下的主题
帖子总数,以及最新发表的帖子的信息。若有发表的帖子,则显示该帖子的主题,作者,和发表时间,并且提供了帖子主题的超链接,点击后会进入显示该帖子的详细信息页面。若无发表的帖子,则显示暂无。该页面上还显示了公告的信息,即公告栏显示的内容。页面上还提供了搜索帖子的功能,可以根据作者名称来精确查找和根据帖子内容来模糊查找。如果用户是经过登录验证后进入该页面的,页面会提供“个人中心”的超链接,点击此链接会进入个人信息中心页面(如图5.6所示)。如果用户是通过浏览进入该页面的,则不会提供该超链接。
注册页面
用户可以在该页面中输入注册资料,包括用户名,密码,个性签名和头像。
用户名,密码,个性签名都是必填的,头像是默认选择第一个,用户也可以重新选择。在用户提交之前,对所填的信息都作了验证,包括用户名非空并且不可重复,密码非空,密码长度必须大于或等于4,两次输入的密码必须一致,个性签名非空,且长度小于50。在对用户名称的唯一性验证时,使用了AJAX技术,当用户输入完用户名,该文本框失去焦点时,会检查数据库中是否存在该用户名,
如果不存在,则在文本框后用蓝色字体显示“Ok,你可以用这个名称!”,如果存在,则在文本框后用红色字体显示“No,这个名称已占用!”。提交成功后,跳转到登录页面。
在这里简单介绍一下AJAX技术。AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它使浏览器可以为用户提供更为自然的浏览体验。在Ajax之前,Web站点强制用户进入提交/等待/重新显示范例,用户的动作总是与服务器的“思考时间”同步。Ajax提供与服务器异步通信的能力,从而使用户从请求/响应的循环中解脱出来。借助于Ajax,可以在用户单击按钮时,使用JavaScript和DHTML立即更新UI,并向服务器发出异步请求,以执行更新或查询数据库。当请求返回时,就可以使用JavaScript和CSS来相应地更新UI,而不是刷新整个页面。最重要的是,用户甚至不知道浏览器正在与服务器通信:Web站点看起来是即时响应的。
发表页面
用户可以在该页面中填写帖子的资料,包括标题和内容。提交之前也作了验证:标题非空且长度小于50,帖子内容非空且长度小于2000。为提示用户控制输入,通过JavaScript实现了动态显示用户输入的字符数目。为避免重复提交,提供了验证码,只有输入了正确的验证码后才会提交。
在该页面中,显示了帖子的详细信息和回复的帖子的详细信息。并且实现了分页功能,每页显示5个回复帖子
。只有对登录用户才显示“回复帖子”和“发表话题”两个按钮,以及回复帖子的表格的显示。对于没有登录的用户,则不会显示。如果登录的用户的身份是版主,而该帖子又是位于该用户管理的论坛版块下,则会在主题帖子后提供“屏蔽此帖”和“删除”两个超链接。分别实现屏蔽帖子和删除帖子的功能。另外在回复的帖子后提供“屏蔽此回复”超链接,实现对回复的帖子的屏蔽操作。
个人中心页面
在该页面中,显示了用户的个人资料和发表的帖子的信息。当用户点击“编辑个人资料”的超链接后,会进入修该个人资料的页面,实现对个人信息的修改。另外页面上分页显示了用户发表的主题帖子,用户可以这些帖子进行修改和删除操作。
后台页面
用户要进入后台管理页面,必须先进入后台管理的登录页面,使用了Filter来实现过滤。只有登录成功后,才能进入管理页面。
公告管理页面
点击后台管理页面的左边导航栏的“公告详细信息”超链接即可进入到该页面。该页面分页显示了公告的详细信息,包括公共编号,公共内容。管理员可以添加公告,删除公告。点击页面上的添加图标即可进入到添加公告页面。点击某个公告后的删除图标即可删除选定的某个公告。
论坛管理页面
点击后台管理页面的左边导航栏的“论坛详细信息”超链接即可进入到该页面。该页面分页显示了各个论坛板块的详细信息,包括论坛版块名称,上级版块名称,版主。管理员可以对论坛版块进行添加,修改,删除操作。点击页面上的添加图标即可进入到添加论坛版块的页面,完成添加功能。点击某个版块后面的修改图标即可进入修改版块信息的页面,在修改页面中可以修改该版块的名称,上级版块,版主。修改成功后跳转到显示所有论坛版块的页面。点击某个版块后面的删除图标即可删除选中的论坛版块,如果删除成功就跳转到显示所有论坛版块的页面,如果删除失败就跳转到显示删除失败信息的页面。
分页的JavaBean
系统中的大部分JSP页面需要使用分页技术,因此使用一个JavaBean来专门完成分页的功能。以下是此类的关键代码:
public class PageModel {
//所有的记录数
private int totalRecords;
//查询的结果集
private List list;
//第几页
private int pageNo;
//每页多少条数据
private int pageSize;
}
//提供各成员属性的get,set方法
public int getTotalPages() {
if (totalRecords == 0)
return 1;
return (totalRecords + pageSize -1)/pageSize;
}
}
生成验证码的代码
try{
BufferedImage bf=new BufferedImage(70,25,BufferedImage.TYPE_INT_RGB);
Graphics2D g2=bf.createGraphics();
g2.setPaint(new Color(0,0,255));
g2
.fillRect(0,0,70,25);
g2.setPaint(new Color(255,255,255));
String str=request.getParameter("num");
session.setAttribute("num",str);
g2.setFont(new Font("Arial",Font.BOLD,24));
g2.drawString(str,7,20);
for(int i=0;i<10;i++){
int r=(int)(Math.random()*255);
int g=(int)(Math.random()*255);
int b=(int)(Math.random()*255);
g2.setPaint(new Color(r,g,b));
int x1=(int)(Math.random()*80);
int y1=(int)(Math.random()*30);
int x2=(int)(Math.random()*80);
int y2=(int)(Math.random()*30);
g2.drawLine(x1,y1,x2,y2);
}
g2.dispose();
ImageIO.write(bf,"jpg",response.getOutputStream());
}catch(Exception e){
System.out.println(e);
}
系统的配置文件
1) Web.xml
主要配置的是Tomcat启动时要加载的配置文件。其中有Struts的配置文件Struts-config.xml,Spring的配置文件即与applicationContext-*.xml匹配的文件,另外还配置了Spring中Filter设置了字符集。此外还配置了与AJAX技术相关的DWR的详细配置信息。
2) Struts-config.xml
对于本系统为什么选择使用Struts技术,下面列举的这些理由是显而易见的:首先,它是建立在MVC这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC所带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等;其次,经受了实战的检验,使其功能越来越强大,体系也日臻完善;最后,是它对其他技术和框架显示出很好的融合性[16]。
该系统的Struts的配置文件中主要内容是ActionForm,DispatchAction的详细信息,以及各页面的跳转路径的控制信息。
3) Hibernate.cfg.xml
本系统中对数据库操作的DAO是通过Hibernate来实现的,该层的事务处理都交给Hibernate来处理,下面简单的来介绍一下Hibernate。
Hibernate是一种Java语言下的对象关系映射解决方案。它用来把对象模型表示的对象映射到基于SQL 的关系模型结构中去,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate 不仅管理Java 类到数据库表的映射(包括从Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL 和JDBC 处理数据的时间。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibern
ate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
4) 与Spring有关的三个配置文件
在本系统中,利用Spring的依赖注入机制来实现了DAO对象的依赖注入,这样一来不用自己来创建对象实例。
在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
以下是与系统有关的三个Spring的配置文件
(1) applicationContext-common.xml
在该文件中定义了哪些类的哪些方法参与事务,配置了SessionFactory,事务管理器,事务的传播特性。
(2) applicationContext-beans.xml
在该配置文件中配置了各个模块的DAO层的详细信息。
(3) applicationContext-actions.xml
在该配置文件中配置了各个DispatchAction中DAO对象的注入信息。
注册时的验证代码(用到了AJAX技术)
此处是通过DWR框架来实现的,页面中的关键代码如下:
测试方法
由于本系统的设计人员和测试人员都是本人,很了解系统的内部结构和处理过程,所以测试方式采用的是动态测试方法中的白盒测试。
测试范围
用户的登录;帖子的添加、删除、修改、查询;用户的个人信息编辑;管理员对用户、论坛版块、公告的管理。