商品数据库系统中的软件框架集成应用技术.doc
精品论文推荐商品数据库系统中的软件框架集成应用技术何成万,曹莲莲,聂志杰 武汉工程大学计算机科学与工程学院,武汉 (430205) E-mail:lian_531摘要:使用软件框架可以提高系统的可重用性和灵活性。随着系统规模的逐步扩大,怎样 将多种软件框架集成以达到降低模块耦合度,提高模块的可重用性成为软件开发者越来越关 注问题。本文主要讲述将Struts、Hibernate和Spring等3种优秀软件框架集成,应用到实际开 发项目,并分析其集成的优缺点。关键词:框架集成,Struts,Spring,Hibernate1引言随着Web应用程序需求的增加,越来越多的开发人员开始使用Web框架。所谓框架 (Framework是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构 件之间的依赖关系、责任分配和控制流程。Java 以其跨平台和对网络编程良好支持的特性 成为众多基于Web 应用程序的首选。Web应用程序的最大的优势是可将任意多种资源和功 能集成到一起,这种集成是通过web组件间的关联实现的。单个框架所提供功能和信息毕竟 是有限的,集成这些软件框架使每一层都以一种松耦合的方式彼此沟通,大大提高应用程序 效率和可维护性。基于B/S结构的WEB应用程序一般分为五层:客户层、表示层、业务层、持久层和数据 库层。本文集成了Struts、Hibernate和Spring等3种典型软件框架应用到商品数据库系统,提 高了系统灵活性、可复用性和可维护性。2相关开源框架简介2.1Struts 框架Struts是Apache Jakarta项目的组成部分,它是由Apache开发的一个免费的MVC实现框 架。MVC有3个主要组成元素:JSP,Servlet和JavaBeans。其中JSP对应于MVC模型中的View, Servlet对应于ControllerBean对应于Model。图1显示了MVC框架图1。图1 MVC框架图模型(Model)层封装了问题的核心数据、业务逻辑结构,它不能影响View 端将以何 种方式将数据呈现给客户。视图(View)层把表示模型数据及逻辑关系和状态的信息及特 定形式展示给用户,它从模型层获得显示信息。控制器(Controller)层是处理用户与软件 交互操作的,其职责是控制提供模型层中任何变化的传播;它接受用户的输入,将输入反馈 给模型,是使模型和视图协调工作的部件。- 6 -2.2SpringSpring 在某种意义上是 EJB 的替代品,它是一种轻量级的容器,控制反转(IOC)和面 向切面编程(AOP)是 Spring 框架中的最核心的两个概念。Spring 最核心的概念就是 IOC, 使用 Spring 你不必在程序中维护对象的依赖关系,只要从 XML 中设定,Spring 会自己根据 相关的配置去产生他们之间的关系。Spring 最被人重视的另一个方面就是对 AOP 技术,AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。Spring 本身是一个实现了 IOC 模式的轻量级容器,其目标是提供一个全方位、系统化 的、轻量级的基础性框架,并在此框架的基础上实现多个子框架的融合,这些子框架可以独 立存在。Spring 框架最大的优点是可动态替换业务对象,只要对 JavaBean 属性和配置文件 加入依赖性配置(协作对象),就可以很方便地在需要时替换具有类似接口的协作对象。 Spring 框架在系统中的位置处于 Struts 和 Hibernate 之间,主要负责业务逻辑层的处理。2.3HibernateHibernate是一种 ORM(Object-Relation Mapping 对象-关系映射)工具,能够建立面向 对象的域模型和关系模型的映射。它对JDBC进行了轻量级的对象封装,使程序员可以使用 面向对象编程思想来操作数据库,避免了开发人员使用大量的SQL语句,通过JDBC底层编 程方式对数据库进行操作。Hibernate 的目标主要是针对数据持久化相关的编程任务5。使 用Hibernate可以使上层的应用不用关心底层数据库的类型和表结构,使得系统在不同数据库 间移植系统变得简单可行。在Hibernate中,为每一个数据库表创建一个POJO类(只包含setter及getter方法的类), 通过对POJO类的操作来代替对数据库的操作,类中的方法相当于操作数据库的SQL语句。 图2显示了Hibernate的持久化服务在一个数据库应用程序中的作用6。图 2 Hibernate的架构3 基于软件框架集成的应用系统开发Java 以其跨平台和对网络编程良好支持的特性成为众多基于 Web 应用的首选,其中 Struts、Hibernate 和 Spring 等 3 种优秀开源框架的出现大大提高了软件的开发效率三个框 架分别从不同的方面对软件的松散耦合和可移植性提供了支持,在适当的情况下,根据软件 开发过程中的不同需求,适当的将三种框架进行集成,对系统的可维护性和可扩展性方面将 会有很大的提高。Web 应用程序的页面一般比较多而且又比较复杂,直接用现有的JSP和Java代码实现起 来比较复杂也不易于系统的维护。Struts框架以MVC模型为基础,把JAVA代码从JSP页面中 分离出来。在大型软件开发中,Struts框架已成为Web 应用程序中表示层的首选。Struts是一个优秀的MVC框架,但是Struts也有自己的缺点:Struts的模型层是比较弱的,也是相对自由的,可以在Struts框架的应用中集成其他的模型层框架,来提高软件的松散耦合。在Java领 域,我们一般使用JDBC来访问数据,这种方式虽然运行效率高,但JDBC中数据访问对象(DAO)和SQL语句直接绑定在一起降低了系统的可维护性,且不支持继承和多态,而且还 需要额外的EJB容器。使用Hibernate能够解决以上开发中的问题。因此可将Hibernate作为数 据持久层,用对象/关系映射的思想来处理数据库操作。虽然Hibernate大大简化了数据持久 层的访问7,但使用Hibernate进入数据持久层的访问时还存在一系列的问题,如访问步骤重 复过多、事物难以控制,以及基于Hibernate的DAO组件编写复杂等,Spring在Hibernate基础 上,进一步简化了持久层的访问,其模板的操作大大降低了Hibernate的重复操作;Spring提 供的DAO支持简化了DAO的组件的开发,SessionFactory的依赖注入简化了Session的控制, 在所有的ORM框架中,Spring与Hibernate的支持最好,Spring提供很多IOC特性的支持,一 旦Hibernate处于Spring的管理之下,Hibernate所需要的基础资源都由Spring提供注入。因此 在数据持久层Hibernate 之上加入业务逻辑层Spring 是完全合理的。MVC 框架负责创建 Application实例,Application实例也就是Spring容器,主要负责管理应用中所有的组件,包 括业务逻辑组件和持久层组件。本文根据上述分析以及项目的需求,将Struts、Hibernate和Spring等3种典型软件框架集 成应用到商品数据库系统。3.1 系统简介商品数据 库系统是 为了实际 上也是一 个商品信 息共有化 系统( Global Data Synchronization System)。用户可以查看所有商品的信息,可以规定商品的分类,增、删、 改商品的信息。商品信息的修改可以在不同的地方实现信息的统一,实现对数据的远程控制。 方便制造商和用户及时了解商品的最新资料和信息。3.2 系统的分层架构实现Struts架构实现了MVC设计模式,使代码结构化,易于设计,但他主要针对表示层而设 计的,对逻辑层的设计并不是很强。Spring是一个松耦合的框架,开发者可以通过使用Spring 中的Bean容器与Web层的Struts框架一起协调起来工作,完成了Struts+Spring框架的集成;也 可通过使用Spring 框架中提供的HibernateTemplate和HibernateDaoSupport较为方便地与数 据库持久层的Hibernate一起使用,完成了Spring+Hibernate的集成。这3种技术相结合的开发 方式,构成了一个Web应用的开发框架,如图3所示。图 3 基于 Struts + Spring + Hibernate 的 Web 框架表示层:由Struts框架来实现。在基于Struts框架的表示层中,最核心的配置文件是 struts-config.xml文件2,它是在web.xml配置文件中进行加载。下面我们来看一下从客户层 到表示层的主要流程是:来自客户层的Web浏览器向Struts框架中的控制器Action-Servlet发出 请求,根据请求的URL从ActionMapping中找到相应的Action,并实例化相应的ActionForm, 进行Form 的验证,验证通过则调用Action 的Execute 方法。Execute 方法执行后须返回 ActionForward进行JSP页面显示,将处理结果响应给客户层。业务层4:由Spring框架实现。基于Spring框架的业务层也有一个核心的配置文件,那就是 ApplicationContext.xml。Spring通过此配置文件配置Bean Factory。在这个文件中引进了DAO 实现了依赖注入管理事务。下面是ApplicationContext.xml的部分配置:/ 通过TransactionProxyFactoryBean设置Spring业务层事务代理<bean id="sdbpackBusiness" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">./ 设置一个目标对象包装在事务代理中<property name="target"><ref local="SdbPackMaintBusinessTarget" /></property>.</bean>/ 设置目标对象<bean id="SdbPackMaintBusinessTarge class="org.cll.business.SdbPackMaintBusinessImp"><property name="packDAO"><ref local="PackDAO" /></property></bean>在Action的方法调用业务逻辑层,用XML文件将对象连接起来,在框架中,我们通过BaseBusiness business = (BaseBusiness) getBean(“sdbpackBusiness”)来取得业务层的Bean, org.cll.business.SdbPackMaintBusinessImp 是 业 务 层 类 的 相 对 路 径 , 在 类 SdbPackMaintBusinessImp实现了对业务层的处理。在ApplicationContext.xml中还对DAO进行 引入,定义了我们在类SdbPackMaintBusinessImp用到的DAO。数据库持久层2:通过对象/关系映射工具Hibernate实现关系数据库与对象进行关联。在hibernate.cfg.xml文件中加载了数据库连接设置和所有表的.hbm.xml映射文件。<property name="connection.url">jdbc:oracle:thin:locahost:1521:ora9i1</property><property name="connection.username">cll</property><property name="connection.password">cll</property>.<!- Table hbm.xml Mapping -><mapping resource="jp/co/intec/proj/webs/planet/syohin/model/Pack.hbm.xml"/>Spring 提供了一种与 Hibernate 集成方法:继承 HibernateDaoSupport 来实现 DAO。继承了 HibernateDaoSupport 的类可以通过 getHibernateTemplate()方法取得 HibernateTemplate 对 象。使用它可以对数据表对象进行查询单个对象,删除,插入,简单查询。实现了 Spring 到 Hibernate 的集成 。例如我们如果要向 Pack 表 插入一条数据,可以使 用 getHibernateTemplate().save(org.cll.model.pack)就可以了。集成框架以Spring框架为核心,向下集成Hibernate进行持久层的访问;向上集成Struts 框架按照清晰的MVC模式控制,可以清楚的划分应用程序的层次,提高了系统的灵活性, 也提高了代码的可扩展、可维护及可复用性等。4 小结本文先介绍了三种开源框架:基于 MVC 的 Struts 框架,基于 IOC 和 AOP 的 Spring 框 架,O/R 映射工具 Hibernate。然后集成这三种框架构建了一种 Web 应用开发框架,并将这 种框架应用于实际的开发项目商品数据库系统中。这种集成策略在当今的 Web 应用中已被广泛采用。在项目规模比较大的情况下,也显 示出了框架集成的优越性。但相对于比较小的项目来说,使用这种软件框架集成不但会延长 软件的开发周期,因此会弊大于利。当然,这三种框架可以单独使用,也可只采用其中的任 意两种,这是由项目的需求来决定的。如果项目的对数据库操作比较频繁,而且数据量也比 较大的话,而又不需要 Web 视图的话,那就选择 Spring 与 Hibernate 框架集成;如果项目需 要对大量的 Web 视图进行操作,而数据库的操作不是太复杂的情况下,就可以采用 Spring 与 Hibernate 框架集成。参考文献1张新曼精通 JSPWeb 开发技术与典型应用M人民邮电出版社,20062 Hibernate 官方网站:http:/ www.hibernate.org3 Struts 官方网站:http:/Jakartaapache.org/struts/indexhtm1 4 Spring 网站:http:/wwwspringframework.org5 孙卫琴. 精通 Hibernate:Java 对象持久化技术详解. 电子工业出版社, 2005 年 4 月6 蔡雪焘Hibernate开发及整合应用大全M北京:清华大学出版社,2O067 李刚 轻量级 J2EE 企业应用实践. 电子工业出版社,2007 年 4 月Integrated Application Technology of the SoftwareFramework in the Goods Database SystemHe Chengwan,Cao Lianlian,Nie ZhijieSchool of Computer Science and Engineering,Wuhan Institute of Technology,Wuhan (430205)AbstractUsing the software framework can improve the reusability and flexibility of the system.With system become more and more fat, How to integrate many kinds of software framwork so as to reduce themodule coupling degree and improve reuse of module become a hot issue between software developers.This paper mainly tells that integrates 3 kinds of outstanding software framework such asStruts, Hibernate and Spring, which based on real projects experience.and analyzes both vantage anddisadvantage of the Integration.Keywords:Integrated Framework,Struts,Spring,Hibernate作者简介:何成万(1967-),男,湖北荆门人,博士,副教授,主要研究领域为软件模式理论与方法; 曹莲莲(1983-),女,山东滕州人,硕士研究生;聂志杰(1984-),男,江西吉安人,硕士研究生。