论文部分内容阅读
[摘 要]为了减少开发成本,缩短开发周期,提高程序的健壮性和可扩展性,依据MVC设计模式的基本思想,提出一种基于Struts2,Spring框架和JDBC的J2EE应用开发策略,以此构建一个开发高效、运行稳定的J2EE分层架构。通过设计开发一个某电信运营商的子业务运营系统给出了该架构的具体实现。实用结果表明,该分层架构降低了应用程序的耦合度和复杂性,提高了开发效率。
[关键词]MVC; Struts2 ; Spring ; JDBC
中图分类号:TP311 文献标识码:A 文章编号:1009-914X(2015)42-0262-02
引言
在J2EE的企业级应用开发中,JSP用HTML与Java代码混用的方式开发,把表现与业务逻辑代码混合在一起给前期开发与后期维护带来巨大的复杂度。为了把业务逻辑代码从表现层中清晰的分离出来,MVC设计模式和框架技术被广泛采用。
1 MVC简介
M=Model模型。职责是负责业务逻辑,包含两部分:业务数据和业务处理逻辑,比如实体类、DAO、Service都属于模型层。
V=View视图。职责是显示界面和用户交互(收集用户信息),属于视图的类是不包含业务逻辑和控制逻辑的JSP。
C=Controller控制器。控制器是模型层M和视图层V之间的桥梁,用于控制流程,比如Action。
2 Struts2和Spring框架
2.1 Struts2框架
2.1.1 简介
Struts1是一个非常著名的框架,它实现了MVC模式。之后出现了WebWork框架,其实现技术比Struts1先进,但影响力不如Struts1。在框架技术不断发展的过程中,有人在WebWork的核心XWork的基础上包装了Struts1,由此,结合了Struts1的影响力和WebWork的先进技术,Struts2诞生了。Struts2不是Struts1的升级,它更像是WebWork的升级版本。
2.1.2 Struts2的核心组件和工作流程
如图1所示,Struts2由6大核心组件组成,分别是FC(前端控制器),ValueStack(值栈),Action(动作),Result(结果),Interceptor(拦截器),Tags(标记库)。
Struts2的工作流程为:所有请求提交给FC;根据配置信息确定要调用的Action;创建一个ValueStack对象;创建Action对象,把Action对象放到VS的栈顶;控制器调用Action对象接收请求参数,并在方法中根据输入属性算输出属性;在调用Action之前或之后调用一系列Interceptor;根据Action返回的字符串确定Result;Result将转发到JSP,JSP页面用Tags取出数据并显示。
2.2 Spring框架
2.2.1 简介
Spring框架主要负责技术整合,该框架提供IoC和AOP机制。利用Spring容器管理程序中的Action、DAO等组件,通过容器的IoC机制,可以降低Action、DAO之间的耦合度;利用AOP进行事务管理等通用部分的处理。基于这些特性整合,可以降低系统组件之间的耦合度,便于系统组件的维护、扩展和替换。
2.2.2 IoC和AOP
IoC,Inverse of Controller被称为控制反转。所谓的控制指的是负责对象关系的指定、对象创建、初始化和销毁等逻辑。
如图2所示,Spring容器在Tomcat服务器启动时,由web.xml中定义的ContextLoaderListener监听器创建。IoC把Action中的控制逻辑提出来,交给Spring容器负责,当两个组件关系发生改变时,只需要修改容器的配置文件即可。IoC主要解决的是两个组件对象调用问题,可以以低耦合方式建立使用关系。
AOP,Aspect Oriented Programming,被称为面向方面编程。对单个对象(一对一)的解耦用IoC,而当有个共通组件,它对应多个其他组件(一对多),则解耦用AOP,如拦截器。这也是为何在程序中大量的用IoC,而AOP却用的很少,因为程序中不可能有很多的共通部分。如图2所示,在调用Action组件时采用AOP切入事务管理。
3 JDBC
3.3.1 简介
Java的设计者希望使用相同的方式访问不同的数据库。如图3所示,JDBC是Java用于统一连接数据库并操作数据库的一组通用接口定义。不同的数据库厂商若想让Java语言可以对其操作,就需要实现一组类,这组类需要实现Java提供的这组用于连接数据库的接口,并实现其中定义的相关方法。这组类就是该数据库的驱动包了。
3.3.2 Spring框架使用JDBC技术
jdbcTemplate是Spring提供的专门简化JDBC操作的工具类,它封装很多针对JDBC操作的方法,减少了直接使用JDBC的代码量。开发时,写好SQL语句,通过jdbcTemplate对象直接调用即可。
4 基于Struts2+Spring+JDBC的某电信运营商的子业务运营系统的设计与实现
4.1 软件层次架构设计
如图4所示,系统软件层次架构从职责上分为:持久层、业务逻辑层和表示层。
系统的整体基础架构采用Struts2框架实现MVC。作为三层中间层的Spring框架,向前与Struts2整合,管理Action和DAO,向后与JDBC整合,封装JDBC API。Spring管理系统中所有的组件:事务管理采用AOP,各组件之间的依赖关系通过IOC来管理,这些都配置在Spring的核心配置文件applicationContext.xml文件中。 JDBC对持久层提供支持,具体做法是根据数据表编写实体类,设计DAO接口,然后用JDBC实现DAO接口。
采用三层软件架构,不但实现了持久层与业务逻辑层的分离,而且还实现了视图、模型、与控制器的分离,提高了系统的可复用性和可扩展性,同时降低了层与层之间的耦合度,不光能提高开发效率,而且有利于团队成员并行工作。
4.2 E-R模型图
如图5所示,多对多的关系是:admin_info(管理员)与role_info(角色);role_info(角色)与privilege(权限)。一对多的关系是: account(账务账号,1)与service(业务账号,n);cost(资费,1)与service(业务账号,n);service(业务账号,1)与service_update_bak(业务账号更新的备份,n);recommender_id (账务账号的推荐人,1)与account(账务账号,n)。根据E-R图,共创建6张基本表,2张中间表,PRIVILEGE权限为XML文件。
4.3 系统功能模块设计
如图6所示,系统按照功能分为如下几个模块:基础信息模块、角色管理模块、管理员管理模块、资费管理模块、账务账号管理模块和业务账号管理模块。
4.4 系统实现的部分代码
1.账务账号模块Action
包含:DeleAccountAction(删除)、FindAccountAction(查找)、PauseAccountAction(暂停)、StartAccountAction(开启)、ToUpdateAccountAction、UpdateAccountAction(更新)。
2.账务账号模块DAO
IAccountDao接口包含如下方法
List findByCondition(String idcardNo,String realName,
String loginName,String status,int page,int pageSize)throws DaoException;
int findTotalPage(String idcardNo,String realName,
String loginName,String status,int pageSize)throws DaoException;
void updateStatus(Account account)throws DaoException;
void add(Account account)throws DaoException;
Account findByIdcardNo(String idcardNo)throws DaoException;
Account findById(int id)throws DaoException;
void modify(Account account)throws DaoException;
Account findByService(int serviceId)throws DaoException;
接口实现类为:AccountDAOImpl,其具体实现接口中定义的方法。
3、三个核心配置文件
① web.xml文件。配置Spring监听;配置Struts2的过滤器。
② applicationContext.xml文件。配置事务切入点、事务管理器、DBCP连接池、注册各模块Action和DAO。
③ struts.xml文件。配置项目中各模块的Action及result返回结果页面。
5 结语
实践证明,使用MVC设计模式开发的系统结构更加清晰,且易于管理。引入框架,使得系统的健壮性,易用性,扩展性和侵入性都得到了极大的改善。Struts2框架提供了稳定的MVC框架,Spring的IoC和AOP成为整合该方案各层的最佳框架。另外,考虑到效率问题,本项目并没有采用当前流行的ORM框架,如Hibernate。
参考文献
[1] 李洋.基于Ajax, Struts, Hibernate和Spring的J2EE架构[J].吉林大学学报,2011,29(6).
[2] 张晓丽. 基于MVC模式的Web OA系统的设计与实现[J]. 计算机技术与发展, 2012,22(8).
基金项目
邢台市科技支撑计划项目:邢台联通公司系统集成中心开放实验室出租业务运营系统的设计与实现. 项目编号:2014ZC105
作者简介
冷飞(1979—),男,河北邢台市人,硕士,研究方向为计算机软件
[关键词]MVC; Struts2 ; Spring ; JDBC
中图分类号:TP311 文献标识码:A 文章编号:1009-914X(2015)42-0262-02
引言
在J2EE的企业级应用开发中,JSP用HTML与Java代码混用的方式开发,把表现与业务逻辑代码混合在一起给前期开发与后期维护带来巨大的复杂度。为了把业务逻辑代码从表现层中清晰的分离出来,MVC设计模式和框架技术被广泛采用。
1 MVC简介
M=Model模型。职责是负责业务逻辑,包含两部分:业务数据和业务处理逻辑,比如实体类、DAO、Service都属于模型层。
V=View视图。职责是显示界面和用户交互(收集用户信息),属于视图的类是不包含业务逻辑和控制逻辑的JSP。
C=Controller控制器。控制器是模型层M和视图层V之间的桥梁,用于控制流程,比如Action。
2 Struts2和Spring框架
2.1 Struts2框架
2.1.1 简介
Struts1是一个非常著名的框架,它实现了MVC模式。之后出现了WebWork框架,其实现技术比Struts1先进,但影响力不如Struts1。在框架技术不断发展的过程中,有人在WebWork的核心XWork的基础上包装了Struts1,由此,结合了Struts1的影响力和WebWork的先进技术,Struts2诞生了。Struts2不是Struts1的升级,它更像是WebWork的升级版本。
2.1.2 Struts2的核心组件和工作流程
如图1所示,Struts2由6大核心组件组成,分别是FC(前端控制器),ValueStack(值栈),Action(动作),Result(结果),Interceptor(拦截器),Tags(标记库)。
Struts2的工作流程为:所有请求提交给FC;根据配置信息确定要调用的Action;创建一个ValueStack对象;创建Action对象,把Action对象放到VS的栈顶;控制器调用Action对象接收请求参数,并在方法中根据输入属性算输出属性;在调用Action之前或之后调用一系列Interceptor;根据Action返回的字符串确定Result;Result将转发到JSP,JSP页面用Tags取出数据并显示。
2.2 Spring框架
2.2.1 简介
Spring框架主要负责技术整合,该框架提供IoC和AOP机制。利用Spring容器管理程序中的Action、DAO等组件,通过容器的IoC机制,可以降低Action、DAO之间的耦合度;利用AOP进行事务管理等通用部分的处理。基于这些特性整合,可以降低系统组件之间的耦合度,便于系统组件的维护、扩展和替换。
2.2.2 IoC和AOP
IoC,Inverse of Controller被称为控制反转。所谓的控制指的是负责对象关系的指定、对象创建、初始化和销毁等逻辑。
如图2所示,Spring容器在Tomcat服务器启动时,由web.xml中定义的ContextLoaderListener监听器创建。IoC把Action中的控制逻辑提出来,交给Spring容器负责,当两个组件关系发生改变时,只需要修改容器的配置文件即可。IoC主要解决的是两个组件对象调用问题,可以以低耦合方式建立使用关系。
AOP,Aspect Oriented Programming,被称为面向方面编程。对单个对象(一对一)的解耦用IoC,而当有个共通组件,它对应多个其他组件(一对多),则解耦用AOP,如拦截器。这也是为何在程序中大量的用IoC,而AOP却用的很少,因为程序中不可能有很多的共通部分。如图2所示,在调用Action组件时采用AOP切入事务管理。
3 JDBC
3.3.1 简介
Java的设计者希望使用相同的方式访问不同的数据库。如图3所示,JDBC是Java用于统一连接数据库并操作数据库的一组通用接口定义。不同的数据库厂商若想让Java语言可以对其操作,就需要实现一组类,这组类需要实现Java提供的这组用于连接数据库的接口,并实现其中定义的相关方法。这组类就是该数据库的驱动包了。
3.3.2 Spring框架使用JDBC技术
jdbcTemplate是Spring提供的专门简化JDBC操作的工具类,它封装很多针对JDBC操作的方法,减少了直接使用JDBC的代码量。开发时,写好SQL语句,通过jdbcTemplate对象直接调用即可。
4 基于Struts2+Spring+JDBC的某电信运营商的子业务运营系统的设计与实现
4.1 软件层次架构设计
如图4所示,系统软件层次架构从职责上分为:持久层、业务逻辑层和表示层。
系统的整体基础架构采用Struts2框架实现MVC。作为三层中间层的Spring框架,向前与Struts2整合,管理Action和DAO,向后与JDBC整合,封装JDBC API。Spring管理系统中所有的组件:事务管理采用AOP,各组件之间的依赖关系通过IOC来管理,这些都配置在Spring的核心配置文件applicationContext.xml文件中。 JDBC对持久层提供支持,具体做法是根据数据表编写实体类,设计DAO接口,然后用JDBC实现DAO接口。
采用三层软件架构,不但实现了持久层与业务逻辑层的分离,而且还实现了视图、模型、与控制器的分离,提高了系统的可复用性和可扩展性,同时降低了层与层之间的耦合度,不光能提高开发效率,而且有利于团队成员并行工作。
4.2 E-R模型图
如图5所示,多对多的关系是:admin_info(管理员)与role_info(角色);role_info(角色)与privilege(权限)。一对多的关系是: account(账务账号,1)与service(业务账号,n);cost(资费,1)与service(业务账号,n);service(业务账号,1)与service_update_bak(业务账号更新的备份,n);recommender_id (账务账号的推荐人,1)与account(账务账号,n)。根据E-R图,共创建6张基本表,2张中间表,PRIVILEGE权限为XML文件。
4.3 系统功能模块设计
如图6所示,系统按照功能分为如下几个模块:基础信息模块、角色管理模块、管理员管理模块、资费管理模块、账务账号管理模块和业务账号管理模块。
4.4 系统实现的部分代码
1.账务账号模块Action
包含:DeleAccountAction(删除)、FindAccountAction(查找)、PauseAccountAction(暂停)、StartAccountAction(开启)、ToUpdateAccountAction、UpdateAccountAction(更新)。
2.账务账号模块DAO
IAccountDao接口包含如下方法
List
String loginName,String status,int page,int pageSize)throws DaoException;
int findTotalPage(String idcardNo,String realName,
String loginName,String status,int pageSize)throws DaoException;
void updateStatus(Account account)throws DaoException;
void add(Account account)throws DaoException;
Account findByIdcardNo(String idcardNo)throws DaoException;
Account findById(int id)throws DaoException;
void modify(Account account)throws DaoException;
Account findByService(int serviceId)throws DaoException;
接口实现类为:AccountDAOImpl,其具体实现接口中定义的方法。
3、三个核心配置文件
① web.xml文件。配置Spring监听;配置Struts2的过滤器。
② applicationContext.xml文件。配置事务切入点、事务管理器、DBCP连接池、注册各模块Action和DAO。
③ struts.xml文件。配置项目中各模块的Action及result返回结果页面。
5 结语
实践证明,使用MVC设计模式开发的系统结构更加清晰,且易于管理。引入框架,使得系统的健壮性,易用性,扩展性和侵入性都得到了极大的改善。Struts2框架提供了稳定的MVC框架,Spring的IoC和AOP成为整合该方案各层的最佳框架。另外,考虑到效率问题,本项目并没有采用当前流行的ORM框架,如Hibernate。
参考文献
[1] 李洋.基于Ajax, Struts, Hibernate和Spring的J2EE架构[J].吉林大学学报,2011,29(6).
[2] 张晓丽. 基于MVC模式的Web OA系统的设计与实现[J]. 计算机技术与发展, 2012,22(8).
基金项目
邢台市科技支撑计划项目:邢台联通公司系统集成中心开放实验室出租业务运营系统的设计与实现. 项目编号:2014ZC105
作者简介
冷飞(1979—),男,河北邢台市人,硕士,研究方向为计算机软件