鉴于Struts+JPA+Spring框架下电子商务系统设计及实施

时间:2022-03-01 05:19:51

鉴于Struts+JPA+Spring框架下电子商务系统设计及实施

1框架简介

著名的软件大师RalphJohnson对框架(Framework)进行了如下的定义:框架是整个系统或系统的一部分的可重用设计,由一组抽象的类及其实例间的相互作用方式组成,框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。JavaEE复杂的多层结构决定了大型的JavaEE项目需要运用框架和设计模式来控制软件质量。Struts、JPA和Spring是JavaEE开发的3种轻量级开源项目,它们的出现为开发人员提供了极大的便利,将开发人员从简单而繁琐的工作中解脱出来,从而去关注业务逻辑模块的实现,从而降低了开发周期。同时,也为系统的性能和安全性提供了保证,提高了系统的扩展性和可维护性。

1.1Struts

Struts作为Apache组织的子项目,是一个基于MVC(模型—视图—控制器)设计模式的开源框架,其摆脱了传统Web应用开发模式的束缚,得到了众多软件企业和开发人员的认可,成为MVC模式Web应用的首选框架。Struts的模型(Model)分为Action和ActionForm两个对象,由ActionForm封装交互的数据元素,Action完成业务处理。视图(View)由JSP以及Struts标签库等组成,视图负责前端的页面及数据显示。控制器(Control-ler)用于管理模型与视图的交互,控制组件有struts-con-fig.xml和ActionServlet,控制器主要处理发送到Struts的HTTP请求,把请求分发到相应的Action类,然后通过ActionForward进行链接转向。

1.2Spring

Spring是一个以控制反转(IOC)和面向切面(AOP)编程为核心的轻量级分层体系结构开发框架。通过控制反转机制,只需描述哪一个组建需要哪一项服务,而无需在代码中直接与对象或服务连接,通过IOC容器自动地将其注入。同时运用面向切面编程可以创建“横切关注点”,可将它们插入到代码中,使代码具有良好的可重用性可扩展性。此外,Spring还提供了包括声明式事务管理,RMI或WebServices远程访问业务逻辑,以及可以多种方法进行的持久化数据库的解决方案。

1.3JPA

JPA(JavaPersistenceAPI)由EJB3.0软件专家组开发,是JavaEE标准中的ORM规范,它充分吸收了现有Hibernate、TopLink等ORM框架的基础上发展而来。JPA是一个简单易用、伸缩性强的ORM规范。任何符合JPA标准的框架都提供相同的访问API,这确保了利用JPA技术开发的企业级应用可以在任何实现了JPA规范的ORM框架中运行,可移植性很强。目前主流的ORM框架如Hibernate也提供了对JPA的实现。

2系统设计

2.1系统功能模块设计

电子商务系统是一套面向企业级的商品在线交易平台,从用户的角度看系统可分为前台和后台两大模块,前台主要负责用户的产品浏览,在线交易,产品评价等商务活动。后台模块又可根据超级管理员、普通管理员、部门员工等不同权限对网站的运营实施管理功能。从功能结构上看,系统可包含多个功能子模块,具体如下:产品管理:网站运营人员可通过该模块对产品的详细信息进行管理。产品具有产品类别、品牌、价格、销量、点击数、厂商、是否推荐标识等属性,产品类别具有向下无限级分类功能。产品搜索:根据用户输入的关键词对产品信息进行搜索,并可通过产品类别、品牌、价格等属性进行筛选。产品展示:前台展示页面提品类别和品牌的导航,通过导航可以定位到相应类别和品牌下的产品列表;产品页面显示产品的详细信息,并可根据产品价格,产品销量等属性对产品进行排序。购物车:购物车是在线交易系统的重要组成部分,类似于现实世界超市中的购物篮。用户可以将喜爱的产品添加进购物车,而后建立订单结算,支付方式可通过在线支付(支付宝等)和邮局汇款方式。购物车提品添加、产品删除、产品数量修改、产品清空、产品总价格计算等功能。订单管理:订单管理模块的主要功能包括订单查询、订单修改、订单删除、订单处理等。订单处理流程由多个部门协同参与,市场部负责订单确认,财务部负责订单支付确认,产品部负责产品的配送。订单根据处理流程应具有多个处理状态:未处理、已确认、已支付、已配送等。为避免同一订单同时被多人进行处理造成的订单异常,订单在被处理时其状态设为锁定,只允许单人访问,处理完毕后恢复解锁。用户管理:网站的用户群体可分为前台客户和网站运营人员,故用户管理功能可分为对前台客户信息的管理和网站运营人员的管理。对前台客户可管理其注册信息、购买行为、评论回复等;对网站运营人员可管理其员工信息和部门信息等。其中,网站运营人员隶属于不同的部门之下,每个部门行使不同的责任和权限。权限管理:权限管理针对网站的运营人员设定,超级管理员拥有所有权限,可创建并维护下属的部门信息,为部门添加员工并分配部门相应的操作权限。数据统计:对产品的销量、点击数、访问来源、个性化用户购买行为、浏览习惯等数据进行统计,为网站商业运营提供决策支持。

2.2分层架构设计

基础平台采用JavaEE的三层结构,分为表现层、业务逻辑层和数据服务层(系统架构如图1所示)。其中表现层主要包括Jsp、Struts标签和JSTL/EL来完成页面显示和数据的呈现。数据服务层由MySQL提供数据存储服务。中间层通过整合主流的开源框架Struts+Spring+JPA实现,具体又可细分为:①Web层,负责表现层与业务逻辑层的交互,通过调用业务层对象处理业务,并进行链接转向,呈现数据到表现层;②Service层,负责业务逻辑的实现,通过DAO接口的实例对象进行持久化操作;③DAO层,负责与持久化对象进行交互,封装了基本的数据访问方法,如增、删、改、查等;④PO层,负责对象到关系数据库的映射。整合框架的过程中,通过基于MVC模式的Struts框架,利用ActionForm类封装与用户交互的数据元素,Ac-tion类实现控制、调用业务对象处理业务。通过Spring容器进行业务组件的组装关联,通过依赖注入、AOP应用、面向接口编程,来降低组件之间的耦合度,提高系统的扩展性和通用性。把ActionObject交由Spring容器进行管理,在Action中可通过依赖注入功能为Action对象注入业务对象;使用Spring容器提供的事务管理功能对业务层对象声明事务管理。通过JPAAPI对实体bean进行持久化操作。

3系统实现

3.1泛型机制

泛型是JavaSE1.5的新特性,在没有引入泛型的情况下,往往通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,导致常常出现运行时的转型异常。本系统通过引入泛型机制实现参数化类型,所操作的数据类型被指定为一个参数,该参数类型可以用在类、接口和方法的创建中,并且所有的强制转换都是自动和隐式的。从而提高代码的重用率和可读性。

3.2产品分类实现

下面以产品分类为例详细说明在架构中该模块的具体实现。产品分类应具类别添加、修改、查询、删除、向下无限极分类、分页查看等功能,由于产品类别之间、类别和具体产品之间有诸多层次性关系,为避免由于删除产品类别导致的其他数据异常,故删除功能并不对产品类别的数据进行物理删除,而是通过一个是否可见标识设定其可见或隐藏。产品分类具有如下属性:分类ID、类别名称、是否可见标识、所属上级分类、子类别等。

3.2.1持久层实现

持久层主要包括持久化类和元注解。通过JPA提供注解方式配置实体的JPA行为,属性映射可以在持久化类的属性getter方法上进行标记。JPA与数据库的连接通过persistence.xml文件进行配置,包括连接数据库所用的连接池、用户名和密码等信息。部分产品类别的实体Bean代码如下:@Entity//指定为JPA实体publicclassProductTypeimplementsSerializable{privateIntegertypeid;//产品类别idprivateProductTypeparent;//所属父类privateSet<ProductType>childtypes=newHashSet<ProductType>();//子类别…@Id@GeneratedValue(strategy=GenerationType.AUTO)//注解持久化类的主键信息和主键的生成策略publicIntegergetTypeid(){returntypeid;}publicvoidsetTypeid(Integertypeid){this.typeid=typeid;}@ManyToOne(cascade=CascadeType.REFRESH)@JoinColumn(name="parentid")//定义外键对应关系和级联publicProductTypegetParent(){returnparent;}publicvoidsetParent(ProductTypeparent){this.parent=parent;}…}

3.2.2业务层实现

(1)DAO层的实现

DAO层包括一个接口DAO及其DaoSupport实现类,通过引入泛型机制实现参数化类型,可对所有实体进行操作。DAO层作为业务逻辑层Service的上层父类,完成和持久层进行交互的,不同的业务逻辑类可根据不同需求对DaoSupport方法进行重载。DaoSupport类部分代码片断如下:@Transactional//声明事务管理publicabstractclassDaoSupport<T>implementsDAO<T>{@PersistenceContextprotectedEntityManagerem;//声明实体管理器publicvoiddelete(Serializable...entityids){for(Objectid:entityids){em.remove(em.getRef-erence(this.entityClass,id));}}@Transactional(readOnly=true)//声明事务只读属性publicTfind(SerializableentityId){returnem.find(this.entityClass,entityId);}}

(2)Service层实现

业务对象负责处理程序的业务逻辑,包括一个接口及其实现类,需要继承DaoSupport实现类并将具体的实体作为泛型参数传入。不同实体的业务类可根据需求重载或增加新的的方法。代码片断如下:@Service@Transactional//声明该类为业务类和声明事务管理publicclassProductTypeServiceBeanextendsDao-Support<ProductType>implementsProductTypeService{@Override//重载实体的删除方法publicvoiddelete(Serializable...entityids){更改可见标识代码;}…}

(3)业务层的配置

下面就是通过Spring的配置文件将定义好的DAO和Service组装关联起来。配置文件bean.xml文件代码片断如下:<beanid="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactory-Bean"><propertyname="persistenceUnitName"value="shopping"/></bean><beanid="transactionManager"class="org.spri-ngframework.orm.jpa.JpaTransactionManager"><propertyname="entityManagerFactory"ref="entityManagerFactory"/></bean><tx:annotation-driventransaction-manager="trans-actionManager"/><beanid="compass"class="pass.spring.LocalCompassBean"><propertyname="classMappings"><list><value>com.bean.product.ProductInfo</value>…</list></property><propertyname="transactionManager"ref="transactionManager"/></bean>

3.3分页实现

在编写JavaWeb应用时,常常需要对显示的数据进行分页显示,如果一次性将所有结果数据显示给用户,则显得不够人性化和美观。该系统对分页功能进行封装,并引入泛型机制,调用时通过include指令包含一个用于显示分页数据的独立jsp页面即可完成对所有实体的分页功能。具体做法是:利用泛型定义一个查询结果类QueryResult用于存放查询得到的分页数据,该类包含两个属性List<T>型的结果记录集resultlist和long型的查询结果的总记录数totalrecord以及它们的getter和setter方法;同样利用泛型定义一个用于在页面显示的页对象PageView,其包括总记录数、总页数、每页显示记录数、当前页、记录的开始索引、起始页码、结束页码、分页数据等,其中分页数据为List<T>型,通过set方法将QueryResult的分页数据注入,另外总记录数,总页数和记录的开始索引也需要通过简单的公式计算出来,通过set方法注入,在此不一一列举。用于显示分页数据的独立jsp页面fenye.jsp部分调用如下:<c:forEachitems="${pageView.startindex}"end="${pageView.endindex}"var="p">第${p}页</c:forEach><c:forEachitems="${pageView.records}"var="entry">${entry.propertyValue}</c:forEach>

4结束语

Struts+JPA+Spring是目前众多软件企业使用广泛的主流应用框架,同时也是JavaEE的未来发展趋势。本文对这三个框架做了详细介绍,并通过整合三者,充分发挥各自的优势对电子商务核心系统做了设计与实现。严格按照JavaEE的分层架构将表现层,业务逻辑层和持久层相分离,降低了组件之间耦合度。同时,也提高了各模块的重用性和可读性,使得系统结构更加清晰,开发简洁、有很好的可扩展性和可维护性。

上一篇:鉴于网上商城的电子商务综合实训教学创新 下一篇:高职电子商务基础与应用教学改革