【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现

【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现

ID:479705

大小:442.14 KB

页数:34页

时间:2017-08-09

上传者:U-944
【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现_第1页
【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现_第2页
【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现_第3页
【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现_第4页
【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现_第5页
资源描述:

《【计算机科学与技术专业】【毕业设计】一个简单网络论坛系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

(20届)本科毕业论文一个简单网络论坛系统的设计与实现 摘要:Java技术随着Internet的迅猛发展,已经成为软件业的主流技术。为了编码的规范化和标准化,各种框架技术不断涌现出来,其中最有名的是Struts2、Spring和Hibernate。Struts2.0版本是在2007年推出的全新框架,它改进了Strutsl的一些主要不足。Struts2比Strutsl更加简单,更加灵活,例如它取消了ActionForm组件、支持OGNL语言,支持多种视图技术,如JSP,FreeMarker,等。Hibernate3借助新的HibernateAnnotation库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java类中,并提供一种强大及灵活的方法来声明持久性映射.本文首先讨论了Struts2、Spring2和Hibernate基础及其相关技术,包括各个架构的关键支撑技术。最后在BBS论坛系统中应用了Struts2、Spring和Hibernate整合技术。关键字:Java;Struts;Spring;JSP;BBS论坛 TheDesignandImplementationofASimpleBBSSystemAbstract:WiththerapiddevelopmentofInterne,Javatechnologyhasbecomeamainstreamtechnologyofthesoftwareindustry.Inordertoprocessthenormalizationandstandardizationincoding,frameworkstechnologycontinuestoemerge,themostfamousofthemistheStruts2,SpringandHibernate.Struts2.0versionislaunchedin2007,anewframework,whichimprovesthemajordeficienciesinStrutsl.Struts2ismorethansimpleStrutsl,moreflexible,forexample,itcanceledtheActionFormcomponentandsupportsOGNLlanguage,supportsmultipleviewtechnologiessuchasJSP,FreeMarker,andsoon.WiththehelpofnewHibernateAnnotationdatabase,youcanmapdistributionofalltheoldfilesinone-time-everythingwillbedefinedinaccordancewithyourthoughts-commentdirectlyembeddedintoyourJavaclass,andprovidesapowerfulandflexiblewaytodeclarepersistentmapping.ThisarticlefirstdiscussestheStruts2,Spring2andHibernatebasedandrelatedtechnologies,includingthekeysupportingtechnologiesofeachstructure.Finally,appliedStruts2,SpringandHibernateintegrationtechnologyinBBSforumsystem.Keywords:Java;Struts;Spring;JSP;BBS 目录1绪论12基本技术介绍23网络论坛详细设计53.1需求分析53.2总体设计53.3实体类设计与实现63.4网络论坛的基本流程93.5网络论坛各页面功能103.5.1网络论坛首页Article-list.jsp详细功能及描述103.5.2显示图书详细信息bookShow.jsp页面详细功能及描述103.5.3用户发帖Article-addInput.jsp页面详细功能及描述103.5.4网络论坛用户登录User-login.jsp页面详细功能及描述103.5.5网上论坛注册User-regist.jsp页面详细功能及描述103.5.6帖子回复ArticleBack-addInput.jsp页面详细功能及描述103.5.7帖子删除Article-delete.jsp页面详细功能及描述114系统实现124.1游客注册功能124.2用户登录功能154.3游客的操作164.3.1浏览论坛的所有版块164.3.2浏览论坛帖子的信息174.3.3文件下载194.4普通用户的操作204.4.1用户信息的修改204.4.2添加版块214.4.3发表帖子224.4.4回复帖子234.4.5文件上传234.5管理员的操作255开发工具与环境275.1JDK275.2MyEclipse27 5.3Tomcat275.4MySQL数据库275.5Log4j276总结28致谢29参考文献3033 1绪论网络论坛专业叫法叫做BBS,是用户可以交换信息的系统,各地的用户都可以通过本地的业余BBS站与远在异地的网友互通信息。在国外,1978年在美国芝加哥便开发出了最早的BBS系统,但只是基于8080芯片的CBBS/Chicago(ComputerizedBulletinBoardSystem/Chicago。直到1983年,通CapitalPCUserGroup(CPCUG)的CommunicationSpecialInterestGroup会员的努力,改写出了个人计算机系统的BBS。我国直到1995年,随着计算机及其外设的大幅降价,BBS才逐渐被人们知道。但是之后便以惊人的速度发展。国内的BBS系统大致分两类:一类是有商业性质的。一般是有大公司建立,人们利用其交流对商品的看法,解决商品的使用等问题。一类是个人或小型集体建立的。有商业性质的BBS要缴纳一笔费用,而非商业性质的网络论坛一般都有志愿者开发,他们推动了中国计算机网络的健康发展,为广大网友提供信息交流的平台。随着BBS系统的发展,国内已经出现了一些多线站,一次可以允许多个用户同时访问,解决了多人同时拨号一个站台发生冲突的问题。随着WEB2.0时代的到来,BBS将朝着以下两个方面发展:(1)BBS论坛系统将朝着即时性方面发展。使论坛成员在不用刷新页面时就可以看到别人刚刚发的帖子。(2)BBS论坛系统也将朝着图形化方向发展。通过外形的不同来区分不同社区的朋友而不是通过ID。3333 2基本技术介绍本次论坛将采用Java程序语言后台开发,整合Hibernate,Struts2,Spring应用框架,使用JSP作为前台页面的实现,采用jQuery和Javascript技术进行前台开发,MYSQL作为数据库系统,Tomcat作为服务器,将实现一个提供大家交流的系统,使用户可以充分交流自己的知识,看法,经验。MVC设计模式。MVC设计模式将应用程序分为模型,视图,控制器三个部分,按照模型层,视图层,控制层进行分解,从而使得整个系统责任明确、接口清晰,加快了设计开发过程。模型层就是指业务逻辑的处理和数据储存。它分为两层:业务逻辑模型和数据模型。模型接收视图的数据,并返回最终的处理结果。数据模型是指对数据的持久化,它是线路对视图和模型的交换的支持。实现时把“做什么”和“怎么做”分离,这样可以实现业务逻辑的重用。视图层主要用来展现用户所需的数据,他是用户和系统进行交互的界面,这部分工作一般可以由美工人员进行开发和维护,一般可以采用HTML页面,JSP等技术。一般来说,视图只接收来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。MVC设计模式对于视图的处理仅是视图的采集和处理,以及用户的请求而视图上业务的处理,业务流程的处理和状态的改变交个模型层来处理。视图部分大致的处理流程是:页面模板定义布局,视图标签的具体内容,而页面布局初始化并加载页面。用户部件提交参数,通过表示层的校验,将数据提交给业务实体,即模型。控制层是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层就像一个中转站,从用户那里接收请求然后根据参数将模型与视图匹配,将选择符合要求的视图转发给用户。Java开发WEBApplication有几种符合MVC设计模式的开发方式:  1:JSP+Servlet+JavaBean(EJB)2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)3:SSH(Struts+Spring+Hibernate)[1]。Hibernate的JDBC封装和注释简介。本次网络论坛的开发将使用这些目前广泛运用的开发技术。利用Hibernate对JDBC进行了非常轻量级的对象封装,避免去写使用JDBC连接数据库的重复的代码和SQL语句,可以使用面向对象的思维来对数据库进行增删改查等操作。传统的Hibernate的配置依赖于外部XML文件,数据库映射是启动时加载XML映射文件进行的。这需要写大量的Hibernate映射文件。Hibernate注释巧妙的借助HibernateAnnotation库,讲一切的映射关系一注释的形式嵌入到Java类中,强大而且灵活。Hibernate核心接口[2]:Session接口。Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。SessionFactory接口。SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。Configuration接口。Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。Query和Criteria接口。Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。33 Struts简介。利用Struts2接受客户端的参数,根据请求的参数转发请求给适当的控制器,来控制视图的转发,是结构层次分明,可重用性高。Struts的作用避免了在JSP页面当中写太多的代码,做到保持JSP的界面整洁,同时可以实现MVC模式,Struts的根本作用就是方便以后对程序的修改。在视图层可以使用JSP及其标签外,Struts2也提供了强大的标签库。在模型层,Struts提供Action对象,来管理业务逻辑的调用实现分离逻辑业务。Struts通过配置struts.xml很条理地帮你实现了上述事情,减轻了很多工作量,Strust2在Struts1的基础上,增加了很多东西,标签库进行了扩充,实现上传下载文件非常方便等等[3]。Spring简介。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务,Spring则完全是一种架构型的框架了,它不属于J2EE应用中的任何一个层,但它提供了对象依赖注入的思想,并且为每个层中遇到的实际问题提供了大量现成的模板类,使用这些模板类的方法很easy,大多数情况下只需要你在配置文件里配置一下就可以实现诸如事务管理或安全性控制这样的复杂问题。Spring通过一种称作控制反转的技术。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。Spring提供了面向切面的丰富支持,允许通过分离应用的业务逻辑操作与系统操作。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。通过使用SpringAOP,Hibernate的增删改查之前开session,和之后的关闭session交给了Spring,减少了程序员的工作量并且并与维护[4]。JSP简介。JavaEE环境中的JSPAPI是一个服务器端的脚本。JSP提供了一个被嵌入到HTML的Java语言片段,达到与服务器交互的目的[5]。Javascript与jQuery简介。JavaScript被设计用来向HTML页面添加交互行为,是一种脚本语言(脚本语言是一种轻量级的编程语言)。在HTML基础上,使用Javascript可以开发交互式WEB网页。Javascript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。jQuery是轻量级Javascript脚本库,熟悉使用jQuery可以很容易写出兼容各种浏览器的页面[6]。jQuery使用户能更方便地处理HTMLdocuments、events、实现动画效果,并且方便地为网站提供AJAX交互。本次网络论坛系统使用Struts2负责MVC模式里的“C”,控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层表现。实现本网络论坛的业务逻辑层以DAO层为基础,通过DAO组件的包装,完成系统所需要的业务逻辑。而DAO层负责与持久化对象交互。该层封装了数据的增删改查等操作。DAO模式需要为每个DAO组件编写DAO接口,同时至少提供一个实现类,根据不同的需要,可能有多个实现类。用Spring容器代替DAO33 工厂,完全避免了使用工厂模式,因为Spring本身是个非常强大的工厂,可以让Spring充当DAO工厂。无需程序员自己实现工厂模式,只需将DAO组件配置在Spring容器中,由ApplicationContext负责DAO组件的创建即可。借助于Spring提供的依赖注入,其他组件甚至不用访问工厂,一样可以直接使用DAO实例。本系统采用B/S三层结构,使用JSP技术进行动态页面设计,运用JavaBean对程序的关键代码进行分装,如对实现分页功能的代码进行分装。用Javascript,Struts技术实现对注册,登录失败时的反馈信息。使用Tomcat作为WEB服务器,MySQL作为数据库管理系统[7]。33 3网络论坛详细设计3.1需求分析网络论坛系统主要是实现网上自由发言,回复等功能的系统。一个典型的网络论坛一般都需要实现帖子信息的正确显示、具体帖子的内容以及对某个帖子的多个回复、客户信息注册登录管理、帖子处理等模块[8]。根据网络论坛的基本需求,本系统需要完成的具体任务如下:1.帖子显示及浏览:当用户进入论坛系统时,应该在主页面中看到分页效果后的信息以供用户浏览。点击某个帖子链接,可以进入浏览帖子详细信息以及对该帖子的回复信息。2.帖子管理:当用户的发言不够合体时,带有管理权限的用户可以删除信息不良的帖子。3.用户发言:注册成为会员并成功登录的用户,可以发帖分享自己的信息。4.用户回复:注册成为会员并成功登录的用户,可以对感兴趣的帖子进行回复5.用户注册及登录:为了能够与其他用户进行互动,需要注册。根据注册时提供的用户名和密码进行登录。6.用户信息更改:成为会员的用户随时可以修改自己的个人信息,比如登录密码。7.版块管理:为帖子分类。用户选择相应的版块进入之后发帖,浏览帖子信息。管理员有增加和删除版块的权限。用户有增加版块的权限。8.资源分享:为了加强信息的交流,让用户通过此论坛可以学习和获得更多的资料,次论坛特别增添了文件上传和下载模块。为了保证信息的安全,只有注册成会员的用户才能上传资料。同时为了让用户可以更方便的获取资源,即使是非用户,也可以通过这个论坛下载需要的文件资源。3.2总体设计系统组成.下表中给出了构成网络论坛的各个组件,通过下表,可以从宏观上了解各个组件的功能。Service层是你的系统的业务逻辑体现,一个Service,应该是在有必要跨多DAO操作,或者需要事务时才被调用。DAO只应该针对直接的对数据库的CRUD操作,然后返回操作结果,不应该有别的逻辑,这样才不会破坏层次。只有DAO是可以写出通用的来减少重复代码,因为数据库只有CRUD四种操作。用户表示层(视图)控制处理层(控制层)业务逻辑层(模型层)Service层Dao层Article-list.jspArticleActionArticleBackActionArticleArticleBackArticleServiceArticleBackServiceArticleDAOArticleBackDAOArticle-detail.jspArticle-addInput.jspArticleBack-addInput.jspUser-login.jspUserActionUserUserServiceUserDAOUser-regist.jsp33 User-updateInput.jspBoard-list.jspBoardActionBoardBoardServiceBoardDAOBoard-addInput.jspFileUpload-list.jspDownloadActionFileUpload-upload.jspFileUploadActionFileEntityFileEntityServiceFileEntityDAOfileUpload.jsp3.3实体类设计与实现实体类的实现在包com.cqs.bysj.bbs2011.model下处理。设计如下:1.User(用户),拥有的属性有:id(用户ID),username(用户名),password(用户密码),email(用户EMAIL),tagManager(管理员标志);2.Article(贴子),拥有的属性有:id(贴子ID),title(标题),recount(回复数量),read(点击次数),content(贴子内容),createtime(贴子书写时间),user(用户),board(版块),articlebacks(回复该贴的帖子);3.ArticleBack(帖子回复),拥有的属性有:id(帖子ID),content(内容),backDate(回复时间,user(回复的用户),article(回复的帖子);4.Board(版块信息),拥有的属性有:id(版块ID),boardname(版块名称),articles(该板块拥有的帖);5.FileEntity(上传的文件),拥有的属性有:id(文件ID),describe(对该文件的描述),filename(文件的名称),fileContentType(文件类型),username(上传者)。创建数据表采用hibernate的annotation字段映射来实现。先写好java实体类,利了hibernate注解的方式设定表结构,主键和主键的自动增长的生成方式,生成各个表的主键关联。这样即采用了一种先建立实体类,在实体类的基础上生成数据库里的表格,省去了花时间去编写SQL语句去建立表格(虽然说现在建立表格多半已经不必写SQL语句)。传统的做法是先在数据库里建立表格,然后再表格的基础上建立实体类。两种做法各有都是设计系统的方法,或许传统的方法更好,毕竟经受了时间的考验,这个系统我尝试了先写实体类然后让hibernate去生成表格的方法。如下设立主键和主键增长方式代码:@Id@GeneratedValuepublicintgetId(){returnid;}33 各个实体类之间的关系图:1nnArticleBackBoardArticleUserFileEntitynnnnnn1n1n1nnn1n利用Hibernate的注解生成相应的表格及表格之间的级联关系。一下是Article类和User,ArticleBack类的部分代码:Article.javapublicclassArticle{privateintid;privateStringtitle;privateStringcontent;privateStringcreatetime;privateintreadcount=0;privateintrecount=0;privateUseruser;privateBoardboard;privateSetarticlebacks=newHashSet();………………………………………………………………………………………………@ManyToOne(cascade={CascadeType.PERSIST})publicUsergetUser(){returnuser;}publicvoidsetUser(Useruser){33 this.user=user;}@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER,mappedBy="article")publicSetgetArticleBacks(){returnarticlebacks;}publicvoidsetArticleBacks(SetarticleBacks){this.articlebacks=articleBacks;}User.java:@Entity@Table(name="user")publicclassUser{privateintid;privateStringusername;privateStringpassword;privateStringemail;privateinttagManager;ArticleBack.java:@Entity@Table(name="articleback")publicclassArticleBack{privateintid;privateStringcontent;privateStringbackDate;privateArticlearticle;privateUseruser;………………………………………………………………………………………………@ManyToOnepublicArticlegetArticle(){returnarticle;}publicvoidsetArticle(Articlearticle){this.article=article;}33 @OneToOne(cascade={CascadeType.PERSIST})publicUsergetUser(){returnuser;}数据库选择。MySQL是一个小型关系型数据库管理系统,使用Hibernate的注解和配置true自动建表,用SQL语言建立名为"BBSBYSJ"的数据库。所有的数据库中的数据都存储在表中。3.4网络论坛的基本流程网络论坛在运行过程中页面的基本流程如下图:Article-list.jsp帖子显示页面Article-detail.jsp帖子详情浏览图书详情显示User-login.jsp用户登录User-Regist..jsp用户注册Article-add.jsp帖子增加ArticleBack-add.jsp帖子回复订单确认User-logout.jsp用户退出管理员管理基本流程如下图:Article-list.jsp帖子显示页面Article-add.jsp帖子增加图书详情显示Article-delete.jsp帖子删除帖子删除页面33 Board-delete.jsp版块删除图书详情显示3.5网络论坛各页面功能3.5.1网络论坛首页Article-list.jsp详细功能及描述获取帖子基本信息集合,循环显示图书分类信息,显示的信息为帖子的标题,发帖的用户,发帖的时间。在帖子标题里设置超级链接,传入该帖子的ID作为参数,点击可以进入显示该帖子具体信息的页面。通过在浏览器输入Article-list,在Struts配置文件里配置相应的action,经ArticleAction的list()方法处理,从而转发到Article-list.jsp页面。在该页面,通过Struts标签循环输出每一个帖子。通过&username=<%=username%>">超级链接链接到Article-detail.jsp页面。3.5.2显示图书详细信息bookShow.jsp页面详细功能及描述本页面是在控制器响应了网上论坛主页提交的查看帖子详细信息请求,即“Article-detail”请求后,跳转到的页面。在该页面中通过Struts标签将获取到的指定帖子详细信息显示出来,包括用户的标题,内容,发帖用户,发帖时间等。同时如果该帖子已有回复的帖子,对应的帖子回复也会在该页面显示。同时点击回复链接提ArticleBack-addInput?articleback.user.username=&articleback.article.id="请求进入User-updateInput.jsp,进行用户信息的修改。3.5.5网上论坛注册User-regist.jsp页面详细功能及描述提交新用户注册请求,同时提交新用户注册信息的表单。提交注册用户姓名、地址、电子邮件地址、电话、用户名、密码以及确认密码的表单元素。注册按钮。在本页面中注册用户可以在表单中输入对应的注册信息,在单击“注册”按钮后,将提交“User-regist.”请求,同时提交新用户的相关注册信息,以便于进行后续新用户注册的处理。3.5.6帖子回复ArticleBack-addInput.jsp页面详细功能及描述33 获取帖子信息后进入ArticleBack-addInput.jsp,此页面也是一个表单,用来获取回复帖子内容。Action为ArticleBack-add,通过Struts对应的ArticleBackAction的add()方法,进行增加回复帖子的处理。成功后转入Article-detail.jsp页面显示新增的回复帖子。3.5.7帖子删除Article-delete.jsp页面详细功能及描述本页面是点击Article-list.jsp的删除链接,成功删除后进入的页面。只是提示删除成功,并提供返回主页的按键。本页面只有管理员有权限进入,进入前有权限判断。33 4系统实现该系统采用Spring+Struts+Hibernate框架来构建,其中Hibernate取代了原始的JDBC操作,并且Spring中对Bean的读取来进行Hibernate中的数据库的级联操作。4.1游客注册功能对于一般的游客,是只有浏览和下载文件的权限,无法发表文章和上传文件。想要获得这些权限,必须首先注册成为用户。在浏览器中输入http://localhost:8080/BBSbysj/Board-list,即可进入论坛首页。在此页面中点击文字“注册”,便会弹出填写用户注册信息表单的方框。表单中的信息包括必填的信息有用户名,密码,确认密码,邮箱。下面是注册表单的JSP代码:注册

传统的注册都是以链接的形式进入另一个页面,会浪费用户的等待时间。为了有更好的用户体验,本论坛将注册表单隐藏在首页,游客点击文字“注册”后页面自动弹出注册表单的方框,由于不需跳转到别的页面,所以运行速度更快。此功能利用Javascript框架之一jQuery来实现。下图4-1,4-2演示的就是这一效果。图4-1图4-2外部引入jQuery必须库:33 外部引入实现此功能的jQuery文件:regist.js里面实现此功能的代码的主要代码:$("#panellh5.head").toggle(function(){$(this).next().show();},function(){$(this).next().hide();})为了防止游客不正当操作,在注册时对于表单的操作要求有:不能为空,确认密码必须和密码一致,邮箱要符合一般邮箱的规则,其中只有有一条不符合,JS都会报错。JS主要代码如下:functionchkEmail(str){returnstr.search(/[w-]{1,}@[w-]{1,}.[w-]{1,}/)==0?true:false}functionCheckSubmit1(){if(form1.username.value==""){alert("请输入用户名");returnfalse;}if(form1.password.value==""){alert("请输入密码");returnfalse;}if(form1.password2.value==""){alert("请输入确认密码");returnfalse;}if(form1.password.value!=form1.password2.value){alert("请确认输入的密码一样");returnfalse;}elseif(form1.email.value=="")33 {alert("请输入email");returnfalse;}elseif(!chkEmail(form1.email.value)){alert("请填写有效的Email地址");returnfalse;}returntrue;}为防止用户名重复造成管理不便,如果用户已存在,则页面会提示错误信息:“用户名已经存在”。主要代码如下:UserDAOImpl.java部分:Listuser=hibernateTemplate.find("fromUseruwhereu.username='"+username+"'");if(user!=null&&user.size()>0){returntrue;}returnfalse;UserAction.java部分:if(userService.find(info.getUsername())){this.addFieldError("name","nameisexist");return"registwrong";}Hibernate封装的JDBC增加用户操作:publicStringinsert(Useruser){hibernateTemplate.save(user);return"success";}图4-3,4-4分别是输入邮箱不合规则,注册用户已经存在的情况:33 图4-3图4-44.2用户登录功能登录表单需要输入用户的用户名和注册时的密码,后台验证正确后方能跳转到登录成功的页面。用户名或密码为空则会在直接在页面上输出提示信息:“用户名或密码不能为空“,如果用户不存在或密码错误则会显示错误信息:“用户名或密码错误”。对于登录表单的处理和注册表单一样,先隐藏,点击文字“登录”后才显示登录表单的方框。以下是各个功能实现的主要代码:隐藏与显示部分:$("#panelh5.head").toggle(function(){$(this).next().show();},function(){$(this).next().hide();})错误信息提示已经登录成功的处理和信息提示:UserAction.javapublicStringlogin(){if(user.getUsername().equals("")&&user.getPassword().equals("")){req.setAttribute("msg","用户名或密码不能为空");return"loginwrong";}user=userService.login(user.getUsername(),user.getPassword());if(user!=null){boards=boardService.list();session.setAttribute("user",user);req.setAttribute("msg","已经登录");returnSUCCESS;}elsereq.setAttribute("msg","用户名或密码有错");return"loginwrong";}UserDAOImpl.java//判断是否输入的用户是否存在于系统publicUserloadByName(Stringusername){33 Listuser;user=hibernateTemplate.find("fromUseruwhereu.username=?",username);if(user!=null&&user.size()>0){return(User)user.get(0);}returnnull;}JSP页面错误信息和登录成功信息显示:
你好${username}
${msg}
登录成功后,返回首页,“注册”和“登录”部分被信息“已经登录”代替,并且在首页“欢迎来到BBS,你好”后面接着输出用户名。如图4-5:图4-54.3游客的操作4.3.1浏览论坛的所有版块在访问论坛首页后立即就可以看到论坛的所有的版块,任何人有权限点击版块名称的链接进入相应的版块浏览里面的帖子。在Board-list.jsp页面用struts标签结合HTML的table标签输出用户建立的版块。代码如下:<%inti=0;%>&pageNo=1">|<%i++;if(i>2){out.print("");33 i=0;}%>业务处理:boards=hibernateTemlate.find("fromBoard");图4-64.3.2浏览论坛帖子的信息进入某个版块后,版块里所有的帖子的会这里显示。当帖子的数量超过一定数量时,会自动分页。帖子按发帖的时间的早晚排序,最新的帖子总是出现在最前面的位置,最早的发帖会被置于末页。在帖子列表(Article-list.jsp)页面显示的信息有帖子的标题,点击数,发表时间,发帖的用户昵称。主要代码:Article-list.jsp标题点击时间发帖人&username=<%=username%>">如图4-7:图4-833 对于帖子的详细信息,要点击帖子标题链接进入帖子详细信息(Article-detail.jsp)浏览页面,包括的信息:帖子标题,帖子内容,帖子创建时间,帖子创建者,回复数,该帖子的回贴。对主帖的回复帖子的信息包括回帖的内容,时间和回帖人。另外在帖子列表和帖子详细信息页面上还有显示信息:帖子的记录总数,总页数。链接:首页,上一页,下一页,末页。下面是JSP分页显示的部分代码:<%Pagerpager=(Pager)request.getAttribute("pager");%>&pageNo=<%=pager.getFirstPageNo()%>">&pageNo=<%=pager.getPrePageNo()%>">&pageNo=<%=pager.getNextPageNo()%>">&pageNo=<%=pager.getLastPageNo()%>">控制层处理的部分代码:List
lists=articleService.list(board,pageNo);pager=newPager(5,pageNo,articles.size(),lists);req.setAttribute("pager",pager);Listlists=articlebackService.detail(article,pageNo);pager=newPager(5,pageNo,articlebacks.size(),lists);req.setAttribute("pager",pager);业务层处理的部分代码publicList
list(finalBoardboard,finalintpageNo){List
lists=null;try{lists=hibernateTemlate.executeFind(newHibernateCallback(){33 publicObjectdoInHibernate(Sessionsession){Queryquery=session.createQuery("fromArticleawherea.board=?orderbya.createtimedesc");query.setEntity(0,board);//取得当前页intpageSize=5;intstartIndex=pageSize*(pageNo-1);query.setFirstResult(startIndex);//startIndex起始行数query.setMaxResults(pageSize);//从startIndex开始读取5条List
articles=query.list();returnarticles;}});}catch(HibernateExceptione){throwe;}returnlists;}如图是帖子回复情况及分页效果的展示:图4-9图4-104.3.3文件下载在论坛首页有“文件上传”和“文件下载”的链接,普通游客无法虽然也能进入浏览文件上传页面,但是未登录状态阻止上传。游客点击“文件下载”33 链接后,进入文件列表页面(FileUpload-list.jsp)。在这个页面输出了此论坛所有的上传文件。并提供下载链接。点击“下载”,即弹出下载框,选择路径即可下载,并不转到别的页面。下载时利用文件类型InputStream。图4-11展示了点击下载后弹出的下载框。图4-11主要代码如下:DownloadAction:publicInputStreamgetDownloadFile(){HttpServletRequestreq=ServletActionContext.getRequest();filename=req.getParameter("filename");System.out.println(filename);try{returnServletActionContext.getServletContext().getResourceAsStream("/upload/"+filename);}catch(Exceptionex){}returnnull;}4.4普通用户的操作用户登录成功后,在看到表示成功登录信息的页面(User-login.jsp)。在此页面点击“添加帖子”,“修改个人信息”,“添加版块”,“文件上传”等链接,会进入不同的页面进行下一步的操作。4.4.1用户信息的修改用户点击“修改个人信息”后,进入“添加帖子”页面,在此页面有显示用户的信息,包括用户名,密码,邮箱。但是为了便于管理,系统不允许用户修改自己的用户名,但是可以修改密码等其他的信息。所以要设置用户名编辑框不可编辑,代码如下:用户名:"readonly/>
在控制层处理当信息变为空时,在页面输出错误提示信息。if(user.getEmail().equals("")||user.getPassword().equals("")){req.setAttribute("msg","内容不能为空");33 return"updatewrong";}然后通过控制层调用业务,业务层调用DAO接口处理操作数据库的操作。一下是部分代码。UserAction.java:user=userService.update(user);UserServiceImpl:returnuserDAO.update(user);UserDAOImpl:user1.setEmail(user.getEmail());user1.setPassword(user.getPassword());hibernateTemplate.update(user1);如图当用户将密码修改为空将报错:图4-114.4.2添加版块在未登录状态下点击添加帖子,在“添加版块”链接下方系统会提示错误:“请先成为用户”。如图4-12:图4-12用户点击“添加版块”链接后,进入“添加版块”(Borad-addInput.jsp)页面,在此页面的表单添加要建立的版块的名称。点击添加。成功后会转入Board-add.jsp页面,此页面输出信息增加成功。如果没有输入,版块名为空,则用Javascript弹出框提示内容不能为空:if(boardForm.boardname.value==""){alert("内容不能为空");returnfalse;}若不为空,请求访问控制层BoardAction类。该类接收JSP页面传来的参数,首先判断版块是否已经存在。若已经存在,则会在版块添加(Board-addInput.jsp)页面输出表示版块已经存在的提示信息。部分代码如下:控制层:publicStringadd(){if(!boardService.loadByName(board.getBoardname())){this.addFieldError("board","boardisexist");33 return"boardAddwrong";}board=boardService.insert(board);returnSUCCESS;业务层://添加版块returnboardDAO.insert(board);//根据Id来load版块returnboardDAO.loadById(boardid);DAO层:board=(Board)hibernateTemlate.load(Board.class,id);hibernateTemlate.save(board);当版块已经存在时。添加被拒绝。图4-134.4.3发表帖子用户点击“添加帖子”链接后,进入“添加帖子”(Article-addInput.jsp)页面,在此页面的表单添加帖子的信息。表单包括的内容有发贴人,帖子标题,帖子内容。点击添加。成功后会转入Article-add.jsp页面,此页面输出信息增加成功。要输入的内容有帖子标题,内容,两者皆不能为空,否则Javascript弹出不能为空的对话框。用户名在此页面不可编辑。在JS视图层隐藏帖子所在版块的ID,在控制层接受ID参数和帖子信息,将帖子关联到相应的版块。另外当然也要将帖子关联到相应的用户。主要代码如下:JSP:用户名:"readonly/>
">控制层:board=boardService.loadById(article.getBoard().getId());user=userService.loadByName(article.getUser().getUsername());article.setBoard(board);article=articleService.insert(article,user);业务层:publicArticleinsert(Articlearticle,Useruser){returnarticleDAO.insert(article,user);}returnboardDAO.loadById(boardid);DAO层:article.setCreatetime(CurrentDate.getCurrentDate());article.setUser(user);33 hibernateTemlate.save(article);用游客或户在未登录的情况下也能进入浏览帖子,但这种情况下点击“添加帖子”跳转到有登录和注册操作的页面,而不会进入发帖页面,同时提示信息:“发帖前请先登录”。如图4-13:图4-144.4.4回复帖子与发帖一样,回复帖子时,如果未登录,也无法进入输入回帖信息的页面。某一帖子可以有多个回帖,将帖子的回帖放到集合里面。在Articl.java代码如下:privateSetarticlebacks=newHashSet();下图是回复帖子信息输入页面:图4-144.4.5文件上传点击链接“文件上传”,进入fileUpload.jsp页面。如果要实现文件的上传,则表单的method属性必须设置成:post提交方式。表单的enctype属性必须设置成multipart/form-data,这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。在未登陆的情况下,游客上传文件会弹出错误提示:请先登录。主要代码如下:控制层FileUploadAction:publicStringupload()throwsException{HttpServletRequestreq=ServletActionContext.getRequest();Stringroot=ServletActionContext.getRequest().getRealPath("/upload");InputStreamis=newFileInputStream(file);System.out.println("path:"+file.getAbsolutePath());System.out.println("file:"+file.getName());33 System.out.println("fileFileName:"+fileFileName);req.setAttribute("fileFileName",fileFileName);FiledestFile=newFile(root,fileFileName);FileEntityfileEntity=newFileEntity();fileEntity.setDescription(description);fileEntity.setFileContentType(fileContentType);fileEntity.setFileName(fileFileName);FileEntityInsert(username,fileEntity);OutputStreamos=newFileOutputStream(destFile);byte[]buffer=newbyte[400];intlength=0;while(-1!=(length=is.read(buffer))){os.write(buffer,0,length);Thread.sleep(1000);}is.close();os.close();returnSUCCESS;}业务层FileUploadServiceImpl:returnfileEntityDao.insert(username,file);DAO层FileUploadDAOImpl:file.setUsername(username);hibernateTemplate.save(file);文件上传成功后暂存在根目录的upload文件下。上传成功后由struts.xml处理跳转到文件详细信息(FileUpload-upload.jsp)页面。在此页面输出刚上传的文件的详细信息,包括上传者,上传的文件名,文件类型,以及对此资源的描述。视图层代码如下:33 在文件上传页面fileUpload.jsp:username:"readonly>
file:
描述文件:如图是文件上传部分:图4-154.5管理员的操作论坛管理员由数据库管理员设置。为了时此论坛能够健康的运行,必须对不健康的引论进行整顿。管理员可以除了普通用户的权限之外,还可以对版块,帖子进行删除,来去除不当言论。实体类User的属性(管理员标志)tagManager等于1的用户才是管理员。部分代码如下:视图层<%if(username!=null&&user.getTagManager()==1){%>&username=<%=username%>">删帖<%}%>DAO层:article=(Article)hibernateTemlate.load(Article.class,id);hibernateTemlate.delete(article);删除版块时,应为board类和article类设置了删除级联所以删除某个版块时数据库里相应版块的帖子也会被删除。相关代码如下:@OneToMany(cascade={CascadeType.REMOVE},mappedBy="board")publicSet
getArticles(){returnarticles;}publicvoidsetArticles(Set
articles){this.articles=articles;}33 删除回复帖子时,由于回复贴与主帖存在级联,直接删除不行,必须在article的属性articlebacks里去除这个回复贴,然后才能删除。代码如下:articleback.getArticle().getArticleBacks().remove(articleback);下图分别是图4-16,4-17,4-18删除版块,删除帖子,删除回复帖子的界面:图4-16图4-17图4-1833 5开发工具与环境5.1JDK[9]JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。无论什么Java应用服务器实质都是内置了某个版本的JDK。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。没有JDK,无法运行Eclipse。5.2MyEclipseMyEclipse企业级工资平台是对EclipseIDE的发展,利用它可以在数据库和JavaEE的开发,发布,以及部署应用程序服务器的整合方面极大的提高工资效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML、Struts、Hibernate,Spring。5.3Tomcat[10]Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。当在Apache服务器配置完成之后,可以使用它动态响应要访问的HTML页面的请求。Tomcat是Apache服务器的扩展,可以独立的运行,用于独立的Apache的功能。另外Tomcat还是Servlet和JSP的容器,Servlet是Tomcat的默认的模式。5.4MySQL数据库MySQL是一个小型关系型数据库管理系统,广泛地应用于中小型的网站中。由于其体积小,速度快成本低,并且开源,许多小型网站可以用它节约成本。MySQL是一种关系型数据库系统,MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。5.5Log4jLog4j是Apache的一个开源项目,它是一个日志操作包。通过使用Log4j可以指定日志信息输出的目的地,如控制台、文件、GUI组件,甚至是套接字服务器,还可以控制每一条日志的输出格式。这些复杂的操作可以通过一个配置文件进行灵活的配置而不需要编写代码去实现。33 6总结本文讲述了Java/JSP/Struts/Spring/Hibernate在WEB应用的一些基本知识,并通过网上论坛的程序对SS2H框架的运用进行了深化,从这次实践中可很好的掌握了整合SS2H框架的方法和步骤,必要的包和配置。对Hibernate注释,Spring依赖注释的灵活运用,相信会成为将来WEB开发上十分流行的技术,应为它不替程序员省去了很多代码量,不过要真正掌握好它们却并不是一件容易的事情,比如对Struts标签,OGNL表达式的运用时会出现参数类型不匹配的错误,中文问题的处理,一开始都遇到了麻烦,不过在自己不断的钻研中还是得到了处理。当然,在实际应用的WEB开发中,要复杂的多,还有很多关于安全方面的问题需要考虑以及运行效率方面是我这次系统实现中很难考虑全面的,对于页面的布局,美观的处理也不足,需要将来更多的学习。33 参考文献[1]精通JavaEE项目案例:基于EclipseSpringStrutsHibernate/刘乃丽编著.北京:人民邮电出版社,2008[2]葛京.Hibernate3和JavaPersistenceAPI程序开发从入门到精通,清华大学出版社,2007年10月 [3]J2EE成功之路实战Ajax,JSP,Struts2,Spring,Hibernate电子工业出版社2009李钟蔚,马文强,王殊宇[4]J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现/陈松编著.—北京:清华大学出版社,2007[5][美]Y.DanielLiang.Java语言程序设计进阶篇.万波,郑海红,潘蓉,李娜等译.北京:机械工业出版社2008[6]jQuery开发技术详解.季国飞.电子工业出版社,2010年3月[7]苏年乐,李学志,李金才.Java+SQLServer项目开发实践.北京中国铁道出版社,2006[8]黄明,梁旭.Java信息系统设计与开发实例.北京:机械工业出版社,2004[9][美]Y.DanielLiang.Java语言程序设计基础篇.万波,郑海红,潘蓉,李娜等译.北京:机械工业出版社,2008[10]陈天河等.Java数据库高级编程宝典.北京:北京电子工业出版社,2005[11][美]Y.DanielLiang.Java语言程序设计进阶篇.万波,郑海红,潘蓉,李娜等译.北京:机械工业出版社,2008[12]陆正武,张志立.Java项目开发实践(第2版).北京:中国铁道出版社,2005[13]钟玉,阳昊.浅谈大学校园网BBS,益阳师专学报,2004年11月,P2[14]白淑英.《基于BBS的网络交往特征》,哈尔滨工业大学薛宝(社会科学版),2002年9月第4卷第3期[15]刘冰,从BBS看校园网络文化对大学生学习的影响,现代远程教育研究,2005年2期,P3-433

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭