《毕业设计(论文)基于SSH的论坛系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于SSH的论坛系统设计.doc(47页珍藏版)》请在三一办公上搜索。
1、内容摘要论坛的全称是电子布告系统,起初它只是公布信息的一种工具,随着技术的不断发展,论坛最终发展成一个信息整合、思想交流、资源共享的电子互动平台。项目通过spring+hibernate+struts三大框架来架构系统。然后,通过总体设计、详细设计和代码实现的开发步骤来实现一个通用的论坛系统。在项目的开发过程中运用了大量的统一建模语言(UML)的知识,本文阐述了整个系统的开发过程。包括对项目所选用的技术做简单介绍,对论坛系统进行需求分析和用例建模,数据库建模、系统业务流程分析和设计、系统分层设计与实现以权权限功能模块的详细解析。关键词: 论坛系统、需求分析、统一建模语言AbstractThe
2、full name of the Forum is Bulletin Board System.At first,It just a tool only used for publishing information. As thetechnology keeps evolving all this years,nowadays,the forum has becaming an Interactive platform which peoples can share their ideas and resources with each other in there.And also the
3、 forum can help people collecting and ordering all kinds of informations.The structure of this project is established by the three open-source framework which are spring hibernate and struts. When Im developing this system I have done the three development steps which are overall design detailed des
4、ign and code implementation.In order to develop this common forum system,I have used a lot of Unified Modeling Language(UML) knowledge.This paper has explains the whole system development process, including doing a brief introduction of the technology which the project has used.And also had done the
5、 work which are System Requirements Analysis User Case Modeling Database Modeling Business Process Analysis and the implementation of the system.Key words: Forum System、System Requirements Analysis、UML目 录1 前言 11.1论坛的发展现状 11.2本课题研究简述11.3论文组织12系统的架构技术与开发工具 22.1系统的框架技术22.1.1 Spring简介 22.1.2Struts简介22.1
6、.3 Hibernate简介22.2系统的开发环境与开发工具23 系统的总体设计 33.1需求分析33.1.1系统的需求用例图33.2系统的活动流程53.2.1系统的前台业务活动流程53.2.2系统的后台管理活动流程63.3系统的业务流程设计73.3.1用户注册流程设计 83.3.2会员发表主题流程设计 83.4系统的组件结构 93.5系统的数据库设计 104 系统详细设计及代码实现 134.1系统领域对象的设计134.1.1系统的用户类图设计134.1.2系统的文章相关的类图设计144.1.3系统的论坛分类和论坛版面的类图154.1.4 代码实现1642系统的DAO层设计与实现174.2.1
7、 DAO层的代码实现194.3系统的Service层设计224.4系统的Web层设计234.5系统的工具帮助类254.6系统的配置文件简介264.7系统的运行细节详解 264.8权限控制功能的实现284.8.1系统后台权限拦截的实现284.8.2系统前台权限拦截的实现295总结31致谢32参考文献 33附录 341前言自20世纪90年代以来,互联网飞速发展,早已成为人们快速发布、传递和获取信息的重要渠道。它在人们政治、经济、生活、教育、娱乐等各个方面都发挥着重要的作用。时至今日,面对这样一个信息爆炸性增长的世纪,论坛作为互联网最早的应用之一,依然发挥着它强劲的生命力。1.1论坛的发展现状新时期
8、的论坛肩负着更多的使命,高效的信息整合、灵活的沟通方式、有效的知识交流还有资源共享等。论坛正以一种全新的姿态来到这个新的世纪,它以文字为主要的沟通方式,为网友提供了不受地理位置限制的交流空间。它已经成为人与人之间交流的一种形式,它提供一个相互交流、学习的互动平台,能够将分散的信息和分散的智慧都集中调动起来,能使得复杂的事情简单化。1.2本课题研究简述如今,论坛几乎涵盖了我们生活的各个方面。本系统实现的通用论坛系统就提供了较为全面的论坛功能,用户可以发表主题、回复主题、发起投票、参与投票、上传附件、下载附件等,本系统还实现了细粒度的权限控制功能。此外,本系统的开发采用了面向对象的分层架构思想,系
9、统从逻辑上分为四层。领域实体层、DAO层、Service层以及Web层。其中领域实体层是对系统进行领域建模,这个关联着数据库表的设计,是极为重要的一环。而DAO层则是系统的数据逻辑处理,负责与数据库进行交互。Service层负责系统的业务处理逻辑,是系统业务功能的抽象实现。Web层则主要是指MVC模式中的控制器组件,Web层实现获取用户用请求、调用Service层处理业务逻辑以及最终响应用户请求。因此,系统的扩展性和可移植性都非常良好,可以在不用做太大更改的前提下就可以完成系统的升级或者二次开发。1.3论文组织本文首先对本系统使用到的技术和开发工具做了一个简述,然后在第三章里给出系统的总体设计
10、,包括需求分析在内。第四章则给出本系统的详细设计文档以及代码实现,最后还对系统的权限控制功能的实现做详细介绍,并以一个发表主题的请求为例子,对系统的运行细节做了详细的剖析。2系统的架构技术与开发工具2.1系统的框架技术本系统是采用Spring、Struts、Hibernate三大框架来搭建设计的,下面对这三大框架做简单介绍。2.1.1 Spring简介Spring是Rod Johnson为解决企业应用开发的复杂性而创建的,以“不重复研发轮子”为理念的,通过与现有的框架无缝地整合来为J2EE应用的各层提供解决方案的一个轻量级框架15。控制反转(IOC)和面向切面(AOP)是Spring的两个核心
11、技术,Spring通过控制反转来促进松耦合,通过面向切面来实现高内聚。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。2.1.2 Struts简介Struts框架是MVC设计模式的一个具体实现,MVC模式即“模型-视图-控制器”模式。当用户与相应的视图发生交互时,视图将产生一个请求发送给控制器。控制器通过调用模型的方法更改其状态,与此同时,通知所有注册了的视图来对用户界面进行刷新610。2.1.3 Hibernate简介Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以使用面向对象编程思维来操纵数据库1115。
12、Hibernate一共有5个核心接口,Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。22系统的开发环境与开发工具运行环境: Jdk6.0 update13Web应用服务器:Apache Tomcat 6.0集成开发环境: Eclipse数据库系统: MySQL5.0单元测试工具: JUnit界面排版: Adobe Dreamweaver系统架构设计工具: Rational Rose、Microsoft Visio3 系统的总体设计3.1需求分析本系统根据权限的不同,将用户分为四种参与者,游客、注
13、册用户、版主和系统管理员。游客是系统预设的一个匿名用户,拥有回复主题和参与投票的权限,游客要想发表主题就必须注册为会员。会员除了发表主题外,还拥有发起投票,上传附件的权限。 每个论坛子版面设有版主,版主拥有对主题、回复、投票、附件的管理权限,默认的版主为系统管理员。由系统管理员统一管理系统后台,包括论坛分类与版面管理、会员管理、系统配置管理。3.1.1系统的功能需求系统的功能需求从结构上来分为两大块,前台基本业务模块以及后台管理模块,两者相辅相成,共同实现论坛系统的需求。系统的总体需求结构图如下。图3.1系统总体需求架构图3.1.2系统的需求用例图用例是获取需求的一个便捷有效的方法。通过分析功
14、能需求从而设计出来的用例图可以有效的确定需求的范围。用例图将系统看成一个黑盒,从外部执行者的角度来理解系统,通过视图的方式分析系统所需的功能和动态行为,从而将系统的功能需求可视化。下面就是对应着系统的前台业务模块和后台管理模块的两张系统需求用例图,该用例图尽可能准确的规定了系统的需求范围,从而指导系统的开发。图3.2 系统后台管理的用例图图3.3 系统前台用户业务的用例图3.2系统的活动流程活动图是用来描述活动是如何协同工作的。当一个操作必须完成一系列事情,而又无法确定以什么样的顺序来完成这些事情时,活动图可以清晰地描述这些事情。在这里,主要在总体上给出前台业务和后台管理的活动图。3.2.1系
15、统的前台业务活动流程 当一个用户链接到本论坛系统时,如果该用户之前设置了自动登陆,则在通过验证后即以该用户之前的身份登陆论坛系统。此外,用户将以一个游客的身份来到论坛系统。游客可以选择浏览主题回复主题参与投票下载附件等系统功能,或者选择登陆系统以获得更多的功能权限,如果游客尚未注册,则可以选择注册成为会员之后再登陆系统。登陆之后的普通用户除游客享有的功能以外,还另外享有发表主题、发起投票、上传附件等常用的系统功能。如果用户是以版主身份登陆,则除了普通用户拥有的权限之外,还拥有管理本论坛贴子的权限,包括对主题、回复、附件、投票的管理,前提是该用户就是该论坛版块的版主。下面是系统的前台业务活动流程
16、图。图3.4 前台业务模块的活动图3.2.2系统的后台管理活动流程在前台登陆了的用户,经验证是系统管理员帐号。则可以通过在前台面页导航栏上的链接来到后台管理页面。如果尚未登陆的游客或者不是系统管理员的用户,直接在浏览器的地址栏上链接到后台管理页面,则系统将抛出权限不足异常,并且将会取消本次链接请求。当管理员进入后台的统一管理页面,可以通过点击左侧菜单栏的相关链接来管理系统。包括会员管理、权限管理、系统配置管理、论坛分类及版面管理等。下面就是系统的后台管理活动图。图3.5后台管理模块的活动图。3.2系统的业务流程设计系统的活动图从总体上描述了系统的活动状况,通过活动图可以搭建系统的活动骨架。然而
17、,活动图下面的每一个活动都对应着系统的一个业务功能。通过设计系统的业务流程,才能最后实现系统的整体活动流程。流程图便是为了这个目的而存在的。本系统的流程图如若细分,则数目不少,在此只将最基本的两个流程图给出来,分别是用户注册流程以及会员发表主题的流程。3.2.1用户注册流程设计系统通过注册页面收集注册信息,并分别在客户端和服务器端校验注册信息的有效性,在注册成功后自动登陆新注册用户。流程图如下。 图3.6 新用户注册流程图3.2.2会员发表主题流程设计当用户链接到文章发表页面时,系统判断用户是否已经登陆,如果还没有,就链接到用户登陆界面,直至用户登陆后再返回文章发表面页。当用户已经登陆,输入文
18、章信息,系统通过客户端校验文章信息是否完整,验证成功后向系统发送发表主题的请求。系统收到发表新主题的请求后,将新主题保存到数据库,请求处理成功后,通过刷新用户界面信息来响应用户请求。流程图如下。图3.7会员发表文章流程图3.3系统的组件结构本系统除了由(Spring+Struts+Hibernate)三大框架集成实现的领域实体层、DAO层、Service层以及Web层以外,还包括数据库服务系统以及用户界面层。用户界面层(UI)的设计也是本系统中重要的一环,本系统的用户界面包括注册登陆、浏览、发表主题、发表回复、上传附件、个人信息修改和后台管理等页面。本系统的UI设计都是以相关的JSP文件以及J
19、S(JavaScript)文件和CSS(层叠样式表文件)文件配合完成。下面给出本系统的组件结构图。图3.8 系统的组件图3.4系统的数据库设计数据库设计是整个系统设计的重要部分,数据结构的好坏将直接影响到应用系统实现效果和数据操作效率以及能否保证数据的一致性、完整性和安全性。本系统采用Hibernate作为数据访问框架,首先通过设计良好结构的领域实体类,然后由hbm配置文件来完成对象关系的映射工作。由Hibernate的自动建表技术来代替设计数据库表的过程,通过Hibernate来自动管理数据库。做为介绍,在这里只给出一个配置文件和三个数据库表。在这里之所以一个配置文件就可以对应三个数据库表,
20、正是因为Hibernate采用了面向对象建模的思想,通过设计两个子类继承一个父类的方式完成数据库表中类似的关联外键的功能,这样设计不仅能减少数据库设计中冗余字段,更重要的是,它使得数据库表的结构合理、紧凑。这里给出的领域实体类有文章Article、主题 Topic、回复 Reply,其中Article是Topic和Reply的公共父类。与此相关的hbm配置文件和数据库表如下(详细的数据库表可见附录部分,也可以参阅计算机毕业设计网)。配置文件片段1/*这里是bbs_article表的映射*/*这里是bbs_topic表的映射*/*这里是bbs_reply表的映射*/Hibernate根据这个映射
21、文件来管理数据库中如下三张表,分别是bbs_article、bbs_topic、bbs_reply。这三张表是论坛的文章、主题和回复的基本信息的保存,Hibernate将根据实际情况对其进行增加、删除、修改和查询。数据库表1 文章表数据库表2 主题表数据库表3 回复表4 系统详细设计及代码实现4.1系统领域对象的设计系统的领域对象也就是前面所说的领域实体类。领域实体类是在功能需求确认的前提下,通过对需求分析、需求用例建模等已有材料和文档的分析从而抽象出来的领域模型。本系统的领域对象的设计是指POJO(Plain Ordinary Java Objects)设计。POJO通指没有使用Entity
22、 Beans的普通java对象,实际就是普通JavaBeans。POJO通过设置一些private的参数作为对象的属性,然后针对每个参数定义了get和set方法作为访问的接口。本系统所编写的POJO是依据贫血模型的方式来编写的,贫血模型是指在POJO中只提供简单的getter和setter接口来仿问对象的私有属性,而不提供数据逻辑操作接口以及业务逻辑处理操作接口。与此同时,本系统的数据逻辑操作抽取到了DAO层由Hibernate中间件来配合实现,而业务逻辑处理操作则由Spring框架负责实现和管理。此外,类图设计做为系统详细设计中的最主要的方法之一,最接近代码实现的最后一个步骤,类图设计的结构
23、是否精良是接影响到代码的编写质量。本文就以设计类图为主要的方法来实现系统的详细设计16。在本文的类图设计中,由于篇幅有限,往往只能给出类的属性而并没有给出相应的方法。而在这里,对于系统领域对象的类图而言,其方法也仅仅是其私有属性对应的get和set方法,所以就不再给出相应的方法属性了。下面就是系统领域对象的类图,包括User、Group、Role、Permission、Article、Topic、Reply、Vote、Attachment、cofig、Category、Forum等10多个关键的领域对象,详情请看类图结构。4.1.1系统的用户类图设计本系统统一用一个User类来代表系统的四个拥
24、有不同权限的参与者。User类通过与Group类发生内聚关系来实现不同身份的转换,一个用户可以同时属于几个不同的群组。而群组Group类则是权限体系的最顶类,Group类拥有一个或多个角色Role类,而每个Role类又拥有一组权限Permission类。Permission类是权限体系的基层类,它是由资源Resource类以及动作或者说操作 Action类来定义,反过来一个权限Permission类定义了对某一个资源的一个操作权限。本系统可以通过对Group类以及Role类的精细设置来实现多种不同的权限组,再通过对User用户类所拥有的权限组的管理即可完成细粒度很高的权限设置和权限管理功能。整
25、个用户及权限体系的之间的关系,请详见下面的类图结构。图4.1.1 系统的用户及权限类图4.1.2系统的文章相关的类图设计一个论坛,最基本的元素就是文章或者说贴子。在本系统中,文章设计成是主题和回复的父类,它们之间的关系是继承关系。其中,文章跟附件、主题跟投票、主题跟回复之间的关系是内聚关系,即比如说一个主题可以拥有多个回复的意思。而投票跟投票选项之间则是组合关系,即投票是由几个投票选项组合而成,在本系统中,一个投票最少要由两个投票选项组成。本系统还设有一个投票记录的类来记录投票的情况,它与投票选项之间是多对多的关联关系。详情请看下面的类图结构。图4.1.2 系统的文章类图4.1.3系统的论坛分
26、类和论坛版面的类图Category类代表系统的论坛分类,本生系统可以设有多个论坛分类。每个论坛分类可拥有多个论坛版面Forum。而Config类则记录了整个系统的基本配置信息。它们的类图结构如下。图4.1.3系统的论坛分类和论坛版面的类图4.1.4 代码实现由于领域实体共有10多个,做为介绍,在这里给出User、Forum两个类的代码实现。并且由于领域实体类的方法都是类的私有属性对应的get和set方法,在下面的代码片段中就显略了相关的get和set方法。另外,像Article类拥有一个对应的映射文件一件,每一个领域实体都配有一个hbm配置文件,在这里就不再做介绍。代码片段1 User类代码片
27、段public class User implements Serializable private static final long serialVersionUID = 1L;/ - 基本信息private int id;private String loginName;/ 登录名private String password;/ 密码private String email;/ Email地址private boolean active = true;/ 是否是活动的(非锁定)private boolean deleted = false;/ 是否已被删除private Date re
28、gistrationTime;/ 注册时间private Date lastVisitTime; / 最后(上次)访问时间private String lastVisitIpAddr; / 最后(上次)访问时所使用的ip地址private String autoLoginAuthKey;/ 用于自动登陆的一个认证的字符串private String activationKey;/ 锁定用户自己激活帐号所用的激活码private int topicCount;/ 发表的总主题数private int articleCount;/ 发表的总文章数private Set groups = new H
29、ashSet(0);/ 所在的组/ - 个人信息private String nickname;/ 昵称private Sex sex = Sex.SECRECY;/ 性别, 默认为保密private Date birthday;/ 生日private byte avatar;/ 头像private String qq;private String msn;private String comeFrom;/ 来自哪里private String signature;/ 签名代码片段2 Forum类代码片段public class Forum private int id;private Str
30、ing name;/ 名称private String description;/ 描述private int order;/ 显示顺序private int topicCount;/ 总主题数量private int articleCount;/ 总文章数量private Topic lastTopic;/ 最后发表的文章private Category category;/ 所属的分类private User webMaster;/版主4.2系统的DAO层设计与实现DAO是Data Access Object数据访问接口的意思,就是与数据库打交道,它夹在业务逻辑与数据库资源中间。核心J2E
31、E模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个实现类来实现这个接口上对应数据存储逻辑。在本系统的DAO设计当中,首先,要为本系统中所有的领域实体类都设计一个对应的DAO接口,用于声明数据逻辑操作。并且每一个DAO接口都对应编写一个实现类来具体实现实体的数据逻辑操作。此外,在面向接口编程思想的指导下,设计一个GenericDao接口,抽取所有DAO接口的共公方法,让所
32、有的DAO接口都继承GenericDao接口。与此同时,编写一个GenericDaoImpl的实现类来实现GenericDao接口,并且让所有的DAO接口的实现类都继承这个父类。另外,本系统由于是通过Hibernate和Spring的集成来实现DAO层,所以GenericDaoImpl类除了实现GenericDao接口以外,还要继承Spring提供的用于与Hibernate集成的一个HibernateDaoSuport类,通过继承HibernateDaoSuport类,GenericDaoImpl就可以通过获得Spring提供的HibernateTemplate模板类来对相关的领域对象进行增删
33、改查等数据存取操作了。由于篇幅,下面只给出DAO层的接口体系,而不再给出DAO层的实现体系,但是DAO层的实现体系是严格整齐地对应着DAO层的接口体系的,通过接口体系也就能了解到实现体系了。详情请看下图及其注解。图4.2 DAO层的接口体系设计图4.2.1 DAO层的代码实现DAO层的代码实现主要是指实现各个领域对象对应的数据存取操作,包括对数据的增删改查四种操作,并且这四种操作根据业务的需求往往要提供多种形式的实现方法,特别是查询操作,比如为了实现分页的业务需求,就必要在提供查询全部的记录以外再提供查询分页结果数据的方法。在本系统的DAO层设计中,起着承前启后以及框架集成职责的类便是GenericDaoImpl这个总接口实现类,它是个抽象类,各个子实现类都继承于它。各个子实现类在拥有各自独立的数据存取操作的同时,还从GenericDaoImpl中继承了公共的存取操作。只为介绍,下面给出GenericDaoImpl类的实现代码,详情请看代码及其注释部分。代码片段3 GenericDaoImpl类的实现代码/本类使用了泛型技术,通过泛型,使得每个子类继承的是各自的领域对象做为泛型参数的父类public abstract class GenericDaoImpl extends HibernateDaoSupport im
链接地址:https://www.31ppt.com/p-3979929.html