摘要:本文针对江苏省电力公司检修分公司宿迁运维站的物资管理,设计出了基于Struts、Spring和Hibernate三种轻量级框架集成的S2SH解决方案, S2SH 以Spring 为核心部件,向上集成Struts2,向下集成Hibernate,充分发挥了三者各自的优势,具有很好的低耦合、扩展性和复用性。文中对S2SH的实现方法进行了详细的阐述。
关键词:物资管理;S2SH;MVC
0 引言
江苏省电力公司检修分公司宿迁运维站担负着宿迁市220kV及以上变电站的常规预试和检修任务。如何对多个物资库进行5S管理,做到既能合理地控制库存、资金,又加强备品备件管理,需要借助新兴的信息技术,改变旧有的物资管理模式,对运维站物资的领用、采购、储藏、出入库等进行规范化的管理。同时利用Intranet技术,使得各部门之间的备品备件、材料、物资、资金等信息实现共享,形成一个完整的闭环反馈系统。
1 功能需求分析
用户权限要求有分层分级的管理权限。实现功能模块包含物资申报与审批,库存管理(包括入库,移库,领用),用户及其权限管理,
图1 物资领用流程图
检修费用汇总等功能。
以物资“领用”为例说明处理的流程,见图1。
2系统开发平台
作为办公自动化系统MIS的补充,需要创造性的打破标准的办公流程,不至于因为死板的遵守固定的规程,导致办公效率的低下乃至人们对于技术的反感。这就要求系统设计之初就要引入“分层设计”的思想,即MVC架构(Model模型,View视图,Controller控制),降低模块的耦合,提供应用的可扩展性,封装底层的数据及其操作,赋予上层最灵活多变的解决方法,同时提供美观人性化的界面。
2.1 S2SH框架
S2SH(Struts2+Spring+Hibernate)是当前应用较为广泛的遵守MVC的轻量级JavaEE Web框架解决方案。
使用三者集成的理由在于:目前各种轻量级框架往往在处理某一层面的问题时表现突出,而在其它层面上表现一般。例如,Struts2在系统的控制和表现层面上具有很强的优势,但在组件的管理和数据的持久化等层面上存在不足;Spring凭借其控制反转(IoC)容器,在组件的管理和组件依赖注入等层面上表现出色;Hibernate则在实现数据的持久化层面上表现非凡。因此,将Struts2、Spring、Hibernate进行集成是非常必要的。通过集成,可充分发挥这三种框架的优势,达到优势互补的效果,以进一步提高Web 应用系统的重用性、灵活性、维护性和扩展性。
图2 S2SH框架结构图
2.2 分层设计
2.2.1 数据持久层设计
持久层解决方案依靠Hibernate这样一个ORM(object-relation mapping)框架解决,Java EE应用能以面向对象的方式访问数据库,它能消除那些针对特定数据库厂商的SQL代码,并且把结果集从表格式的形式转换成对象的形式。
Hibernate采用传统的POJO(Plain Old Java Objects,简单的Java对象)作为系统的持久化类,并应用XML 映射文件使其具备持久化操作的能力,每一个javabean都有与其对应的XML文件,通过此文件的配置使得数据库中的表与POJO类一一对应,表的属性与POJO类中的属性字段对应。
2.2.2 数据访问层设计
数据访问层(DAO,Data Access Object)负责封装底层的数据访问细节,每个DAO组件可对一个数据库表完成基本的CRUD等操作,实现业务逻辑层与具体持久层的技术分离。DAO层包括两个DAO组件:
1)DAO接口类:用于定义DAO组件的规范,提供给下文的业务逻辑层使用的接口;
2)DAO组件实现类:HQL是一种面向对象的查询语言,它的操作对象是类、实例和属性等。
2.2.3 业务逻辑层设计
业务逻辑层(Business Object)以DAO层为基础,通过对DAO组件的包装,完成系统所要求的业务逻辑。
2.3 Spring与struts2、Hibernate的整合
Spring与struts2、Hibernate的整合主要是通过web.xml,applicationContext.xml文件的配置来实现的。
2.3.1 Spring与Hibernate的整合
本文采用的是MySQL数据库,通过如下代码片段:
<bean id ="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/material?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="aaa"/>
</bean>
就可以实现了与底层数据库连接的创建。Hibernate的配置文件是通过sessionFactory的configLocation(指出hibernate.cfg.xml的位置)和hibernateProperties字段的配置来整合到Spring中的,通过transactionManager获取sessionFactory实例。
2.3.2 Struts2与Spring的集成
利用Spring的IoC(控制反转)特性整合可以更好的解耦,控制器既无须与业务逻辑组件的实现类耦合,也无须与Spring API耦合,是一种低侵入式设计。
当JSP应用的请求被ActionServlet拦截后,Struts2将请求转发给指定的Action,Spring IoC容器的Action实例才是处理用户请求的实际控制器。
2.4 视图实现
视图实现采用了嵌入JavaScript脚本的JSP(Java Server Page)页面。而AJAX(Asynchronous JavaScript and XML)是多种技术的综合,包括JavaScript、DOM、XML和XMLHttpRequest等。使用AJAX,可以减轻服务器负担,无刷新更新页面,进一步促进了页面呈现和数据的分离。
3 物资管理系统中的实现
3.1 S2SH在系统中的应用
图3 物资管理页面
图3是库存列表,系统按照用户权限的限制,提供了不同的用户所能见到的物资库内容。
点击表头的“库存列表”标签,生成左侧子标签,同时javascript脚本提交action—storeList.action? queryValue=工区(其中queryValue是传入的参数)的请求,该请求被捕捉到之后,根据struts.xml的配置,和Spring的IoC机制,由Spring容器负责创建storesAction实例,并根据storesAction类的setter方法注入其他需要调用的类,这些被调用类也是通过Spring通过其配置文件applicationContext.xml进行管理和创建的,因此调用其中的storesAction类中的list方法,由于结果集定义在storesAction类中的Collection类型的全局变量storeList中,通过list对storeList的操作对即list通过返回结果集。
<action name="storeList" class="storesAction" method="list">
<result>/listStore.jsp</result>
</action>
list的结果指向listStore.jsp,它的表格显示标签是DisplayTag标签库,可以对的表格进行分页、数据导出、分组、对列排序等等。使用时,只需在网页中加入如下代码:
<display:table name="storeList" class="store" pagesize="10" sort="list" id=" store " style="BORDER-COLLAPSE: collapse" varTotals="totalMap" requestURI="${url}" export="true">
<display:column property="onlyId" title="唯一标识码" sortable="true" />
</display:table>
标签中的name属性“storeList”,因为此时处于storesAction的生命周期内,因此可以接收到storesAction类的storeList变量。标签遍历storeList里的每一个子对象,可以通过子标签中property的设定将对象里的属性显示在界面上。
3.2 AJAX在S2SH系统中的应用
图4的界面中,选中记录,选择“删除”,此按钮捆绑了一段javaScript脚本。首先发出storeCanDelete.action的请求,从session中获取用户名,通过底层的hibernate机制,查询权限表,判断该用户是否有“删除”权限,即storeCanDelete类的canDelete函数,为了简化操作,没有采用上文的全局变量方式输出判断结果,而是把判断的结果用javax.servlet.http. HttpServletResponse包中的response.getWriter(). print()函数直接输出。只需要在jquery的AJAX函数中接收结果并判断即可。如果能删除,再请求storeDelete.action,完成对底层数据的操作。上述流程见图4。
图4 “删除库存”的实现机制
4 系统部署与运行
系统采用了MySQL 5.0的数据库支持,采用mysq-eonneetor- ava-5.1.6-bin.jar作为驱动程序类库,采用commons-dbcp-1.2.1.jar作为数据连接池。由于系统安装于局域网内,访问量不会太大,采用了支持JSP的Tomcat作为web服务器即可满足要求,用户在PC机浏览器输入http://服务器IP地址/material就可以访问,系统升级维护只需要在服务器端进行。
5 结束语
物资管理是ERP系统,特别是大中型物资系统的重要一环。物资已成为企业很重要的一个管理对象,它在整个企业的生产、经营、管理中的流动,就形成物流,物流是否合理、是否畅通,对企业的生产经营活动有着直接的影响,物资管理水平的高低直接影响着企业的成本。因此,对物资管理系统进行需求分析具有十分重要的意义。
本系统采用了S2SH的框架,应用了基于JSP的多种网页展示技术,S2SH对于开发过程有明显优势,分层开发的思想把数据维护和逻辑处理分开,减少了数据与程序的耦合性,尤其是在后期功能维护的时候,显得开发脉络清晰,只需要修改很少的代码就能实现功能的改变,很大程度上加快了开发效率。
参考文献:
[1]李刚.Struts2权威指南[M].北京:电子工业出版社,2007.
[2]王玉凡,苑津莎,张铁锋.基于B/S结构和ASP.NET技术的电力物资管理系统研究[J].电力系统通信,2007,28(176):51-55.
[3]李红伟,企业资源管理系统物资管理项目组.陕西省电力公司企业资源管理系统物资管理模块的实施[J].陕西电力,2008,36(6):11-13.
[4]李绍平,彭志平.一种基于S2SH的Web应用框架及实现方法[J].微型电脑应用,2009,25(5):26-29.
[5]李绍平,彭志平.S2SH:一种Web应用框架及其实现[J].计算机技术与发展,2009,19(8) : 117-119.
论文作者:田世傲,周磊
论文发表刊物:《电力设备》2017年第16期
论文发表时间:2017/10/26
标签:物资论文; 数据论文; 框架论文; 管理系统论文; 系统论文; 组件论文; 持久论文; 《电力设备》2017年第16期论文;