|
4.7 文章维护模块设计 |
文章维护模块使用到的数据表:tb_article、tb_articleType。
文章维护模块可以说是本系统的一个重点,该模块主要包括添加文章、修改文章、删除文章、浏览文章及文章回复几个子功能模块。用户只有登录系统才可以对文章进行维护操作。
文章维护模块的整体开发过程,使用了Struts 2与Hibernate、Spring整合开发的模式。Struts 2是一个非常简单易用的控制层框架,它整合了Struts 1.X和WebWork框架,并且取消Struts 1.X中的ActionForm,其Action就是普通Java类,这大大提高了开发效率。
实践真知提示
Struts 2框架分为3个部分:核心控制器FilterDispatcher、业务控制器Action和业务组件。
Hibernate 3是目前著名的优秀持久层框架,它在数据存储器和控制器之间加入一个持久层,该层简化CRUD数据的工作,分离应用程序和数据库之间的耦合,实现在无须修改代码的情况下轻松更换应用程序的底层数据库。
Spring是业务层框架,它以IOC(反转控制)和AOP(面向切面编程)两种先进技术为基础,完美简化了企业开发的复杂度。
Struts 2与Spring 2及Hibernate 3整合技术流程图如图4.12所示。
图4.12 框架整合流程图
已登录的用户进入到论坛首页,单击“添加文章”按钮,用户可进入添加文章页面,在该页面中可实现添加文章操作,添加文章可分为添加文章标题、选择文章所属类型、添加文章内容等。添加文章页面运行结果如图4.13所示。
图4.13 添加文章
添加文章实现过程如下:
(1)用户填写信息完毕,系统会校验填写内容的合法性,以防止不合法的数据对系统造成破坏,例如非法字符、超长文字等。添加文章表单代码如下。
代码位置:光盘 \MR\04\WebContent\WEB-INF\jsp\article\addArticle.jsp
(2)单击“发表文章”按钮,系统校验输入是否为空,通过JavaScript代码实现,具体代码如下。
代码位置:光盘 \MR \04\WebContent\WEB-INF\jsp\article\addArticle.jsp
(3)页面将参数传给Action,Action将参数封装为文章对象传给DAO层,DAO层调用保存方法即可把文章信息存入数据库。文章对象类代码如下。
代码位置:光盘 \MR\ Instance\20\src\com\hrl\model\Article.java
(4)在ArticleDaoImpl类中调用添加文章方法addArticle(),该方法有一个Article类型参数,用于表示要添加的文章类型。通过Spring框架实现文件添加操作很简单,具体代码如下。
代码位置:光盘 \MR\ Instance\20\src\com\hrl\dao\impl\ArticleDaoImpl.java
图4.14 浏览文章截图
用户可以从文章列表中选择任意一篇文章,单击查看详细链接或者文章标题即可进入到文章的详细信息页面。浏览文章的运行效果如图4.14所示。
浏览文章的代码业务流程是:当用户单击进入文章的时候,页面向后台传一个文章ID,系统根据这个ID通过持久层查询单篇文章的方法即可获取该篇文章的所有信息,然后将文章对象传回给Struts 2,Struts 2根据文章属性信息展示文章信息。具体实现过程如下:
(1)在浏览文章页面中,通过Struts 2标签,将查询出来的文章信息显示在页面中,具体代码如下。
代码位置:光盘 \MR\04\src\com\hrl\dao\impl\ArticleDaoImpl.java
(2)在ArticleDaoImpl类中,定义按照文章编号查询文章信息方法querySingleArticle(),该方法有一个String类型的参数,用于指定要查询的文章编号,关键代码如下。
代码位置:光盘 \MR\04\src\com\hrl\dao\impl\ArticleDaoImpl.java
用户浏览文章之后可以对文章进行回复,但前提是用户必须已经登录系统,否则不能对文章进行回复。文章回复效果如图4.15所示。
图4.15 回复文章截图
当用户在如图4.15所示的页面中输入回复内容后,单击“发表帖子”按钮,即可完成对文章的回复工作。文章回复实现过程如下:
(1)本系统应用了Hibernate开发框架,首先编写与文章回复表对应的持久化类Reply,该类中包含的属性与文章回复表中的字段一一对应,具体代码如下。
代码位置:光盘 \MR\ Instance\20\src\com\hrl\model\Reply.java
(2)ReplyDaoImpl类中,编写保存文章回复方法addReply,该方法有一个持久化类Reply类型对象,调用Hibernate的save()方法,实现保存操作,具体代码如下。
代码位置:光盘 \MR\ Instance\20\src\com\hrl\dao\impl\ReplyDaoImpl.java
用户只可以修改自己发表的文章,用户从文章列表中选择一篇文章进入,系统会判断该文章的作者是不是当前用户,如果是系统才会显示修改按钮,用户才有权对文章进行修改。修改文章运行效果如图4.16所示。
图4.16 文章修改效果图
修改文章需要首先根据文章ID查询出文章,再通过修改文章的各个属性,来完成修改操作,通过执行update()方法,实现修改操作,具体代码如下。
代码位置:光盘 \MR\04\src\com\hrl\action\ActicleAction.java
当用户在浏览文章页面中,可以浏览自己的文章,如果用户登录了本系统,在文章的底部会出现“删除”超链接。单击该超链接,即可实现删除自己发表的文章,如图4.17所示。
图4.17 删除文章
删除文章的主要实现步骤如下。
(1)与修改文章一样,用户只能删除自己的文章。在页面中通过Strus 2标签判断页面是否显示“删除”按钮,代码如下。
代码位置:光盘 \MR\04\WebContent\WEB-INF\jsp\article\singleArticle.jsp
(2)删除文章之后,再做一次查询,页面将跳转到我的文章列表。具体代码如下。
代码位置:光盘 \MR\04\src\com\hrl\action\ActicleAction.java
(3)删除文章的时候,需要删除该文章下所有的回复信息及浏览信息,否则数据库将会产生冗余数据。为了达到级联删除,需要在Hibernate映射文件中进行配置,代码如下。
代码位置:光盘 \MR\04\src\com\hrl\model\Article.hbm.xml
实践真知提示
order-by="replyTime desc"表示以时间倒序来排序。 key 属性:表示相关联表的外键。