• 1.50 MB
  • 2022-05-17 12:57:10 发布

办公自动化系统的考勤管理模块的设计与实现(1)

  • 53页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
本科毕业论文(设计)院系软件学院题目基于SSH框架的BBS系统的帖子模块的设计与实现学生姓名刘东华学号年级2007级专业软件工程指导教师职称论文提交日期48 南京大学软件学院本科毕业论文摘要通过对BBS的发展过程和趋势以及现阶段国内外Web应用中动态页面技术的分析,开发一个界面简洁高效、用户体验较好和易于扩展的在线论坛系统是十分必要的,因此我们选择使用JSP和SSH框架来开发这个BBS项目。基于SSH框架的BBS系统采用MVC设计模式,利用Struts2控制业务逻辑和表现层的交互,使用Spring的IoC容器来管理Bean的依赖注入,并且采用功能完善的Hibernate框架实现对象的持久化,在前台页面设计上使用了Javascript、Div+CSS、xhEditor等技术增强用户体验。本项目实现了基本的BBS在线论坛系统的常用功能,如浏览帖子、回复帖子、发布帖子、对帖子进行管理以及管理员的后台操作功能。主要分为五个模块:系统管理模块、版区管理模块、搜索模块、统计模块和帖子模块。本篇论文介绍的是帖子模块,主要是实现帖子的业务逻辑操作及相应的前台页面显示。关键词:BBS项目,SSH框架,J2EE48 南京大学软件学院本科毕业论文AbstractBasedontheanalysisofthedevelopmentandthetrendofBBSanddynamicpagesinWebapplicationaroundtheworld,developasimple,efficientandeasytoexpandonlineBBSsystemisverynecessary,SofinallywechosetousetheJSPtechnologyandSSHframeworktodevelopthisBBSproject.TheBBSsystemwhichbasedonSSHframeworktaketheadvantageoftheMVCdesignpatterns,usingStruts2tocontroltheinteractionbetweenbusinesslogicandthepresentationlayer,usingSpring’sIoCcontainertomanageinjectionofthedependedBean,andusingthefullyfunctionalHibernateframeworktoachievethepersistenceofthebeanobject.JavascriptandDiv+CSStechnologyareappliedinthedesignofthefrontjsppagesandusexhEditortoolkittoenhancetheuserexperience.Theprojectimplementsthebasicfeaturesofonlinebbssystem,suchasreadposts,giveareplytoaspecificpost,publishanewpostandmanagethepost.Thisprojectmainlydividedintofivemodules:systemmanagementmodule,sectionandboardmanagementmodule,searchmodule,statisticmoduleandpostmodule.Thispaperistointroducethepostmodule,whichachievestheoperationofbusinesslogicforpostsandthedisplayofthecorrespondingfrontpages.Keywords:BBSproject,SSHframework,J2EEtechnology48 南京大学软件学院本科毕业论文目录摘要IAbstractII目录III第一章概述/绪论11.1项目背景11.2国内外Web应用技术现状11.3论文主要工作/组织结构2第二章技术概述32.1J2EE技术32.1.1JDBC32.1.2JSP42.2SSH技术42.2.1Struts2.x52.2.2Spring2.x62.2.3Hibernate3.x72.3Div+CSS技术82.3.1Div82.3.2CSS92.4Javascript/Ajax/JQuery技术92.4.1Javascript92.4.2Ajax92.4.3JQuery92.5xhEditor技术10第三章基于SSH框架的BBS项目概述113.1项目总体目标113.2项目需求113.2.1一般性需求113.2.2功能性需求113.2.3具体功能点需求133.3项目总体设计163.3.1后台逻辑1648 南京大学软件学院本科毕业论文3.3.2配置文件173.3.3前台页面19第四章基于SSH框架的BBS项目的帖子模块分析、设计与实现214.1帖子模块分析214.1.1Post子模块214.1.2Reply子模块234.1.3Announcement子模块244.2帖子模块设计244.2.1类、方法设计264.2.2数据库设计274.2.3前台页面设计284.3帖子模块实现304.3.1Action层实现314.3.2Service层实现324.3.3DAO层实现344.3.4Model层实现364.3.5数据库实现384.3.6前台页面实现394.3.7其他42第五章总结与展望455.1总结455.2展望45参考文献46致谢4748 南京大学软件学院本科毕业论文第一章概述/绪论1.1项目背景BBS的英文全称是“BulletinBoardSystem”,中文名称即“电子公告板”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果计算机上运行。早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过电脑来传播或获得消息而已。一直到个人计算机开始普及之后,有些人尝试将苹果计算机上的BBS转移到个人计算机上,BBS才开始渐渐普及开来[1]。现在互联网正融入我们的生活,影响和改变着我们的生活。网络提供给我们的不只是一个获取信息的来源,而且还是一个可以相互交流的空间,网上论坛正是一种供人们进行交流的网络空间。它不受时间和空间的约束,论坛用户可以发表自己的观点,一起探讨某个问题。目前,在线论坛已不是新事物,许许多多的别具特色的论坛在网络上随处可见。为了改变网上现存论坛的普遍风格,追加功能,更便于管理,于是开发一套界面友好美观,易于使用的论坛系统。1.2国内外Web应用技术现状作为一种Web应用的BBS系统,传统的静态页面已远远不能满足业务需求,而动态页面正是开发这类系统的关键技术,目前国内外开发最常用的四种动态网页语言是PHP(PersonalHomePage,有的地方也递归缩写为“PHP:HypertextPreprocessor”,超文本预处理器)、ASP(ActiveServerPages)、ASP.NET和JSP(JavaServerPage)。PHP是一种跨平台的服务器端的嵌入式的脚本语言,可以在Windows、UNIX、Linux的web服务器上执行,支持IIS和Apache等一般的Web服务器。它使用很多C、Java、Perl语言的语法,使Web开发者可以迅速写出动态页面,支持目前绝大多数数据库,PHP常与MySQL组合构建中小型Web应用系统。PHP是开源的,你可以不受限制地获得源码,然后根据自己具体项目的需要加入自己的特色功能或者修改、删除已有的功能。微软开发的ASP简单易学,但是只能在Windows平台上运行,通常运行在微软的IIS(InternetInformationServer)应用服务器上,ASP本身功能很有限,必须通过COM组件或ActiveXServerComponents(ActiveX服务器组件)来扩充功能,但开发这些组件复杂困难,技术要求较高。48 南京大学软件学院本科毕业论文ASP.NET同样是微软的产品,它是针对ASP进行的完全重写,是基于微软的.NET平台,解决了传统ASP运行相对PHP、JSP速度较慢的问题,是用于构建Web应用程序的一个完整框架,可选择的编程语言灵活(如VB、C#等或者混合编程),并且由于.NET平台,这个框架支持真正的面向对象编程(OOP)。JSP是由SUN(现已被Oracle收购)公司倡导,许多公司参与一起建立的一种动态网页技术标准,它同PHP、ASP一样也是在HTML中插入Java程序段和JSP标记从而形成JSP文件,编译成字节码然后由服务器解释执行,除第一次访问时要求把JSP文件编译成字节码文件速度较慢外,以后访问都很快。JSP是基于Servlet,Servlet是纯Java代码,可以应用Java的优良面向对象编程特性以及Java众多的类库,但通常编写Servlet繁琐,且表示与逻辑控制耦合在一起,不利于开发和维护,JSP正是为了简化Servlet开发而出现的,运行时也是首先转换成Servlet,然后编译成字节码文件解释执行。目前国内PHP、ASP应用较为广泛,而JSP作为一种较新的技术,国内采用的较少。但在国外,JSP已经是比较流行的一种技术,尤其是电子商务类的网站,多采用JSP。JSP是基于平台和服务器的相互独立的,JSP标签的可扩展性和JSP快平台组件的重要性使JSP为Web数据库应用提出更具竞争力的解决方案[2][3]。1.3论文主要工作/组织结构本论文主要对我们小组完成的这个项目进行了整体介绍,并且详细的阐述了我自己模块的实现。论文共分为五章。第一章概述和绪论主要介绍了项目的背景知识、目前国内外针对这类Web项目的实现方式和优缺点分析比较以及论文的主要工作和组织结构。第二章技术概述主要对这类项目中常用的技术做概要性的介绍,使读者对此类项目的实现技术有大致的了解,便于理解后续内容。第三章主要介绍了我们小组完成的这个项目的整体情况,从项目的总体目标、项目需求、项目的总体设计三个方面进行了阐述,让读者对项目的整体业务流程有清晰的认识。第四章主要介绍了我自己模块的完成情况,从模块分析、设计、实现三个层面对我自己完成的工作进行详细、全面的说明。第五章总结和展望主要阐述了从这次毕业设计中我的收获和这类项目的预期发展趋势。48 南京大学软件学院本科毕业论文最后就是参考文献和致谢。48 南京大学软件学院本科毕业论文第二章技术概述2.1J2EE技术J2EE即Java2平台企业版(Java2Platform,EnterpriseEdition)是由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。其体系结构如图2.1所示,主要包括13种技术规范:JDBC(JavaDatabaseConnectivity)、JNDI(JavaNameandDirectoryInterface)、EJB(EnterpriseJavaBean)、RMI(RemoteMethodInvoke)、JavaIDL/CORBA、JSP(JavaServerPages)、JavaServlet、XML(ExtensibleMarkupLanguage)、JMS(JavaMessageService)、JTA(JavaTransactionArchitecture)、JavaMail、JAF(JavaBeansActivationFramework)[4]图2.1J2EE体系结构图在我们小组的项目中,用到了JDBC、JSP技术。下面分别对着两种技术进行概述。2.1.1JDBCJDBCAPI为访问不同的数据库提供了一种统一的途径,像ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDBC对数据库的访问也具有平台无关性。在数据库访问方式上,我们没有直接使用JDBC连接数据库的方式操作数据库,而是使用hibernate的ORM映射方式来间接使用JDBC操作数据库,具体技术细节详见下文所述。48 南京大学软件学院本科毕业论文2.1.2JSPJSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。由于项目的表现层使用的Struts2,可用的表现层组件可以有多种选择,如JSP、Velocity和FreeMarker,最终我们使用JSP作为项目的表示层,搭配上静态的HTML页面组成了项目的所有表示层页面。2.1SSH技术目前的SSH根据Struts的不同主要分为两种组合,一种是Struts1.x+Spring2.x+Hibernate3.x,另一种是Struts2.x+Spring2.x+Hibernate3.x。由于Struts1.x与Struts2.x有着本质的区别,因此这两种SSH技术在Web应用中表现层上的实现有着很大的不同。Struts1.x是世界上第一个发布的MVC框架,对于Web应用的MVC模式有很深远的意义。该框架以ActionServlet作为核心控制器,整个应用由客户端请求驱动。当客户端向Web应用发送请求时,请求将被Struts1.x的核心控制器ActionServlet拦截,ActionServlet根据请求决定是否需要调用业务逻辑控制器处理用户请求(实际上,业务逻辑控制器还是控制器,它只是负责调用模型来处理用户请求),当用户请求处理完成后,其处理结果通过JSP呈现给用户。对于整个Struts1.x框架而言,控制器就是它的核心,Struts1.x的控制器由两个部分组成:核心控制器和业务逻辑控制器。其中核心控制器就是ActionServlet,由Struts1.x框架提供;业务逻辑控制就是用户自定义的Action,由应用开发者提供。Struts1.x的运行流程如图2.2所示。图2.2Struts1.x运行流程图而Struts2.x则是以WebWork的优秀设计思想为核心,吸收了Struts1.x的部分优点,同时克服了Struts1.x的很多缺点的MVC框架。Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器(用户实现Action类的实例)和用户实现的业务逻辑组件。Struts2.x。在Action实现类方面,Struts1.x要求Action类继承一个抽象基类,是面向抽象类编程而不是面向接口编程;Struts2.xAction类可以实现一个Action48 南京大学软件学院本科毕业论文接口,也可以实现其他接口,使可选和定制的服务成为可能,Struts2提供一个ActionSupport基类去实现常用的接口,即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts2.x的Action。因此Struts1.x的Action与Servlet的API有较高耦合性,而Struts2.x的Action与ServletAPI低耦合(几乎没有耦合),因此便于开发和测试。Struts2.x运行流程如图2.3所示[5]。图2.3Struts2.x运行流程图由于我们小组是使用Struts2.2+Spring2.5+Hibernate3.2开发这个BBS系统的,所以下面分别对Struts2.x、Spring2.x、Hibernate3.x做一个简单的概述。2.2.1Struts2.xStruts2是Struts的下一代产品。是在struts和WebWork的技术基础上进行了合并,全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。Struts2框架的大概处理流程如下:1.加载类(FilterDispatcher)2.读取配置(struts配置文件中的Action)3.派发请求(客户端发送请求)4.调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action)48 南京大学软件学院本科毕业论文1.启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)2.处理业务(回调Action的execute()方法)3.返回响应(通过execute方法将信息返回到FilterDispatcher)4.查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪个jsp页面)5.响应用户(jsp--->客户浏览器端显示)2.2.1Spring2.xSpring是一个开源框架,它由RodJohnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益[6]。Spring作为一个轻量级的MVC框架,具有很多特性,如图2.4所示。图2.4Spring框架概述Core封装包是框架的最基础部分,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。Context(上下文)封装包构筑于Core封装包的坚固基础上:它提供了用一种框架风格的方式来访问对象,有些像JNDI注册表。Context封装包继承了beans包的功能,还增加了国际化(I18N)(用于规范resourcebundle),事件传播,资源装载,以及透明创建上下文,例如通过servlet容器。DAO提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plainoldJavaobjects)都适用。ORM封装包提供了常用的“对象/关系”映射APIs的集成层。48 南京大学软件学院本科毕业论文其中包括JPA、JDO、Hibernate和iBatis。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。Spring的AOP封装包提供了符合AOPAlliance规范的面向方面的编程(aspect-orientedprogramming)实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点象.Net的attribute的概念。Spring中的Web包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servletlisteners进行IoC容器初始化和针对Web的applicationcontext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和webform之间。并且,还可以借助Spring框架的其他特性。2.2.1Hibernate3.xHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任[7]。Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。如图2.5所示。图2.5Hibernateoverview48 南京大学软件学院本科毕业论文Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。2.1Div+CSS技术DIV+CSS是网站标准(或称“WEB标准”)中常用术语之一,div+css是一种网页的布局方法,这一种网页布局方法有别于传统的HTML网页设计语言中的表格(table)定位方式,真正地达到了w3c内容与表现相分离。HTML语言自HTML4.01以来,不再发布新版本,原因就在于HTML语言正变得越来越复杂化、专用化。XHTML语言是一种可以将HTML语言标准化,用XHTML语言重写后的HTML页面可以应用许多XML应用技术。使得网页更加容易扩展,适合自动数据交换,并且更加规整。在XHTML网站设计标准中,不再使用表格定位技术,而是采用DIV+CSS的方式实现各种定位。使用Div+CSS的网页布局,具有以下优点:使页面载入得更快、降低流量费用、修改设计时更有效率、保持视觉的一致性、更好地被搜索引擎收录、对浏览者和浏览器更具亲和力。虽然Div+CSS布局方式具有相对于Table布局很好的优势,但传统的Table布局也有相应的应用领域,Div+CSS不能完全代替Table布局,如有些类似于表格的布局若强制使用Div+CSS就会有些生硬,效果明显没有直接使用Table布局好。在我们的项目中,我们是使用Div+CSS+Table相结合的布局方式。2.3.1DivDiv是HTML中的一个块级元素标签(
),Div元素是用来为HTML文档内大块(block-level)的内容提供结构和背景的元素。Div的起始标签和结束标签之间的所有内容都是用来构成这个块的,其中所包含元素的特性由Div标签的属性来控制,或者是通过使用样式表格式化这个块来进行控制[8]。48 南京大学软件学院本科毕业论文2.3.1CSSCSS(CascadingStyleSheet,层叠样式表或级联演示表),是一组格式设置规则,用于控制Web页面的外观,它也是DHTML的基础。通过使用CSS样式设置页面的格式,可将页面的内容与表现形式分离。页面内容存放在HTML文档中,而用于定义表现形式的CSS规则则存放在另一个文件中或HTML文档的某一部分,通常为文件头部分。将内容与表现形式分离,不仅可使维护站点的外观更加容易,而且还可以使HTML文档代码更加简练,缩短浏览器的加载时间[9]。2.1Javascript/Ajax/JQuery技术在Web编程中不可避免的希望给页面增加丰富的特效或者用户体验,那么Javascript就是一项必须要用到的技术,通过它可以给页面增加动画效果、对用户输入的信息进行验证、也服务器进行异步通信(Ajax)。为了更加简便的访问页面中的元素,我们使用JQuery来操作DOM(DocumentObjectModel,文档对象模型),并且我们可以使用JQuery丰富的各种插件,如图形插件。2.4.1JavascriptJavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司的BrendanEich设计,是一种动态、弱类型、基于原型的语言,内置支持类[10]。2.4.2AjaxAjax(AsynchronousJavaScriptAndXML)即异步JavaScript及XML。通过AJAX,您的JavaScript可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,您的JavaScript可在不重载页面的情况与Web服务器交换数据。AJAX在浏览器与Web服务器之间使用异步数据传输(HTTP请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。AJAX可使因特网应用程序更小、更快,更友好[11]。2.4.3JQueryJQuery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的js库(压缩后只有21k),它兼容CSS3,还兼容各种浏览器(IE6.0+,FF1.5+,Safari2.0+,Opera9.0+)。jQuery使用户能更方便地处理HTMLdocuments、events、实现动画效果,并且方便地为网站提供AJAX交互[12]。48 南京大学软件学院本科毕业论文2.1xhEditor技术作为一个论坛系统,在一些页面中提供在线HTML编辑器是非常必要的,如用户发帖、回复时可以使自己的内容更加具有个性,同时提供格式化内容的功能。现在在线HTML编辑器可以选择的有很多。如比较著名的Fckeditor,它提供的功能是非常丰富的,在文字、图片编辑上可以和微软的word相媲美。但丰富功能的代价是由于代码复杂、繁多,学习曲线陡峭,运行加载慢。虽然现在这个项目为了轻量化,更名为CKEditor,减少了代码数量,运行快乐一些,但根据我们项目特性,我们最终决定使用xhEditor这个在线HTML编辑器,因为xhEditor是一个基于JQuery开发的简单迷你并且高效的可视化XHTML编辑器,可定制性强,兼容IE6.0+,Firefox3.0+,Opera9.6+,Chrome1.0+,Safari3.22+,同时它提供丰富的文档支持[13]。运行效果如图2.6所示xhEditornormal样式xhEditormini样式xhEditorsimple样式图2.6xhEditor运行图示48 南京大学软件学院本科毕业论文第三章基于SSH框架的BBS项目概述3.1项目总体目标该项目主要是实现一个具有优秀负载能力和可定制的在线论坛系统。一个具有优秀负载能力,用户友好的在线论坛系统可以获得较大的用户群和访问量。项目通过实现高性能的在线论坛系统并且提供具有优秀扩展性和可定制性的论坛系统框架,可以用于实现各种主题和内容的在线论坛。3.2项目需求3.2.1一般性需求本项目是一个界面友好、美观、易于使用的论坛系统,具有优秀负载能力和可定制等特点。项目支持的语言:本项目后台程序Java语言编写,以实现强大的功能。前台主要运用JSP+Javascript+CSS+Div编写以追求页面的美观。操作性:本论坛系统必须提供给用户良好的可操作性。包括鼠标操作,键盘操作等基本操作。另外,本论坛系统还会较多运用快捷键,使熟悉本论坛系统的用户在访问效率及方便程度上能有较大提升。安全性:本论坛系统应该保证系统在运行时的安全性问题。运用最大能力,保证用户账户数据安全,不至于用户因为本站系统用户数据、隐私的泄露造成损失。3.2.2功能性需求本论坛系统主要的流程可以分成五部分:账号管理流程,帖子管理流程,管理员管理流程,搜索流程,统计流程。未注册的用户可以通过账号管理流程注册成会员,会员可以管理自己的个人信息,也可以进入帖子管理流程,进行发帖,回帖,管理、收藏、订阅帖子;管理员包括版主,分区版主,超级版主,系统管理员可以进入管理员管理流程,对论坛系统进行各种管理活动。注册会员可以对全站的主题帖进行搜索,查找自己感兴趣的主题进行操作。管理员则在登录以后可以统计功能,进行会员统计,主题帖统计,访问量统计等。会员管理操作如图3.1所示,帖子管理操作如图3.2所示。48 南京大学软件学院本科毕业论文图3.1会员账号管理操作流程48 南京大学软件学院本科毕业论文图3.2帖子管理操作流程3.2.1具体功能点需求根据项目要求,我们小组把整个项目分为5个模块,每人完成一个模块。系统管理模块由吕金负责;版区管理模块由王耀宇负责;搜索模块由朱瀛负责;帖子模块由刘东华负责;统计模块由任建新负责。每个模块分别对应一个子系统,系统管理模块对应系统管理模块子系统;版区管理模块对应版区管理子系统;搜索模块对应搜索引擎子系统;帖子模块对应业务管理子系统;统计模块对应统计子系统。系统总体结构如图3.3所示。48 南京大学软件学院本科毕业论文图3.3系统总体架构系统管理子系统系统管理模块主要进行会员信息自主管理,管理员对会员账号的管理以及管理员对网站基础信息的管理功能。会员通过会员账号管理功能,进行对自己账号各个信息的设置和修改;管理员对会员账号管理功能允许管理员对会员账号进行添加、查询、修改、删除等操作,维护网站,同时还允许管理员对会员账号或IP的封禁。网站基础信息的管理功能允许管理员对网站的基础信息如“友情链接”,“论坛帮助”做出管理。系统管理模块包括会员个人信息管理、管理员会员管理和网络信息设置子模块。会员个人信息管理子模块:提供给网站用户系统登录/注销功能,提供给会员短消息管理、个人中心、个人资料设置等功能。系统登录/注销:会员注册、会员登录、找回密码、注销登录等。短消息管理:“短消息”是论坛会员间交流的工具,信息只有发件人和收件人可以看到,收到信息后系统会给出相应的提示信息,会员可以通过短消息功能与同一论坛上的其他会员保持私人联系。“收件箱”和“发送短消息”中提供了短消息的收发服务;个人中心:查询自己的主题、回复、收藏、订阅,好友管理;个人资料设置:会员登录后,可以使用“个人资料设置”来维护本会员的所有个人信息。管理员会员管理子模块:提供给管理员添加会员、会员管理、禁止会员、禁止IP、会员资料管理、权限管理、查看会员列表等功能。网站信息设置子模块:为网站管理员提供友情链接管理和论坛帮助功能。48 南京大学软件学院本科毕业论文业务管理子系统该模块提供给用户怎样使用此论坛系统以及该系统主要提供给用户的功能,包括两个子模块:帖子模块和帖子管理模块。帖子模块:描述用户进入该系统后根据角色的不同权限可以对帖子进行什么操作。主要的帖子操作有:发布帖子、编辑帖子、浏览帖子、回复帖子、收藏帖子、订阅帖子、推荐帖子、举报帖子、引用帖子、删除帖子。帖子管理模块:描述用户进入该系统后根据不同的权限可以对帖子进行什么管理操作。主要的帖子管理操作有如会员、管理员可以进行主题帖管理、批量主题管理、批量删帖、附件管理。版区管理子系统版区管理子系统主要进行版区的管理,包括了管理员、超级版主和普通版主对于版区、版块、用户、主题等内容的管理。管理员具有最高权限,拥有创建、管理和删除版区的权限,同时对于版区和板块的内容具以及版区内的用户具有管理的权限。超级版主具有本版区内容管理的最高权限。普通版主对于本版块具有最高权限。管理员、版主可以管理用户的权限和操作。对于发表的主题可以修改、删除主题,并对主题进行分类、加精华等处理。版主管理子模块:提供给管理员、版主对于版区内容和用户等进行管理的功能。管理员和版主可以通过网站管理界面登录。管理员具有所有权限,版主仅对于版区以及下属版块具有管理权限。管理员和版主可以在公告区发布公告。在用户管理页面上,管理员和版主可以管理用户在本版的权限,可以对用户进行短期或永久禁止发帖等管理,同时也可以屏蔽某些IP对应的用户。对于主题可以进行修改、加精、删除等管理。版区管理子模块:主要负责管理版区。提供管理员查看、添加、编辑、删除版区和设置版区顺序等功能。版块管理子模块:主要负责管理帖子。提供管理员查看、添加、编辑、删除帖子和设置帖子顺序等功能。统计子系统统计子系统主要包括两大部分:基本情况统计和排行统计。基本情况统计:从论坛的会员和版块的角度对论坛的信息进行汇集,可以使用户对论坛的基本信息有一个总体的了解。包括会员统计、论坛统计。排行统计又包括版块排行统计和用户地域分布统计。版块排行统计:通过“版块排行统计”功能,用户可以了解到关于版块、主题、发帖的一些排行信息。包括版块排行(发帖排行榜、发帖总数、回复排行榜、回复总数)、主题排行(被浏览最多的主题、浏览次数、被回复最多的主题、回复次数)、发帖排行(发帖排行榜、发帖总数、精华帖排行榜、精华帖总数)。用户地域分布统计:搜集用户以及游客的ip信息,对其地域划分进行统计并进行显示。48 南京大学软件学院本科毕业论文搜索引擎子系统搜索引擎子系统完成站内和站外的搜索功能。可以通过关键字搜索相关的帖子,也可以通过相关约束搜索其他用户。还引用Google的搜索栏提供站外搜索功能。搜索引擎子系统包括帖子搜索模块,用户搜索模块和站外搜索模块帖子搜索模块:提供给除游客外的所有用户搜索论坛内主题帖的功能。用户搜索模块:提供给除游客外的所有用户搜索论坛内用户的功能。站外搜索模块:提供给除游客外的所有用户搜索站外信息的功能。3.1项目总体设计由于是使用SSH框架来实现这个BBS系统的,表现层由Struts来控制完成,并且使用Spring的控制反转(IoC)容器来实现依赖注入,对于数据持久层,使用Hibernate完成。根据项目成员数量及模块化原则,把项目分成5个模块,及admin+userAccount对应上述的系统管理子系统(由吕金完成),board对应版区管理子系统(由王耀宇完成),post对应业务管理子系统(由刘东华完成),search对应搜索引擎子系统(由任建新完成),statistics对应统计子系统(由朱瀛完成)。3.3.1后台逻辑对于后台逻辑代码,使用分层结构使代码便于编写、修改、测试和维护。每个模块分为4层:actino层,service层,dao层,model层。对于dao层和service层使用面向接口的编程方式,即针对数据库的操作(dao层)提供一组接口,并且提供一个Hibernate的实现;针对服务提供层(service层)同样提供一组接口和一个默认的实现方式。代码组织结构如图3.4所示。48 南京大学软件学院本科毕业论文图3.4代码组织结构图3.3.1配置文件对于配置文件,为了便于模块化,我们使用一个全局配置文件+各模块配置文件的组织形式,在全局配置文件中位置一些公共的信息以及包含子模块的配置文件。如Struts的配置文件全局配置文件时struts.xml,各模块配置文件是:admin.xml+userAccount.xml、board.xml、post.xml、search.xml、statistics.xml,struts.xml内容如图3.5所示,使用标签包含子模块配置文件。对于Spring的配置文件,全局配置文件为applicationContext-common.xml。对于Hibernate配置文件本来应该有hibernate.cfg.xml,但由于使用了Spring的IoC控制容器来管理,所以Hibernate的配置信息加在了Spring的公共配置文件中,applicationContext-common.xml部分配置信息如图3.6所示。各模块配置文件对应关系如表3.1所示。1.48 南京大学软件学院本科毕业论文1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.图3.5struts.xml配置文信息1.2.4.6.7.9.10.11.12.13.14.16.17.18.19.20.21.22.org.hibernate.dialect.OracleDialect23.24.true25.update26.27.28.29.30.31.32.33.com/nju/forum/post/model/Post.hbm.xml34.com/nju/forum/post/model/Reply.hbm.xml35.com/nju/forum/post/model/Announcement.hbm.xml36.…………37.38.39.40.图3.6applicationContext-common.xml部分配置信息48 南京大学软件学院本科毕业论文配置文件对应模块配置文件名备注/说明Struts系统管理子系统(admin+userAccount)admin.xmluserAccount.xmladmin.xml对应后台管理userAccount.xml对应前台管理版区管理子系统(board)board.xml业务管理子系统(post)post.xml搜索引擎子系统(search)search.xml统计子系统(statistics)statistics.xmlSpring系统管理子系统(admin+userAccount)applicationContext-admin.xmlapplicationContext-userAccount.xmlapplicationContext-admin.xml对应后台管理applicationContext-userAccount.xml对应前台管理版区管理子系统(board)applicationContext-board.xml业务管理子系统(post)applicationContext-post.xml搜索引擎子系统(search)applicationContext-search.xml统计子系统(statistics)applicationContext-statistics.xmlHibernate系统管理子系统(admin+userAccount)无版区管理子系统(board)无业务管理子系统(post)无搜索引擎子系统(search)无统计子系统(statistics)无其他无log4j.propertiesLog4J日志记录配置文件表3.1配置文件组织结构3.3.1前台页面对于前台JSP页面,同样分为一个公共模块+5个子模块的组织形式,公共模块包括resource目录、xheditor目录,其中resource目录中存放项目中公共的网页资源,如公共图片、js文件、css文件等;xheditor目录中存放的是xhEditor的HTML编辑器相关文件。组织结构如图3.7所示。48 南京大学软件学院本科毕业论文图3.7前台页面组织结构48 南京大学软件学院本科毕业论文第四章基于SSH框架的BBS项目的帖子模块分析、设计与实现4.1帖子模块分析由于我负责的是帖子模块,而与帖子模块相关的有帖子、回复、公告。下面分别对着三类实体进行分析。针对帖子,设计和实现一个对帖子操作的实体类以及相应的业务逻辑类。完成发布帖子、编辑帖子、浏览帖子、回复帖子、收藏帖子、订阅帖子、推荐帖子、举报帖子、引用帖子、删除帖子等功能。针对回复,设计和实现一个对回复操作的实体类以及相应的业务逻辑类。完成浏览回复、添加回复、修改回复、删除回复等功能。针对公告,设计和实现一个对公告操作的实体类以及相应的业务逻辑类。完成浏览公告、添加公告、修改公告、删除公告等功能。4.1.1Post子模块PostAction类功能定义,如表4.1所示。序号功能点功能点详细内容1发布帖子用户可以查看感兴趣的版块,并在该模块下编辑并发布普通主题或投票主题。2编辑帖子用户可以对发布过的主题或回复的帖子进行重新编写。3浏览帖子用户可以在具有权限的版块中,对具有权限的主题及其回复内容进行查看。4回复帖子用户可以在具有权限的版块中,在具有回复权限的主题下可以发表帖子,对主题中的内容发表自己的看法和意见。5收藏帖子用户在浏览主题时,可以将感兴趣的主题添加到自己的收藏夹中,之后用户可以通过查看自己的收藏夹来浏览主题,从而方便查看。6订阅帖子用户可以对感兴趣的主题进行订阅,当该主题有内容更新或有新的回复时,系统会自动向用户发送短消息。7推荐帖子用户可以将有价值的主题以短消息的形式推荐给站内用户或以邮件的形式推荐给其他好友。8举报帖子用户可以将有问题的帖子,举报给版主,版主可以通过举报管理来处理该举报。48 南京大学软件学院本科毕业论文9引用帖子当用户在浏览帖子时,可以使用“引用帖子”功能在回复时引用其他帖子的内容。被引用用户的帖子内容将显示到回复帖的内容编辑器中,用户可以在引用内容下方继续编辑其他回复内容。10删除帖子版主或管理员对违反论坛规定的帖子进行删除操作。表4.1PostAction类功能定义PostService类功能定义,如表4.2所示。序号功能点功能点详细内容1主题帖管理版主或管理员可以对所管理的版块中的主题进行操作和管理,如:删除主题、移动主题、高亮显示、关闭主题、打开主题、主题置顶、加入精华、解除精华。2批量主题管理管理员可以通过“批量主题管理”,对查询到的主题进行批量移动、删除、置顶/取消置顶、设置/取消精华、打开/关闭、删除主题中的附件等操作。3附件管理管理员可以通过“附件管理”功能,对论坛中所有的附件进行查询、删除、下载操作。表4.2PostService类功能定义PostDAO类功能定义,如表4.3所示。序号功能点功能点详细内容1添加帖子添加一个/多个帖子2删除帖子删除一个/多个帖子3更新帖子更新一个/多个帖子4查询帖子查询一个帖子5高亮帖子设置一个帖子高亮6精华帖子设置一个帖子精华7置顶帖子设置一个帖子置顶表4.3PostDAO类功能定义Post类功能定义,如表4.4所示。序号功能点功能点详细内容1用户获取或设置帖子的所属用户信息2版块获取或设置帖子的所属版块信息3标题获取或设置帖子的标题信息4内容获取或设置帖子的内容信息5状态获取或设置帖子的状态信息,如置顶状态、精华状态、高亮状态、活动状态、创建时间、最后修改时间6其他包括获取或设置帖子的附件、浏览量等信息表4.4Post类功能定义48 南京大学软件学院本科毕业论文4.1.1Reply子模块ReplyAction类功能定义,如表4.5所示。序号功能点功能点详细内容1加载回复用户浏览帖子时,需要根据帖子信息加载帖子所有的回复信息。2添加回复授权用户登陆系统后浏览帖子是可以对帖子主题进行回复操作。3删除回复授权用户登陆系统后浏览帖子是可以对自己的帖子回复进行删除操作。4修改回复授权用户登陆系统后浏览帖子是可以对自己的帖子回复进行修改操作。表4.5ReplyAction类功能定义ReplyService类功能定义,如表4.6所示。序号功能点功能点详细内容1加载回复调用相应DAO层的服务来加载回复。2添加回复调用相应DAO层的服务来添加回复。3删除回复调用相应DAO层的服务来删除回复。4修改回复调用相应DAO层的服务来修改回复。表4.6ReplyService类功能定义ReplyDAO类功能定义,如表4.7所示。序号功能点功能点详细内容1添加回复添加一个/多个回复2删除回复删除一个/多个回复3更新回复更新一个/多个回复4查询回复查询一个/多个回复表4.7ReplyDAO类功能定义Reply类功能定义,如表4.8所示。序号功能点功能点详细内容1用户获取或设置回复的所属用户信息2帖子获取或设置回复的所属帖子信息4内容获取或设置回复的内容信息5状态获取或设置帖子的状态信息,如创建时间、最后修改时间6其他暂无表4.8Reply类功能定义48 南京大学软件学院本科毕业论文4.1.1Announcement子模块AnnouncementAction类功能定义,如表4.9所示。序号功能点功能点详细内容1加载公告用户浏览版块是,需要加载版块所属的公告信息2添加公告当版块没有公告信息时可以添加公告信息3删除公告当版块有公告信息时可以删除公告信息4修改公告当版块有公告信息时可以修改公告信息表4.9AnnouncementAction类功能定义AnnouncementService类功能定义,如表4.10所示。序号功能点功能点详细内容1加载公告调用相应DAO层的服务来加载公告。2添加公告调用相应DAO层的服务来添加公告。3删除公告调用相应DAO层的服务来删除公告。4修改公告调用相应DAO层的服务来修改公告。表4.10AnnouncementService类功能定义AnnouncementDAO类功能定义,如表4.11所示。序号功能点功能点详细内容1添加公告添加一个公告2删除公告删除一个公告3更新公告更新一个公告4查询公告查询一个公告表4.11AnnouncementDAO类功能定义Announcement类功能定义,如表1.12所示。序号功能点功能点详细内容1用户获取或设置公告的所属用户信息2版块获取或设置公告的所属版块信息4内容获取或设置公告的内容信息5状态获取或设置帖子的状态信息,如创建时间、最后修改时间6其他暂无表4.12Announcement类功能定义4.1帖子模块设计48 南京大学软件学院本科毕业论文由于帖子模块既有前台页面显示又有后台逻辑处理要求,因此针对前台页面动态显示,我们使用JSP+HTML页面显示。针对后台逻辑处理,使用Web-MVC架构模型,分为四层:最高层Action层,通过调用Service层完成页面请求任务;Service层提供本模块所有功能,与数据库相关的操作调用DAO等完成任务;DAO层处理与数据库有关的操作,如增删改查;Model层即实体模型层,提供需要用到的实体类,如Post、Reply、Announcement实体类,为其它层服务。帖子模块系统后台逻辑处理总体架构如图4.1所示。图4.1帖子模块总体结构包图帖子模块整体类图设计如图4.2所示。48 南京大学软件学院本科毕业论文图4.2帖子模块整体类图4.2.1类、方法设计Post子模块类方法设计PostService类:提供创建帖子、删除帖子、修改帖子、加载帖子、设置帖子的属性(精华、高亮、置顶、活动)。设计如表4.13所示。返回值方法名功能参数说明voidcreatePost创建一个帖子,即把一个帖子记录插入数据库中PostpostvoiddeletePost删除一个帖子,即把一个帖子记录从数据库中删除PostpostvoidmodifyPost修改一个帖子,即把一个修改过的帖子记录更新到数据库中PostpostPost[]loadPostsByBoard加载帖子,即通过boardid查询版区中的所有帖子PostpostPost[]loadPostsByUserAccount加载帖子,即通过userid查询版区中的所有帖子PostpostvoidsetTop设置帖子是否置顶Postpost,booleanisTopvoidsetCream设置帖子是否精华Postpost,booleanisTopvoidsetHighlight设置帖子是否高亮Postpost,48 南京大学软件学院本科毕业论文booleanisTopvoidsetActive设置帖子是否活动Postpost,booleanisTop表4.13PostService类方法设计Post类:提供帖子数据信息。属性设计如表4.14所示,方法设计即各种属性的相应getters和settters。属性名数据类型属性说明idint帖子唯一标识useridint用户idtopicString帖子主题contentString帖子内容boardidint版块idisTopboolean是否置顶isCreamboolean是否精华isHighlightboolean是否高亮isActiveboolean是否活动browse_amountint浏览数量reply_amountint回复数量attachmentBlob附件createTimeDatetime创建时间lastEditTimeDatetime最后修改时间表4.14Post类属性设计PostDAO类:提供帖子与数据库的操作功能。其方法设计如表4.15所示。返回值方法名功能参数说明BooleaninsertPost在数据库中插入一个帖子PostpostBooleandeletePost在数据库中删除一个帖子PostpostBooleanupdatePost在数据库中更新一个帖子PostpostPostselectPost根据帖子的一些基本信息获取一个完整的帖子信息(如id、topic)PostpostBooleanisPostExists查询帖子是否存在Postpost表4.15PostDAO类方法设计Reply子模块及Announcement子模块与Post子模块相似,在这就不再熬述。详见实现部分相关内容。4.2.1数据库设计根据上节类、方法设计以及数据库分析,本模块用到三张表,分别是Post(帖子信息表)、Reply(回复信息)、Announcement(公告信息表)。具体设计如下表4.16、4.17、4.18所示。48 南京大学软件学院本科毕业论文字段名类型可为空默认注释idnumber(5)falseuseridnumber(5)falsetopicvarchar2(100)false主题(即标题)contentvarchar2(9999)false内容isTopnumber(1)truefalseisCreamnumber(1)truefalseisHighlightnumber(1)truefalseisActivenumber(1)truefalsebrowse_amountnumber(7)true0浏览数量reply_amountnumber(7)true0回复数量attachmentblobtruenull附件createTimedatetruesysdate创建时间lastEditTimedatetruesysdate最后修改时间remarksvarchar(100)truenull备注(留待扩展)表4.16帖子信息表post字段名类型可为空默认注释idnumber(5)falsepostidnumber(5)false帖子idcontentvarchar(9999)falseuseridnumber(5)false回复用户idcreateTimedatetruesysdatelastEditTimedatetruesysdate表4.17回复信息表reply字段名类型可为空默认注释idnumber(5)falseboardidnumber(5)falsetopicvarchar(100)falsecontentvarchar(9999)falsecreateTimedatefruesysdatelastEditTimedatefruesysdate表4.18公告信息表announcement4.2.1前台页面设计根据本模块具体需求,前台页面主要有帖子浏览页面、发布新帖页面、添加回复页面,相应的概念图如图4.3、4.4、4.5所示。48 南京大学软件学院本科毕业论文图4.3帖子浏览界面图4.4发布新帖界面48 南京大学软件学院本科毕业论文图4.5添加回复界面4.1帖子模块实现由上述3.3节项目总体设计,我们对这个整个项目的设计与实现有了一个清晰的认识,又由上面4.1节帖子模块分析、4.2节帖子模块设计针对帖子模块的具体分析与设计,我自己的模块——帖子模块也清晰的展现出来了,下面将详细说明我的帖子模块的具体实现方式,根据模块化分层方式分为4层(Actino层、Service层、DAO层、Model层)进行说明,首先看一下我的帖子模块后台逻辑代码详细组织结构图,如图4.6所示。48 南京大学软件学院本科毕业论文图4.6帖子模块后台逻辑代码组织结构4.3.1Action层实现Actino层包括三个Java实现文件:PostAction.java、ReplyAction.java、Announcement.java,分别完成对帖子、回复以及公告的操作提供高层服务。Action层通过调用Service层提供的服务来完成业务逻辑处理功能。如PostAction中有一个增加帖子功能的方法如下图4.7所示。核心代码就是根据表单信息创建一个新的帖子,然后调用Service层中PostService类的createPost()方法把这个新创建的帖子加到数据库中,如果操作成功返回SUCCESS(ActionSupport类中实现的Action接口中的字符串常量),然后根据Struts的配置文件请求转发到版块浏览页面进行显示更新过的帖子信息。48 南京大学软件学院本科毕业论文1.public String addPost() {  2.    //get userAccount from session  3.    Map session = ActionContext.getContext().getSession();  4.    UserAccount userAccount = (UserAccount)session.get("userAccount");  5.    //get the board  6.    board = boardService.getBoard(bid);  7.    //create the post to insert into database and   8.    // go to the board page if success and go to error page if failed.  9.    Post post = new Post();  10.    post.setTopic(post_topic);  11.    post.setContent(post_content);  12.    post.setUser(userAccount);  13.    post.setBoard(board);  14.      15.    if (!this.postService.createPost(post)) {  16.        return ERROR;  17.    }  18.    return SUCCESS;  19.}  图4.7PostAction代码片段之addPost方法4.3.1Service层实现Service层包括6个Java文件即:PostService.java、PostServiceImpl.java、ReplyService.java、ReplyServiceImpl.java、AnnouncementService.java、AnnouncementServiceImpl.java。其中包括3个接口和3个实现类。接口中定义了该层可以提供的服务,而实现类中完成定义服务的实现方式。Service层中关于数据库的操作是调用DAO层中的服务来实现的。PostService提供的服务如图4.8所示。ReplyService提供的服务如图4.9所示。AnnouncementService提供的服务如图4.10所示。图4.8PostService提供的服务48 南京大学软件学院本科毕业论文图4.9ReplyService提供的服务图4.10AnnouncementService提供的服务Service层中大多数服务都是与数据库操作相关的,因此要调用DAO层中相应的服务来完成逻辑处理的,如下图4.11所示的PostServiceImpl实现片段,包括了对帖子的各种操作,如数据库的增删改查等等。1.public class PostServiceImpl implements PostService {  2.      3.    private PostDAO postDAO;  4.  5.    /** 6.     * the implementation of {@link com.nju.forum.post.service.PostService#createPost(Post) createPost} 7.     */  8.    public boolean createPost(Post post) {  9.        return this.postDAO.insertPost(post);  10.    }  11.      12.    /** 13.     * the implementation of {@link com.nju.forum.post.service.PostService#deletePost(Post) deletePost} 14.     */  15.    public boolean deletePost(Post post) {        16.        return this.postDAO.deletePost(post);  17.    }  18.  19.    /** 20.     * the implementation of {@link com.nju.forum.post.service.PostService#modifyPost(Post) modifyPost} 21.     */  22.    public boolean modifyPost(Post post) {  23.        return this.postDAO.updatePost(post);  24.    }  图4.11PostServiceImple中的代码片段48 南京大学软件学院本科毕业论文4.3.1DAO层实现DAO层主要完成对数据库的操作功能。有6个文件,其中包括3个接口:PostDAO.java、ReplyDAO.java、AnnouncementDAO.java和3个实现类(放置在dao包下的hibernate子包下,因为是通过Hibernate来实现针对数据库的操作):PostDAO4Hibernate.java、ReplyDAO4Hibernate.java、AnnouncementDAO4Hibernate.java。接口中定义了该层可以提供的服务,而实现类中完成定义服务的实现方式(通过Hibernate实现的方式,以后可以通过其他方式如轻量级数据库持久化解决方案iBATIS通过实现这些接口从而提供其他实现方法)。PostDAO提供的服务如下图4.12所示。ReplyDAO提供的服务如下图4.13所示。AnnouncementDAO提供的服务如下图4.14所示。图4.12PostDAO提供的服务图4.13ReplyDAO提供的服务48 南京大学软件学院本科毕业论文图4.14AnnouncementDAO提供的服务在实现类中,对于简单的数据库操作我使用了SpringFramework中的HibernateDaoSupport类的getHibernateTemplate方法获得一个HibernateTemplate进而操作持久对象的增删改查,如下图4.15删除一个帖子的数据库操作的实现。而对于复杂的数据库操作,通常可以通过选用Hibernate中的HQL、Criteria、SQL三种中的一种完成操作,我选用的是HQL,因为这种方式具有结构清晰、面向对象、与SQL相似等特性。如下图4.16根据帖子指定属性名称获得指定记录条数的帖子记录。1.public boolean deletePost(Post post) {  2.    if (post == null)  3.        return false;  4.    boolean result = false;  5.    try {  6.        this.getHibernateTemplate().delete(post);  7.        result = true;  8.    }  9.    catch (DataAccessException e) {  10.        e.printStackTrace();  11.        result = false;  12.    }  13.  14.    return result;  15.}  图4.15简单的数据库操作示例48 南京大学软件学院本科毕业论文public List getLimitedPostsByProperty(String propertyName, boolean isAscend, int size) {  1.        Session session = this.getSession(true);  2.        List cList = new ArrayList();  3.        String HQL = "";  4.        if (isAscend) {  5.            HQL = "select post from Post as post order by post." + propertyName + " asc";  6.        }  7.        else {  8.            HQL = "select post from Post as post order by post." + propertyName + " desc";  9.        }  10.        try {  11.            Query query = session.createQuery(HQL);  12.            query.setFirstResult(0);  13.            query.setMaxResults(size);    14.  15.            cList = query.list();  16.        }  17.        catch (HibernateException e) {  18.            e.printStackTrace();  19.            log.error("getLimitedPostsByProperty ERROR!!!");  20.        }  21.        finally {  22.            session.close();  23.        }  24.        return cList;  25.}  图4.16复杂的数据库操作示例4.3.1Model层实现Model层主要由描述业务逻辑实体的类组成,有6个文件,包括3个Java文件:Post.java、Reply.java、Announcement.java和3个相应的Hibernate映射文件:Post.hbm.xml、Reply.hbm.xml、Announcement.hbm.xml。其中3个Java类文件主要就是描述业务逻辑实体的属性以及为了便于Hibernate操作实体属性的相应的get、set方法。如Post.java类中有如图4.17所示的这些属性(相应的get/set方法省略了)。另外3个是和实体类对应的Hibernate映射文件,我采用的是使用xml映射文件的方式完成从类映射到表的方式,即通过类结构信息自动生成相应的数据库表结构(这比直接在Java文件中通过注解的方式添加对应的映射关系要好一些)。映射文件是这一层的关键,在映射文件中我添加了一对多单向关系、一对一单向关系等关系,从而使用了Hibernate作为面向对象的数据持久化解决方案特性,避免在业务逻辑处理部分自己处理这些复杂的依赖关系,减轻了不少工作量。Post的映射文件内容下图4.18所示。Reply的映射文件内容下图4.19所示。Announcement的映射文件内容下图4.20所示。48 南京大学软件学院本科毕业论文public class Post {    1.    private int id;  2.    private UserAccount user;  3.    private Board board;  4.    private String topic;  5.    private String content;  6.    private int isTop;  7.    private int isCream;  8.    private int isHighlight;  9.    private int isActive;  10.    private int browse_amount;  11.    private int reply_amount;  12.    private Blob attachment;  13.    private Date createTime;  14.    private Date lastEditTime;  15.    private String remarks;    16.    private Set replies;  17.  18.    /** 19.     * The default empty constructor 20.     */  21.    public Post() {  22.        this.createTime = new Date();  23.        replies = new HashSet();  24.    }  图4.17Post类的代码片段,包括帖子属性1.  2.      3.          4.              5.          6.          7.          8.          9.          10.          11.          12.            0  13.          14.          15.            0  16.          17.          18.            0  19.          20.          21.            0  22.          23.          24.          25.          27.          28.          29.          31.              32.              33.          34.      35.  图4.18Post类的Hibernate映射文件Post.hbm.xml内容48 南京大学软件学院本科毕业论文  1.      2.          3.              4.          5.          6.          7.          8.          9.          10.      11.  图4.19Reply类的Hibernate映射文件Reply.hbm.xml内容1.  2.      3.          4.              5.          6.          7.          8.          9.          10.          11.          12.      13.  图4.20Announcement类的Hibernate映射文件Announcement.hbm.xml内容上面的映射文件中,id生成方式我都是使用native,即由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成策略,对于MySQL,它实际是使用identity,对于Oracle(我项目里使用的数据库)实际是使用sequence,如果没有指定一个sequence的话,Hibernate就会使用一个全局的sequence(Hibernate把他命名为HIBERNATE_SEQUENCE),即全部主键之都依据这个序列,在这里为了操作简便我便使用了这个默认的序列作为主键生成器。对于一对多,可以选择的是list、set等,我在这里选用了set,因为对于帖子里的回复,我规定是不能够重复的。inverse="true"说明Post这个类不维护或不控制Reply信息,控制权转交给Reply控制。lazy="false"在这里是禁止使用懒加载模式,因为如果使用懒加载模式会出现一些问题,现在还没有解决。order-by="createTimeasc"是让查询的结构按照回复的创建时间加入到Post类中的replies这个Set中,查询结果乱序问题。4.3.1数据库实现由于我是先分析业务逻辑实体以及相应的关系,进而实现业务逻辑实体,即Model层中的3个实体类,然后通过个实体类的相应映射文件完成从类到表的映射,由Hibernate自动帮我完成数据库的建表的操作。由Hibernate自动建立的表结构如下图4.21、4.22、4.23所示。48 南京大学软件学院本科毕业论文图4.21post表结构图4.22reply表结构图4.23announcement表结构4.3.1前台页面实现由于我这个模块的主要工作是后台逻辑处理,所以前台页面要少一些,主要包括addpost.jsp(添加帖子的界面)、showpost.jsp+showpost_login.jsp(显示帖子信息的界面,前面一个是未登录的匿名用户显示界面,后一个是已登录用户的显示界面,登陆和未登录用户浏览帖子时显示的界面内容是不一样的,如未登录用户的浏览界面最下方是看不到回复帖子界面)、error.jsp(处理出错信息的界面),下面对这些页面分别进行说明。当用户浏览版块信息时,可以再上面点击“新话题”即可进入addpost.jsp页面,addpost页面内容如下图4.2448 南京大学软件学院本科毕业论文所示。addpost.jsp页面内主要就是一个表单,里面可以填写标题信息、内容信息(内容信息由于是使用xheditor,需要添加class样式信息class="xheditor-simple",在此之前需要导入xheditor要用到的两个js文件:jQuery-1.4.2.min.js和xheditor-1.1.6-zh-cn.min.js)图4.24addpost页面内容对于帖子浏览界面,showpost.jsp与showpost_login.jsp大致相同,显示效果如图4.25所示。图中数据的显示是使用Struts2的标签完成的,如显示发信人,使用
发信人:
,对于多条回复的处理是使用循环标签……来循环输出显示。48 南京大学软件学院本科毕业论文图4.25showpost显示页面部分内容对于错误页的处理采用一个简单错误页提示信息的处理方式完成。其处理代码如图4.26所示。通过从url的parameter中获取错误代码,然后进行输出显示。1.2.

错误信息:

3.4.5.6.

加载帖子出错了。。。

7.8.9.

加载帖子出错了,你骗我你登陆了。。。

10.11.12.

添加回复出错了,请重试~~~

13.14.15.

添加帖子出错了,请重试!!!

16.17.18.

我不知道出什么问题了,不要问我,我不懂!!!

19.20.21.

出问题了

22.
23.24.图4.26error.jsp错误页处理代码48 南京大学软件学院本科毕业论文4.3.1其他对于用户的输入数据,我们必须要进过验证才能对其进行处理或存储。首先我们必须了解一些常见的Web安全问题,如SQL注入、跨站脚本(钓鱼攻击)、表单漏洞、上传漏洞、网页木马(恶意代码)等,然后才能对其进行安全性的验证。为了便于验证,我使用了jsvalidation这个验证框架,其实它就是一组Javascript函数,首先在项目WebRoot根目录下放置3个文件validation-config.dtd(validation-config.xml的DTD验证文件)、validation-config.xml(jsvalidation的配置文件)、validation-framework.js(jsvalidation的主文件)。validation-config.xml配置文件配置内容片断如图4.27所示。需要在验证的jsp页面的表单中
开始标记中添加一些信息:onsubmit="returndoValidate(this)",并且field的name值要与form表单中的表单元素的name值一致。1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.图4.27jsvalidation配置文件部分信息由于对于用户名我是定义它的值必须是一个合法的Emial字符串,而对于密码必须是普通字符(英文大小写字母,数字,下划线的组合),这样就可以防止用户输入一些SQLInject数据(例如常见的and1=1、and‘a’=’a、Unionselect等),使“数据”变成“代码”改变数据库的预期执行行为。HTML编辑器对于BBS系统而言还是很重要的,使用HTML编辑器就可以对我们输入的内容进行48 南京大学软件学院本科毕业论文美化和个性格式化,如增加一个连接方便别人直接点击连接到达你预期的位置,插入一幅图片使内容更加丰富,而且功能强大的还可以插入音频、视频以及Flash等多媒体材料,让你的内容表达的更加生动形象、优美典雅。如图4.28、4.29、4.30所示,使用了一些HTML编辑器可以丰富你输入的内容。图4.28mac.pcbeta上的HTML编辑器图4.29bbs.pcbeta上的HTML编辑器48 南京大学软件学院本科毕业论文图4.30cnblog上的HTML编辑器而我选用的HTML编辑器就是xhEditor,这是一款由国人基于JQuery开发的轻量级的HTML编辑器,即它运行效率高、加载速度快、文档丰富并且易于定制,如使用默认完全样式、多行完全样式、简单样式、迷你样式、自定义详细参数样式。如下图4.31所示。图4.31xhEditor的5种样式48 南京大学软件学院本科毕业论文第五章总结与展望5.1总结通过这次论文的撰写,不仅使我对这类项目的完整解决方案有了清晰的认识,学会了很多新知识、新技能,而且更重要的是让我懂得了做项目要根据具体的需求以及项目各成员技能水品灵活的选择合适的编程方法实现。在写论文的过程中,让我对我们小组实现的这个项目有了更加深刻的认识和了解,使我更加注重文档的重要性,以前我一般只专注于写代码,对于文档工作非常厌烦,导致项目后期遇到很多问题。这次的毕业设计项目是在东软实训老师王大瑞的严格监督下完成的,从需求、设计、编码及测试,我们都严格按照预定的工作流程完成,有了完整准确的文档,我们虽然在前期花了不少时间处理文档,但开始写代码时由于有了文档的支持,代码完成的很快,质量较高,避免了一些容易出现的问题,而且通过对照文档可以知道自己代码中可能存在的问题,用文档记录下来留待后续工作解决。同时也让我知道了撰写论文的严谨性和求实性。论文中的每字每句都要有固定严格的格式要求,甚至标点符号也要清晰准确,每张图表都要有图表名称等等。5.2展望随着互联网的发展,Web应用领域中的BBS类型系统将更加注重用户体验,从Web发展的历程中我们知道从最初的C/S架构发展到时下流行的B/S架构,但毕竟B/S架构的客户端是在浏览器中实现的,界面效果没有C/S架构的丰富炫丽,因而最近几年出现的RIA(RichInternetApplications)富互联网应用(具有高度互动性、丰富用户体验以及功能强大的客户端)将慢慢变得流行,会吸进越来越多的开发者加入到这个阵营中。现在的RIA平台有Flex(Adobe公司的,基于Flash技术)、Silverlight(微软公司的,基于WPF技术)、JavaFx(Oracle公司的,基于Java技术)。48 南京大学软件学院本科毕业论文参考文献[1]百度百科-电子公告板.http://baike.baidu.com/view/.html[2]Perl、PHP、ASP、JSP技术比较.http://www.williamlong.info/archives/460.html[3]ASP、JSP、PHP、.NET技术的比较.http://hi.baidu.com/haungshiyu123/blog/item/44b77fefc776eb2.html[4]百度百科-J2EE.http://baike.baidu.com/view/1507.htm[5]Struts2权威指南:基于WebWork核心的MVC开发.http://blog.csdn.net/mr_von/archive/2008/10/06/.aspx[6]百度百科-Spring.http://baike.baidu.com/view/23023.htm[7]百度百科-Hibernate.http://baike.baidu.com/view/7291.htm[8]百度百科-Div.http://baike.baidu.com/view/26140.htm[9]百度百科-CSS.http://baike.baidu.com/view/15916.htm[10]百度百科-Javascript.http://baike.baidu.com/view/16168.htm[11]百度百科-Ajax.http://baike.baidu.com/view/1641.htm[12]百度百科-JQuery.http://baike.baidu.com/view/.htm[13]百度百科-xheditor.http://baike.baidu.com/view/.htm48 南京大学软件学院本科毕业论文致谢在论文即将完成之际,敲下“致谢”两个字时,心中无限感慨。在这三个月的艰辛但又充实的毕设过程中,我不仅仅收获了做项目的经验,而且更让我懂得了团队协作的重要性。在这期间,我获得了很多帮助,需要感谢的人太多了,实在无法用几句简单的言语表达我心中的真诚谢意。首先,我要特别感谢我的项目指导导师王大瑞老师,他是一名出色的东软国际实训老师,工作认真负责,对我们的问题总是细致入微的解答,每天敦促我们完成当天的工作任务。所以我才能在规定的时间内很好的完成毕业设计项目。其次,我还要感谢我们软院的全体老师。眨眼间大学的四年学习生活即将结束,我从刚进入大学时对IT这个行业几乎一点都不懂到现在大致有了一个清晰的认识,这应该感谢软院的全体老师们,是您们辛勤的栽培,孜孜不倦的教诲带领我们一步一步进入这个充满机遇和挑战的领域。再次我还有感谢曾经帮助过我的同学们以及我们小组的其他四名成员。做项目的过程中我遇到了不少关于技术方面的问题,通过同学们热心帮助我都解决了。当然小组成员之间的互相信任和相互理解也是需要感谢的。最后我还要感谢参与答辩和审阅论文的老师们,您们辛苦了!刘东华2011年5月16日48