Struts+Hibernate框架模型在媒体资源库中的应用

时间:2022-10-29 06:23:55

Struts+Hibernate框架模型在媒体资源库中的应用

摘要:针对传统的B/S模式媒体资源库系统代码可重用性低、维护困难、可扩展性差等问题,引入MVC设计模式,结合持久化工具Hibernate的功能特点和Struts框架的优势,提出采用Struts+Hibernate框架的媒体资源库设计思想,以构建一个媒体资源库的音乐子分库为例,验证了基于Struts+Hibernate模型的媒体资源库系统具有扩展性好、结构灵活、易于维护等特点。

关键词:媒体资源库;MVC模型;Struts+Hibernate架构

中图分类号:TP311文献标识码: A文章编号:1009-3044(2009)31-0000-00

The Application of Media Resources Library Based on Struts and Hibernate

LIAO Yi-ming, JIANG Yong-ping, WEN Yan-hua,YU Qi

(Information Engineering of Guangdong University of Technology, Guangzhou 510006, China)

Abstract: According to the traditional B/S media resources library system has the issue that lowlly reusability of code,maintained hardly and extended difficully.MVC design pattern is introduced,combining persistent tool Hibernate's function with struts framework's advantage,and the design conception of media resources library based on Struts+Hibernate framework is proposed.Take constructing a music sub-base of media resources library as an example,conforming that the media resources library system based on Struts+Hibernate framework has the advantages of strong extensibility,flexible structure and easy maitaining.

Key words: media resources library; MVC model; Struts+Hibernate framework

媒体资源库是基于计算机网络环境,以媒体信息数据为核心的,互动式,共享式,可以不断扩充的开放式网上信息资源利用平台。基于网络的媒体资源库的出现改变了传统的媒体资源获取及查找方式,媒体资源已不再局限于纸质的资源,或单一媒体形式的素材,而是扩展到以网络为载体的多种类型的资源形式。针对媒体资源库媒体资源丰富、资源类型多样等特点,在相关系统实现技术的选择上,摒弃代码可重用性低,可扩展性差的传统B/S结构模型,选择更易于维护和扩展的Struts+Hibernate模型作为媒体资源库设计的主要架构。本文将Struts与Hibernate框架应用在媒体资源库系统的建设上,由Struts负责降低系统总架构的耦合性,Hibernate负责降低业务模型部分的开发难度[1],最终实现了一个扩展性强、易于维护的媒体资源库系统。

1 系统功能描述

根据实际需要,本媒体资源库系统的功能主要包括以下几个部分:

1)系统管理模块。对系统相关的教学管理,提供用户申请、认证功能,用户通过注册,确定管理员或教师、学生身份,设置各级权限。

2)资源管理模块。系统可自主建立各种子资源库,如媒体素材库、课件库、文献资料库、教案库等等,同时系统可兼容多种格式图像、动画、音频、视频、文本等媒体素材,并提供上传下载服务。

3)资源检索模块。系统提供了强大的搜索引擎,能支持全文检索和多种文档类型的检索,可以从多种角度,用多种形式查询。

4)资源浏览模块。可在浏览器中播放一段动画,一张图片或一段音频,方便用户浏览资源的信息和内容。

2 系统体系结构

本系统是基于Struts+Hibernate架构来设计与实现的,整合两个框架以弥补各自的不足,将系统体系分为四层结构,提高了系统的可维护性和可扩展性。

2.1 MVC框架Struts

MVC(model-view-controller)是一种软件设计模式,它能够有效的降低系统耦合度,实现代码重用。MVC模式包括三个层面:模型层(model)、视图层(view)、控制层(controller)。Model代表了程序使用的数据和对数据进行处理的功能,它代表了程序中所使用和生成数据的运行状态。View是程序的界面,它可以从Model中获得数据并以一定的格式显示给用户。当Model变化时,View负责将这些变化反映到界面中让用户看到。同时,View可以接收用户的动作并传递到Controller。Controller定义了整个程序的运行逻辑,它负责控制View和Model的变化。确切地讲,Controller将在View中采集的用户动作转换为程序中的操作,这些操作由Model执行从而更新其状态。同时,Controller根据用户动作和Model的变化决定下一步显示的界面。

Struts是目前比较成熟的Web开发框架,它是在JSP Model2的基础上实现的一个MVC框架。Struts的模型部分包含JavaBean和EJB组件,控制器由ActionServlet和Action组成,视图部分包含JSP和Struts客户化标签[2] 。

2.2 O/R映射框架Hibernate

Hibernate是一个采用ORM(Object Relation Mapping)模式的数据持久层框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。ORM模式是指关系对象映射,用类中的方法来操作SQL语句,使得一切操作皆对象。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

2.3 Struts与Hibernate的整合

通过前面的分析可以看出,Struts实现了MVC设计模式,清晰的划分了视图层、业务层和控制层。利用Struts控制器部分的配置文档可以很好的控制程序的流程,这使得系统的维护性和灵活性大大加强。不足的是在模型部分,没有提供数据持久层,业务层不仅负责业务逻辑,而且直接访问数据库,因此Struts对模型部分的支持还有所欠缺。而Hibernate在模型部分提供了数据持久层,对JDBC进行了轻量级的封装,使开发人员可以面向对象的方式编程。但Hibernate架构并不能够实现视图层、业务层和控制层的分离,如果仅使用Hibernate技术系统的耦合性还是太高,不易于维护[3]。所以将这两个框架整合在一起,利用Struts框架作为系统的整体基础框架,负责MVC的分离,而在Struts的模型部分,利用Hibernate来提供持久层的支持[4],这样无论是在系统整体的还是在局部的耦合性都降到了最低,灵活性和可维护性也得到了很大的提高,从而消除了单独使用某一框架的不足,整合后的整体框架如图1所示。

3 基于Struts+Hibernate的媒体资源库架构实现

构建媒体资源库的主要目的就是为了实现资源的有效管理和共享,因此,媒体资源的种类和数量是评价一个媒体资源库的重要标准。媒体资源的积累是一个长期的过程,随着资源种类和数量的增加,往往需要在系统的后期维护上对资源库进行不断扩充。本文以构建媒体资源库的一个子库模块――音乐库模块为例,说明基于SH模型的资源库架构实现方法,以及系统在可扩展性和可维护性上的优势。系统的其它模块实现方法类似。音乐子库与媒体资源库结构关系如图2所示。

3.1 表示层的实现

表示层负责处理客户端HTTP请求并作出响应,主要由JSP页面、ActionServlet、ActionForm、Strutsconfig.xml等共同实现[5]。其中JSP页面负责视图部分,而控制部分则是主要通过编写Web应用配置文件web.xml和Struts的配置文件Struts-config.xml来实现。

由于音乐库的各个模块实现方法和技术大同小异,这里主要以音乐上传模块为例。首先建立MusicUpload.jsp用于音乐上传信息的编辑,然后在web.xml文件中声明ActionServlet,建立一个Action类――MusicuploadAction.java,以负责调用音乐上传的相关业务逻辑服务组件。当用户发出一个上传请求后,这个请求由jsp页面提交给ActionServlet,ActionServlet根据Struts-config.xml配置文件定义的用户请求路径和Action映射等配置信息,来决定把收到的用户请求转发给哪个Action对象。这一流程在Struts-config.xml配置如下:

/***********音乐上传功能所对应的ActionForm **********/

/***********音乐上传功能所对应的Action映射**********/

attribute="musicuploadForm"

input="/musicupload.jsp"

name="musicuploadForm"

path="/musicupload"

scope="request"

validate="true"

type="com.structs.action.MusicuploadAction"/>

3.2 持久层的实现

数据持久层负责数据库映射,隔离数据库操作,在对象和关系数据库之间建立映射关系,由Hibernate来实现,主要包括编写持久化类POJO、数据访问类DAO以及Hibernate配置文件。在为专业资源库添加分子库时,需要为子库建立新的数据库表单,在这里以映射音乐资源库表单music为例,说明在Hibernate中数据库的映射方法。

首先需要创建持久化类,即Music.java,在Music.java中只包含对属性进行访问的getter和setter方法,获取和更新数据库表单music中的信息。但这时还不能对数据库进行访问,必须另外新建一个数据访问对象MusicDAO,通过这个DAO类来实现对数据的各种操作,包括插入、查找、更新、删除等。最后在Hibernate配置文件Hibernate.cfg.xml中建立映射,通过一个XML格式的映射描述文档来实现将对象映射为数据库中的表,实现对象到数据表之间的映射。此一过程在Hibernate配置文件中的关键代码如下:

/***********HBM映射路径**********/

3.3 业务层的实现

业务逻辑层的作用是完成系统的业务功能,为表示层提供所需的业务方法,主要由Struts中的Action类和业务对象类组成。但其实在模型层中Action类只是执行了业务逻辑功能,而真正的数据处理和对象持久化工作是在持久层中的DAO类中实现的。具体做法是先根据需求写出一个POJO类,然后写出基本的DAO接口并给出Hibernate的DAO实现,采用Hibernate框架实现的DAO类来完成POJO类与数据库之间的转换和访问,最后完成业务逻辑。

同样以音乐资源库为例,编写音乐资源库的POJO类Music.java,建立数据访问类MusicDAO,通过它调用Hibernate API来实现音乐数据的各种操作,包括插入、查找、更新、删除等。下面以删除操作为例给出MusicDAO类的部分实现:

public class MusicDAO extends BaseHibernateDAO {

private static final Log log = LogFactory.getLog(MusicDAO.class); //日志实现类

private Session session =this.getSession(); //取得Session操作类

public void delete(Music music){ //删除操作

log.debug("deleting Music instance");

Transaction tx=session.beginTransaction();

session.delete(music);

mit(); }

……}

3.4 数据库层的实现

数据库层的实现就是搭建数据库,主要包括建立表单和视图等工作。在构建的音乐资源库中设计了音乐信息表(music),用于存储音乐名称、作者、风格、大小等音乐信息以及上传用户、上传时间、下载次数等用户操作信息。通过Hibernate数据持久层对数据库的表单进行映射后,将音乐信息表映射成music类。music类通过存储注册用户信息的loginuser类与原资源库数据库联系,如图3所示。

4 结束语

媒体资源库是一个比较复杂的系统,资源的多样性和复杂性要求系统必须具有良好的可维护性和可扩展性。本文的媒体资源库系统采用Struts+Hibernate的集成架构来实现,其中,采用基于MVC设计模式的Struts框架分离表示层和业务逻辑,使程序更加灵活,提高了系统的可扩展性;采用Hibernate框架实现了对象的持久化,降低了业务层和数据层之间的耦合性[6]。实践证明,基于SH框架的媒体资源库系统开发简洁、结构清晰,具有很好的可扩展性和可维护性。

参考文献:

[1] Rod Johnson.J2EE Development Frameworks[J].IEEE IT Systems Perspectives,2005,1(1):107-110.

[2] 李发英,朱海滨.基于Struts+Hibernate的Web应用的设计与实现[J].计算机技术与发展,2009,19 (4):91-94.

[3] 施兴健,徐良贤.Hibernate在Struts中的研究和应用[J].计算机工程,2004(30):165-167.

[4] 阎娟娟,陈波,王乐.基于Struts和Hibernate的J2EE架构的研究[J].计算机工程与设计,2008,29(21):5498-5501.

[5] 石剑,黄华平.基于Struts与Hibernate的学生管理系统的设计与实现[J].科技资讯,2009(5):35-36.

[6] 蒋姣丽,蒋永平,黄凤爱.基于Struts+Hibernate架构的题库系统设计与实现[J].电脑知识与技术,2008,3(7):1473-1475.

上一篇:破损图片识别与修复技术分析 下一篇:在线考试系统中USB端口的监控与管理