优秀本科毕业论文

更新时间:2024-05-21 20:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学校代码: 10567 专业代码:

中图分类号: 学生学号: xxx

x x大学

本科生毕业论文(设计)

基于Struts+Spring+Hibernate架构

论文题目

的药品销售系统研究与实现

姓部专年

名 系 业 级 Email 联系电话 指导教师

Xxx教务处制 2012年4月2日

Xxx 信息工程学院 信息与计算科学

2008级 信息@126.com

Xxx 刘x

目 录

摘 要 ............................................ 错误!未定义书签。 Abstract....................................................................

错误!未定义书签。

前 言............................................. 错误!未定义书签。 1 系统分析......................................... 错误!未定义书签。

1.1 需求分析 ................................... 错误!未定义书签。 1.2 性能需求 .................................................... 2 1.3 运行环境 .................................................... 2

1.3.1硬件设备 ............................................... 2 1.3.2支持程序 ............................................... 2

2 系统总体框架...................................................... 4

2.1 模型结构 .................................................... 4 2.2 功能模块简介 ................................................ 4 3 技术介绍.......................................................... 6

3.1 MVC模式简介.......................................................6 3.2 Struts2.x简介............................................... 6 3.3 Spring简介.................................................. 8 3.4 Hibernate简介............................................... 9 4 系统详细设计..................................................... 11

4.1 数据库设计 ................................................. 11

4.1.1 E-R图 ................................................ 11 4.1.2 主要数据表............................ 错误!未定义书签。 4.2主要窗体界面................................................ 12

4.2.1首页界面和后台首页 .................... 错误!未定义书签。

5 药品销售系统实现................................ 错误!未定义书签。

5.1 域模型对象................................. 错误!未定义书签。 5.2 持久层实现................................. 错误!未定义书签。 5.3 业务逻辑层实现............................. 错误!未定义书签。 5.4 表现层..................................... 错误!未定义书签。

5.4.1 视图层................................ 错误!未定义书签。 5.4.2 控制层................................................ 20

5.4.3 模型层......................................................21

结 束 语........................................................... 22 参考文献........................................................... 23 译 文........................................................... 24 译文原件复印件..................................................... 31 致 谢........................................................... 40

xxx本科学士论文

基于Struts+Spring+Hibernate架构的药品销售系统

研究与实现

摘 要

随着Internet技术和企业信息化建设的发展,构建基于Web的应用系统的需求越来越复杂,开发周期越来越紧迫。开发可扩展性好、重用性高和易于维护、易管理的Web应用是当前Web技术发展的热点之一。

论文结合药品销售系统多层次体系结构发展的现状,探讨Struts2.x、Spring、和Hibernate框架。方法 本文以基于J2EE体系的Web开发方法为探讨的基线。首先,从Servlet/Jsp技术原理,到结合这两种技术进行Web开发的Model 1和Model 2设计,再到实现Model2的—Struts架构内部机制进行探讨;其次,对持久层的设计进行分析,即Hibernate作为持久层实现,结合Spring技术作为业务层实现,进行框架整合;最后,详细论述该框架在药品销售系统中的应用。结果 通过实践表明,应用这种系统框架可以提高系统开发效率,同时满足系统扩展性和易于维护性的要求。

结论 Struts+Spring+Hibernate框架在J2EE开发中有着举足轻重的地位。

关键词:Struts, Spring, Hibernate , 架构

I

xxx本科学士论文

RESEARCH AND IMPLEMENTATION OF

MEDICINESALES MANAGEMENT SYSTEM BASED ON

STRUTS, SPRING, HIBERNATE

Abstract

With the Web technology development and the greater demands for application Systems based on Web to meet more complicated requirements, shorter development cycle of software. So the application of Web which has better development, maintainability, expansibility, repeatability and easy management, is the hotspot of the Web technology.

The paper is based on the web development methods of J2EE architecture. Firstly, introduce the technical principle of Servlet/Jsp, the Model1 and Model 2 design combining Servlet with JSP and the discuss of internal mechanism of Struts2.x architecture which can better implement the Model 2 and so on. Secondly, I applied the Hibernate to the persistence layer, applied the spring framework to the business layer, conformed in framework and constructed a flexible, extensible and high performance developing architecture .Finally, an example based on medicine-sales management system is introduced to illustrate the process to build multi-tiers system with the help of the architecture. Results show that this new framework (Struts2.x+Spring+Hibernate) helps to increase work efficacy in exploration.

Our study demonstrate that Struts2.x+Spring+Hibernate has important reference value for the J2EE development.

Key words:Struts, Spring, Hibernate , Architecture

II

xxx本科学士论文

前 言

随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,发布最新动态信息,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。

其中药品销售系统是构成企业网站的一个重要组成部分,系统使用java和流行SSH框架开发, 实现了网站动态管理,使得药品销售企业对信息的管理更加及时、高效,提高了工作效率。该药品销售系统具有一般药品销售系统的功能,主要包括前台药品商城和后台药品管理区,可为药品销售企业发布药品信息,为药品销售企业提供管理的服务。

该系统是基于B/S(Browser/Server,浏览器/客户端)模式实现,基于SSH架构开发设计,主要实现对药品销售企业的发布与管理功能,对药品信息的浏览阅读等。 随着Internet/Intranet技术的兴起,Web应用在信息系统中越来越重要,未来的方向是大量的PC应用迅速的向Web迁移,MIS也逐步由C/S模式向B/S模式迁移。目前,电子商务技术正以前所未有的发展速度迅猛发展。于是,本文基于目前比较流行的J2EE开源框架Struts、Spring、Hibernate技术,构建一个基于Web的在线药品销售系统。为客户提供通过互联网在线药品在线查询的销售的服务,快捷、方便地满足客户的需求。

[1]

1

xxx本科学士论文

1系统分析

1.1 需求分析

该系统的用户为药品销售企业,每日需要发布一些最新药品信息和提供在线购买服务,如何能有效地管理和发布信息及日常购物产生的信息呢?最初用户的需求为:“该药品销售系统具有一般药品销售系统的功能,同时具有管理员对后台数据的处理功能(如新药品上架、下架和输入价格及调整会员价格等)”。

根据药品销售系统管理的实际需求,在首页中能显示最热卖的药品、口碑好的药品和最新价格等,同时在后台发布药品时可以添加图片,也可以添加HTML语法,在前台能自动根据所显示的图片和HTML语法来显示药品信息。

在后台管理中,因为有权限的管理员才能登录管理后台,所以需要有商品类型添加模块、商品添加模块、管理订单模块;在前台,一般的浏览用户能根据自己的需要选择合适的药品进行购买,能返回订单号等功能模块。

1.2性能需求

该系统在性能功能上应达到如下需求:

操作简单、界面友好,完全控件式的页面布局,使得药品的录入工作更简便,许多选项包括药品类型分类、来源厂商、会员价格等只需要点击鼠标就可以完成;另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。对常见网站的药品管理的各个方面:药品录入、浏览、删除、修改、搜索等方面都大体实现,实现了网站对即时药品的管理要求;即时可见:对药品的处理(包括录入、修改、删除)将立即在主页的对应栏目显示出来,达到“即时发布、即时见效”的功能;系统运行应该快速、稳定、高效和可靠;在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。

1.3 运行环境

1.3.1硬件设备

客户机硬件要求:具有 Pentium III 处理器以上且满足以下要求的计算机:最低 64 MB 内存,最小 2.1 GB 硬盘。

服务器硬件要求:具有 Pentium III 处理器以上且满足以下要求的计算机:最低 256MB 内存,最小 8 GB 硬盘。 1.3.2支持程序 客户端

2

xxx本科学士论文

操作系统:Windows 98/NT/2000/XP或更高版本 浏览器:IE 5.0以上或Netscape同等版本以上 服务器

操作系统:Windows 2000 Server以上 Web服务器:Tomcat 数据库:MySQL5.0

3

xxx本科学士论文

2 系统总体框架

2.1 模型结构

该系统的模型结构如图2-1-1所示:

web视图层业务逻辑层数据持久层Struts-MVCSpring插件SpringDAOHibernateStruts Action,JSP,Struts.xml事物,hibernate Session 管理,业务类数据源连接,查询语言支持和其他Hibernate服务域模型业务对象 图2-1-1药品销售系统的模型结构图

该系统结构分为三个逻辑层:

Web 层:Web层为客户端浏览器提供对应用程序的访问,这一层是作为解决方案文件中的 Web 项目实现的。Web 层由JSP组成,Web 视图层是用 JSP 提供用户操作,而Struts2.x中Action实现各种控件的事件处理程序

[3][5]

业务层:包含各种业务规则和逻辑的实现,业务逻辑利用Spring完成如用户账户的验证和类型转换这样的任务

[3][5]

数据访问层:数据访问层为业务层提供数据服务,这一层是使用Hibernate进行DAO封装,从而实现面向对象的操作数据库。

2.2 功能模块简介

药品销售系统主要包含用户管理、药品类型管理、药品管理、购物车管理和订单管理。图2-2-1列出系统的功能模块图:

4

xxx本科学士论文

药品销售系统用户管理药品类型管理药品管理购物车管理订单管理 图2-2-1药品销售系统的模型结构图

系统工作流程为:

1. 普通用户或者是管理者进入到系统index页面。

2. 根据自己的角色选择操作,如普通浏览者浏览需要的药品;管理者可以进入后台管理登录页面。

3. 普通浏览者发现需要购买的药品,可以进入登录页面,进一步填写个人信息如个人收货地址、联系电话等。管理者进入后台,可以进行商品类型管理、商品管理、订单管理及用户管理等。

4. 普通浏览者或后台管理员操作完成或需要退出,可以选择导航条上的“退出”按钮。

浏览药品信息浏览阳光导药网普通浏览者用户登录注册填写购物信息商品类型管理退出系统商品管理后台管理者验证订单管理用户管理

图2-2-2药品销售系统的工作流程图

5

xxx本科学士论文

3 技术介绍

3.1 MVC模式简介

[1]

MVC模式即模型—视图—控制器(model-view-controller)模式,实质上,MVC模式是对于GOF的23种设计模式中一些基本模式的集合和优化。MVC模式是目前交互式系统应用最广的一种分层架构,能很好地实现用户界面层和业务处理层隔离,对代码进行模块化的划分,从而使系统中的各个功能模块之间达到“解耦”的效果,也很好地遵循OCP原则(Open-Closed Principle)。下面是MVC示意图:

视图显示系统模型:向模型登记自己:向控制器发出用户命令:[4]

模式查询数据通知视图保存系统状态:通知数据变化:接受查询:用户请求选择视图控制器定义用户行为:接受用户输入调用模型更换:选择视图显示:修改数据

图3-1-1MVC模式图

模型层:

模型层表示业务数据和业务逻辑,主要任务是执行对数据的操作,如对数据CRUD操作。模型是专门负责维护数据的,本身并不能决定这些数据对用户端的表示方法,而是只提供一些对外的接口,这些接口包括取值或改值方法,让视图和控制器可以获得模型的内部数据或者对其进行修改(如图中的查询数据和修改数据)。

视图层:

视图是直接与用户交互的界面,视图的主要任务是表达数据和接受用户动作,并把动作的请求传递给控制器。视图可以调用模型提供的取值方法查询业务状态,但是不能直接改变模型的数据,视图接受用户动作要求改变显示数据,必须经过控制器,由控制器负责调用对应的模型中相应方法修改模型中的数据。

控制器:

控制器的任务就是来执行动作,即立即处理由视图接受的各种用户动作。控制器是MVC的中枢系统,当用户通过视图,通过提交请求发出更新模型指令时,都是通过控制器进行的。

MVC的优点:

首先:多个视图能共享一个模式,从而提高代码的重用性。

其次:三层之间是相互独立的,当软件需要改动时,能集中于某个层,而不必牵一发而动全

6

xxx本科学士论文

身,因此降低了代码的耦合性。

最后:采用MVC模式思想,能在软件开发过程中实现很好的分工,提高开发效率。

3.2 Struts2.简介

[2] [3]

对于Struts,大家很熟悉了,它是一个基于MVC的框架,经过多年的开发已经变得非常成熟、稳定,并为广大开发人员所接受,成为了世界上应用最广泛的MVC框架。但是通常所说的Struts是指Struts1.x。Struts1.x框架是以ActionServlet为核心控制器,整个应用以客户端请求驱动。相对于Struts2.x而言,Struts1.x与JSP/Servlet耦合非常紧密。

Struts2.x是由另外一个著名的开源框架WebWork发展而来的。Struts2的设计思想和核心框架与WebWork是完全一致的,同时它也吸收了Struts1中的一些千锤百炼的优点。Struts2是集成Struts1和WebWork两者设计思想之优点而设计出来的新一代MVC框架。

Struts2的工作流程图如下:

图3-1-2 struts工作流程图

Struts2.x框架的工作流程: 1. 浏览器发送一个请求。

2. 核心控制器FilterDispather根据Web浏览器发来的请求决定调用合适的Action。 3. 拦截器链自动对请求应用验证等通用功能。

7

xxx本科学士论文

4. 回调Action的execute()方法。

5. Action的execute()方法执行结果将输出到浏览器中,以多种 返回给Web浏览器。

3.3 Spring简介

[2] [3][6]

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。

图3-3-1 Spring组件图

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

? 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是

BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

? Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。

Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 ? Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到

了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。 ? Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常

处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

8

xxx本科学士论文

? Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,

其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

? Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应

用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

? Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策

略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

[6]

3.4 Hibernate简介

Hibernate是采用ORM模式实现数据持久层的一个优秀Java组件,它对JDBC进行了非常轻量级的对象封装,提供了强大、高效的持久化操作服务,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate最大的优点就在于它能够使得开发者能够像处理Java对象一样处理持久层的数据,完成数据持久化的重任[10]。

Hibernate的体系结构如下:

图3-4-1 Hibernate结构图

主要部件

SessionFactory:

针对单个数据库映射关系经过编译后的内存镜像,它也是线程安全的(不可变)。 它是

9

xxx本科学士论文

生成Session的工厂,本身要用到ConnectionProvider。 该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。

Session:

表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短。 其隐藏了JDBC连接,也是Transaction的工厂。

10

xxx本科学士论文

4 系统详细设计

4.1 数据库设计

该系统使用MySQL5.0作为应用程序的数据库,建立了有6张数据表:admins表存储管理者信息,commodity表存储商品信息,commodityclass表存储商品类型信息, orderform表存储订单信息, orderlist表存储订单列表信息,uses表存储用户信息。 4.1.1 E-R图 orderFormIDorderFormNOuserIDsubmitTimeconsignmentTimetotalPriceorderformremarkIPAdressisPayoffisConsignmentcommodityClassIDCommodityClassN ameadminIDusenamepasswordadminsuserscommodityManufacturercommodityClasscommodityNamecommodityIDcommodityDepictcommodityPricePricecommodityLeaveNumimage于n于属属commodityclassaddressregTimeuserIDusernamenamesexpost1n1commodityAmountRegTimeorderListIDemailorderFormIDcommmodityIDamountorderlistregIpAddressphonepassword图4-1-1-1 E-R图

11

xxx本科学士论文

4.1.2 主要数据表

在6个数据表中,主要介绍管理表和商品类型表及商品表如下:

表4-1-2-1 管理者表

数据库字段名

称 adminID usename password

类型 int varchar varchar

4

长度 说明

自动增长字段,不允许空,主键 用户名,不允许空 用户密码,可以空

50 50

表4-1-2-2 商品类型表

数据库字段名称 commodityClassID

类型 int

长度 4

商品种类名称

说明

自动增长字段,不允许空,主键

commodityClassName varchar 50

表4-1-2-3 商品表

数据库字段名称 commodityID commodityName commodityClass Manufacturer commodityDepict commodityPrice Price

commodityAmount commodityLeaveNum RegTime image

类型 int varchar int varchar varchar float float int int

datetime blob

长度 4 50 50 50 100 50 50 10 10 10

主键,商品编号 商品名称 外键,商品种类 生产厂家 商品描述 商品价格 本商城价格t 商品总数量 商品剩余数 商品上架时间 商品图片

说明

4.2主要窗体界面

4.2.1首页界面和后台首页

首页主要功能是显示最新药品信息、购物车,用户等。

12

xxx本科学士论文

图4-2-1-1(浏览首页)

图4-2-1-2(浏览商品细节信息)

13

xxx本科学士论文

图4-2-1-3(商品进入购物车信息)

图4-2-1-4后台商品添加页

说明:当管理人员进入后台页面,显示在当前导航条的“商品管理”下拉菜单选项中点击“商品;录入”即可以进行商品增加录入功能。

14

xxx本科学士论文

5药品销售系统实现

5.1域模型对象

持久化对象(也称域模型对象)与数据库中的表结构一一映射对应。在此按照传统设计方式来设计数据库表结构与对象之间的关系,通过利用MyEclipse工具,从数据库表结构映射为 *.hbm.xml文件和对应的POJO类文件(逆向工程)。步骤如下: 1. 首先将视图切换到“MyEclipse Database Explorer Perspective” 2. 在”DB Browser”中选中数据库中的”TABLE”项。

3. 选择所要逆向工程的表,右击“Hibernate Reverse Engineering”。

4. 在其后的 Hibernate Mapping and Application Generation 对话框里,选择Create

POJO,和Spring DAO,Finish后,MyEclipse自动生成对应的*.hbm.xml文件和对应的POJO类文件。 图形步骤如下:

图5-1-1 图5-1-2

图5-1-3 图5-1-4

5.2 持久层的实现

持久层是凡是涉及数据库操作的基础,持久层控制着应用程序向数据库的R/W操作。在本系统中利用Hibernate实现这一任务。向业务逻辑层提供DAO接口,具体实现在DAO IMPL中完成。

5.2.1 DAO组件接口

DAO接口定义了DAO组件要实现的方法,但是并为提供具体的实现。利用DAO接口,让系统中的业务逻辑组件面向DAO接口编程,从而达到业务逻辑依赖接口,而非依赖具体的实

15

xxx本科学士论文

现类,达到“解耦”效果。

下面就以商品类型添加DAO接口为例来进行说明,下图5-2-1为针对商品类型添加设计的commodityClassDAO:

public interface CommodityClassDAO {

public void save(CommodityClass commodityclass);//保存商品种类

public List findAll(Page page);//分页查询所有的商品种类 public int findAllCount();//查询所有记录数

public List findAll();//查询所有的商品种类 public CommodityClass findByID(int commodityClassID); }

5.2.2 实现DAO组件

DAO组件仅仅有接口没有提供具体实现方法,无法完成系统实际操作,因此系统还需要实际的DAO实现类用以完成系统实际操作如CRUD(create、retrieve、update、delete)。针对commodityClassDAO,具体实现方法放在commodityClassDAOImpl中。如下所示:

public class CommodityClassDAOImpl extends HibernateDaoSupport implements CommodityClassDAO{

public List findAll(Page page) { Session session = getSession(); //获得session对象

Query query = session.createQuery(\执行查询 query.setFirstResult(page.getBeginIndex()); //设置查询起点位置 query.setMaxResults(page.getEveryPage()); //设置查询最大值 return query.list(); //返回查询结果 }

public void save(CommodityClass commodityclass) { getHibernateTemplate().save(commodityclass);//保存实体 }

public int findAllCount() {

List commodityClasses =

getHibernateTemplate().find(\查询所有记录 return commodityClasses .size();//返回记录数 }

public List findAll() {

return getHibernateTemplate().find(\}

public CommodityClass findByID(int commodityClassID) { return (CommodityClass)getHibernateTemplate().load(CommodityClass.class, commodityClassID);

} }

由于篇幅所限,在此以save ( )方法为例。

定义commodityClassDAOImpl类,它继承Spring的HibernateDaoSupport类。在该

16

xxx本科学士论文

类中通过调用getHibernateTemplate()中的方法来实现。

Import

org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/*导入包*/;

public class CommodityClassDAOImpl extends HibernateDaoSupport implements CommodityClassDAO /* 继承HibernateDaoSupport */

getHibernateTemplate().save(commodityclass); /* 调用模版里的save ( )方法*/ 5.2.3 配置DAO组件

上面的DAO组件是基于Hibernate的持久化操作,必须获得sessionFactory的引导,由于本系统是基于SSH框架的,系统中的DAO组件由Spring容器负责管理,系统sessionFactory也由Spring容器来管理。因此DAO组件无须显示的获得sessionFactory的引用,由spring容器注入。

上面的commodityClassDAOImpl类在spring中的配置如下:

通过以上的配置后,DAO组件能正常运作。向上能提供业务逻辑组件服务,向下能对

实体提供持久化操作。

5.3 业务逻辑层实现

业务逻辑是整个应用程序的核心,接受表现层的请求,控制着应用逻辑的流程,并通过持久层来完成数据的W/R操作。本系统的业务逻辑组件也与持久层一样采用接口和实现分离的准则,使业务逻辑层接口定义功能,具体的实现由实现类来完成。 5.3.1 业务逻辑组件接口

本系统是按功能模块来划分业务逻辑组件接口。在此以商品添加模块为例,商品添加业务逻辑接口CommodityService如下图5-3-1所示。在CommodityService定义了一系列方法,但都没有提供具体的实现方法。这样的好处是能够实现依赖接口而不是具体的类,分离组件具体类,达到解耦效果。

public interface CommodityService {

public void addCommodity(Commodity commodity);//保存商品 public Result findAllCommodity(Page page);//分页查询商品

public void deleteCommodity(int commodityID);//按ID删除商品

public List queryByRegTime(int num);//按提交时间倒序查找 public Commodity queryByCommodityID(int commodityID);//按ID查找商品

public Result queryByCommodityClas(CommodityClass commodityClass,Page page); }

17

xxx本科学士论文

5.3.2 业务逻辑组件接口实现

与持久层一样,仅仅有业务逻辑组件接口依然不能完成实际的业务逻辑功能,必须提供相应的实现类才能完成实际的业务功能。依赖于底层DAO组件提供的持久化操作,业务逻辑组件可以更加专注于业务逻辑的实现,无须理会底层的持久化实现。

系统的业务逻辑组件依赖于DAO组件,但是这种依赖在SSH架构中是一种松耦合的依赖,是接口层次的依赖。因此业务逻辑组件并不需要直接定位到DAO组件,无须理会DAO组件的实例化过程。Spring容器负责完成DAO组件的实例化,并把DAO组件依赖注入业务逻辑组件,从而实现业务逻辑组件和DAO组件之间的高层次耦合。

商品添加模块,它向表现层提供CommodityService接口,在CommodityService中定义了一系列方法,但并无实现体,具体实现通过CommodityServiceImpl类来完成。以商品录入提交方法为例,其流程图如下图5-3-2:

开始商品信息的填写N信息验证(类型转换等)更新商品显示列表Y商品信息保存结束

图5-3-2 商品录入流程图

商品录入实现类中定义了addcommodity ( )方法,通过Spring容器动态注入,实现save、delete功能。在此使用常见的设置注入法(set方法)。代码如下所示: public class CommodityServiceImpl implements CommodityService { private CommodityDAO commodityDAO;//注入数据访问层 public void setCommodityDAO(CommodityDAO commodityDAO) { this.commodityDAO = commodityDAO;//设置数据访问层 } public void addCommodity(Commodity commodity) { commodityDAO.save(commodity);//完成数据保存 } }

18

xxx本科学士论文

5.3.3 业务逻辑组件配置

配置业务逻辑组件需要将上面的业务逻辑组件实现类部署到Spring容器中,因为业务逻辑组件依赖DAO组件,所以还要在此配置所依赖的DAO组件。下面是配置片段代码:如下所示:

5.3.4 事务管理

Spring容器中配置了业务逻辑组件后,还要为业务逻辑方法增加事物控制。由于用户的业务逻辑方法对应用户的一次业务请求,通常而言,用户的每次业务请求都是逻辑不可分的,所以要增加事物控制。

在本系统中的事物控制采用Spring的DefaultAdvisorAutoProxyCreator事物代理方式,此代理生成器自动搜索Spring容器中的Advisor,并为容器中的bean创建代理。代码如下所示:

id=\er\

5.4表现层

5.4.1视图层

首先,介绍下前台主页面(代码如下所示):

<%@ page language=\<%@ taglib prefix=\<%

String path = request.getContextPath(); StringbasePath=

request.getScheme()+\%>

19

xxx本科学士论文

阳光导药购物网

Top