基于“Struts+Spring+Hibernate”架构技术的B2C电子商务系统的设计
作者:陶祥亚 樊 华
来源:《商场现代化》2008年第19期
[摘要] 目前,轻量级J2EE架构Struts+Spring+Hibernate已渐渐成为B2C电子商务系统的主流技术。本文在对Struts、Spring和Hibernate进行分析的基础上,对B2C电子商务系统进行了整体设计,并对该架构下电子商务系统的技术实现进行了详细说明,并给出了相关构造的功能描述和部分核心代码。本研究中所用的架构技术能提高商务系统的安全性和稳定性,使商务系统资源得到最大限度的节省和利用,同时使系统具备更好的可扩展性和可维护性。 [关键词] Struts+Spring+Hibernate 电子商务系统 设计
纵观电子商务的发展历史,大概可分为两个阶段。第一阶段是产品介绍阶段,即通过互联网公布企业和产品信息,类似于传统的广告方式;第二阶段是产品交易阶段,企业间通过基于互联网的定单交易系统,直接在网上完成交易,主要表现形式有电子采购、电子销售和电子交易市场三大类网站。目前,大多数的电子商务系统主要由供求系统、新闻发布系统、“知道”系统、B2C系统四部分构成。其中B2C系统是电子商务系统的核心系统,为整个商务平台构建了一个基本框架,主要提供电子商情,能够促进消费者购买商品,从而产生电子购物和交易。随着Internet的迅猛发展与J2EE技术的成熟,使用Web应用框架的开发者的人数得到了快速地增长。框架通过为应用开发提供预先准备好的起步器,来帮助开发者更快、更好地建立应用。框架的使用正在得到快速地发展,现在已经有几十个可选的Web应用框架,在这些框架中比较流行的轻量级J2EE架构是Struts+Spring+Hibernate。本文研究的是利用“Struts+Spring+Hiber-nate”架构技术对电子商务系统的核心系统B2C所进行的设计。 一、Struts、Spring和Hibernate简介 1.Struts MVC设计模式
Struts MVC(Model-View-Controller)把一个应用程序数据的输入、处理、输出处理操作流程划分为模型层、视图层和控制器。这三次的具体业务规则如下:模型层(Model),表示业务逻辑和业务规则,Struts MVC为模型提供了Action和ActionForm两个对象。由ActionForm 进行数据封装,Action进行业务处理,模型可以用JavaBean、Hibernate等组件技术来处理数据库的访问。视图层(View),它就是我们通常所说的表示层。Struts的视图是由JSP以及用户自定
龙源期刊网 http://www.qikan.com.cn
义标签组成,模型进行操作之后,其结果就是通过视图来显示的。在视图中不建议进行大量的数据处理操作和业务操作,只是给用户提供要处理的数据的显示。控制器(Controller),它用于管理模型与视图发生的交互。在Struts中主要的控制器组件有struts-contig.xml和
ActionServlet。用户进行数据处理时,它不能直接去执行模型,而是通过控制器来间接地实现。控制器控制视图提交数据,然后由控制器控制相应的模型层进行数据处理操作。模型处理完数据后,再由控制器找到相应的视图进行数据的显示。 2.Spring框架
Spring是一个开源框架,它是一个以控制反转(IOC)和面向切面(AOP)编程为基础的轻量级框架。Spring通过控制反转(inversion of contro1,IOC)这一机制实现降低代码耦合度。当应用控制反转时,对象都是被动地给予它们的依赖,而不是主动地去创建或寻找它们的依赖对象。同时Spring为面向切面编程提供了有效的支持,面向切面编程能使来自系统服务的单个的应用业务逻辑粘合起来。应用对象做它假定做的业务逻辑,其它的就什么也不做。Spring作为容器,可以管理自己的生命周期和配置应用对象。使用者可以通过配置原形来让Bean彼此创建或者通过创建一个单一实例或者在每次需要的时候创建一个实例,当然这些原形要彼此互相关联。 3.Hibernate框架
Hibernate是一种实现对象和关系之间映射(Object RelationMapping)的框架。它是一种新的ORM映射工具,它同时提供了从Java类到数据表的映射和数据查询、恢复等机制,实现数据层对象的持久性。相对于使用JDBC和SQL来手工操作数据库,使用Hibernate可以大大减少操作数据库的工作量。并且Hi.bema可以和多种Web服务器以及应用服务器良好地集成。Hibernate是JDBC的轻量级对象封装,这使得Java程序员可以使用面向对象的编程技术来操作关系数据库,而不必花费大量的时间去更新和维护复杂的数据持久层.从而降低J2EE架构应用软件开发的难度和复杂度。提高Java应用软件的开发效率。 二、基于Struts、Spring、Hibernate的B2C电子商务系统的设计 1.B2C系统整体设计
根据电子商务系统的主要构成情况,笔者利用Struts+Spring+Hibernate架构技术对B2C系统的框架进行了设计,分别设计有表现层、业务逻辑层、持久层。
表现层——提供与用户交互的界面。GUI(图形用户界面)和web页面是表现层的两个典型例子;业务逻辑层——该层借助了Spring,通过控制反转、AOP应用、面向接口编程,来降低业务组件之间的耦合度,增强系统扩展性。spring框架是—个分层架构,由七个定义良好的模块组成,其中最重要的模块就是核心容器,核心容器定义了创建、配置和管理bean的方式,提供Spring框架的基本功能,核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖、规范与实际的应用程序代码分
龙源期刊网 http://www.qikan.com.cn
开。持久层——该层使用对象——关系映射(ORM)开源项目Hibernate,Hibernate为java提供了ORM持久化机制和查询服务,通过在XML文件中定义对象和关系的映射关系。 层与层之间的关系特征:首先,每个层由一组相关的类或组件构成,共同完成特定的功能。其次,层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的API,而下层组件不应该依赖上层组件。例如,表现层依赖于业务逻辑层,而业务逻辑层依赖于持久层。最后每个层对上层公开API,但具体的实现细节对外透明。当某一层的实现发生变化,只要它的API不变,不会影响其它层的实现。 2.B2C系统Struts表现层开发
Struts的核心控制器由ActionServlet类和Action类来实现。ActionServlet类在电子商务系统MVC模型中扮演中央控制器的角色,主要负责接收HTTP请求信息,它通过存储在特定的XML文件中的struts-config.xml的配置映射信息把请求转发给适当的Action对象,一个电子商务系统用户请求就是通过ActionServlet被进行处理和转发的。
下面是B2C电子商务系统中一个子模块的Struts-config.xml文件片段的范例。Struts-config.xml是Struts的核心配置文件,要跟业务逻辑层相结合,同时也加载了Spring,其关键代码如下:
<action-mappings> <action path=”/order”
type=”org.springframework.web.struts.DelegatingActionProxy”name=”OrderForm”>
</action>
</action-mappings> <! - - = = Spring plugin - - >
<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”> <set-property property “contextConfigLocation”value=“/WEB-INF/classes/ applicationContext.xm1./WEB-INF/Classes/action-servlet.xml”/> </plug-in>
3.Spring在B2C系统中的作用
龙源期刊网 http://www.qikan.com.cn
为实现对Spring IOC容器的访问,应用代码可以通过如下两个接口完成:⑴BeanFact-ory:开发者借助于配置文件(如XML或属性文件)能够实现对JavaBean的配置和管理。⑵ApplicationContext:构建在BeanFactory基础之上,除了具有BeanFactory的功能之外,还添加了时间、声明(非)容器提供的服务等其它功能。主要用于开发J2EE应用,这也是Spring推荐使用的接口。
首先我们看下B2C系统的ApplicationContext.xml文件片段,在文件中把数据库访问的代码封装成一个Bean,然后在XML文件里进行配置。在这里dataSource1这个Bean的生命周期分4个阶段:
(1)实例化JavaBean(也就是dataSource1)。
(2)JavaBean实例的初始化,即通过IOC注入其依赖性。这一阶段将完成JavaBean实例的初始化。
<bean id=”dataSourcel”
class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>
<property name=”driverClassName” Value=”net.sourceforge.jtds.jdbc.Driver”/>
<property name=”url”value=”jdbc.jtds.sqlserver://172.18.1.8: 1433;DatabaseName=webShop”/> <property name=”usename”value=”sa”/> <property name=”password”value=”lqaz2wsx”/> <property name=”maxldle”value=”5”/> </bean>
(3)基于Spring应用对JavaBean实例的使用。一旦Spring创建,并初始化JavaBean实例后,应用就能够使用JavaBean实例了,因此,借助于getBean方法,电子商务系统开发者就能够在应用中进行使用。
(4)IOC容器销毁JavaBean实例。
龙源期刊网 http://www.qikan.com.cn
<bean id=”dataSourcel”
class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>
在不同的事务服务间切换,只会涉及到Spring配置文件的修改,而不会涉及到代码的修改。
4.B2C系统Hibernate持久化层开发
Hibernate是连接Java对象模型和关系数据模型的桥梁,现在越来越多的Java开发人员把Hibernate作为企业应用和关系数据库之间的中间件,以节省和对象持久化有关的三层以上的JDBC编程工作量。
(1)系统的Hibernate数据持久层功能实现可通过hibernate-sevice.xml进行Hibernate属性的设置,设置内容如下: <server>
<mbean code=”org.jboss.hibernate.jmx.Hibernate” name=”jboss.har:service=Hibernate”> <attribute name=”DatasourceName”>java:/OracleDS </attribute>
<attribute name=”Dialect”>net.sf.hibernate.dialect.Oracle9Dialect</attribute> <attribute name=”SessionFactoryName”> java:/hibernate/SessionFactory</attribute> <attribute name=”CacheProviderClass”>
Net.sf.hibernate.cache.HashtableCacheProvider</attribute> </mbean > </server>
建立数据持久层时,就可以先为服务器中的数据表定义实体Bean(Entity Bean)了。
龙源期刊网 http://www.qikan.com.cn
(2)Hibernate映射框架根据与每一对实体类和数据表相关的XML映射文件来实现ORM,通过Hibernate中的ant hibernate命令建立了每个实体类的XML文件。每一个描述数据表的实体类都有相应的XML文件,保证执行业务逻辑处理时通过会话Bean调用实体Bean,可以实现对服务器数据库的无缝访问。
(3)创建“对象——关系”映射文件。Hibernate采用XML格式的文件来指定对象和关系数据之间的映射,在运行时,Hibernate将根据这个映射文件来生成各种SQL语句。这一步所创建的文件,它用PromotionEvent类映射到PR0M0T10-NEVENT表,这个文件应和PromotionEv-ent.Class文件放在同一目录下。
(4)通过Hibernate API编写访问数据库的代码。Hibernate对JDBC进行了封装,提供了充分面向对象的API。 三、结束语
本文使用了轻量级J2EE架构Struts+Spring+Hibernate对电子商务系统B2C核心系统进行了设计,并分析了各个环节的关键技术和实现问题。使用这一技术设计的商务系统很好地把业务逻辑和表示层分离,这种分离使得系统不至于“牵一发而动全身”,同时,也便于业务逻辑模块的重用。这三种技术结合起来充分利用它们的优势,使得基于这三种技术的B2C商务系统应用框架开发简洁、结构清晰,有很好的可扩展性和可维护性,适用于面向对象的设计与开发。另外,本文所开发的B2C电子商务系统特别适用在学校和大型商场等人员密集、且可能发生集中支付的组织内使用。
参考文献:
[1]李伟镰卢建朱:基于Struts和Hibernate的电子申购系统[J].计算机工程,2005,31(19):220-222
[2]杨明根郑明秀廖浩德:Struts+Spring+Hibernate架构及开发方法[J].西南民族大学学报•自然科学版,2007,(4):953-956
[3]廖福保张文梅:基于Struts-I-Spring-I-Hibernate框架的应用研究[J].广东农工商职业技术学院学报,2007,(11):51-54
[4]李保华:基于Struts+EJB+Hibernate的授信风险管理系统设计[J].计算机与信息技术,2007,(4):87-89
[5]王非丁元林文昌:应用架构技术设计与开发电子商务系统[J].计算机工程与设计,2007(11):5507-5510
龙源期刊网 http://www.qikan.com.cn
因篇幅问题不能全部显示,请点此查看更多更全内容