苏小平
摘要:该文分析了JAVA开源架构Struts2、Spring和Hibernate各自的特点,提出了将这三种架构进行整合的SSH2组合框架,介绍了该组合框架的详细架构和框架优点,并详细描述了采用SSH2组合框架构建JAVA Web应用程序的过程。
关键词:Struts;Spring;Hibernate;框架;SSH
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)28-0103-04
随着信息技术和Internet的发展,基于JAVA的Web技术在各行各业得到广泛应用。在进行软件开发时,为了降低开发成本和开发周期,也为了使软件开发人员能够将更多的精力集中于业务需求的研发减少底层代码的开发工作,选用良好的开发框架显得尤为重要。基于Java的开源架构有很多,通常情况下,选用何种架构跟项目规模有直接关系。对于大型或者超大型的企业级项目,建议采用Java EE的EJB技术。对于需要快速开发的中小型项目,采用轻量级的框架技术更符合实际需要。现在有许多优秀的开源的Web开发框架,例如,用于进行数据持久化的Hibernate和JFinal、用于进行权限设计的Shiro以及具有丰富标签库的Struts2等,在进行Web应用程序开发时,我们可以选用其中某一个架构,也可以将这些架构整合起来使用。目前比较流行的是采用SSH2(Struts2+Spring+Hibernate)组合框架构建JAVA Web应用程序,表示层使用具有丰富taglib标签库的Struts2技术,持久层采用Hibernate框架对数据进行持久化操作,业务层采用Spring框架在层与层之间解耦。
1 关键技术介绍
1.1 Struts2
Struts最早于2000年5月作为Jakarta项目的组成部分,Struts1框架是在 JSP Model2基础上实现的MVC(Model-View-Controller)框架,它是世界上第一个发布的MVC框架。由于Struts1与JSP和Servlet的紧耦合性导致它存在很多缺陷,也制约了其发展,从而呼唤Struts2的出现。
Struts2与Struts1在本质上有很大的区别,它没有使用Struts1的设计核心,而是基于WebWork进行架构设计,它是第二代基于MVC模型的Web应用框架。Struts2不仅拥有功能强大的表达式语言和丰富的标签库,还可以通过拦截器对用户请求进行处理,从而对业务逻辑控制器和Servlet进行分离,降低程序的耦合性。
1.2 Spring
Spring是为了解决Web应用程序开发复杂性而创建的,极大地简化了企业级系统的开发过程。它的核心技术包括两个方面,一是反转控制(Inverser of Control,IoC),另一个是面向切面编程(Aspect-Oriented Programming,AOP)。Spring是一个轻量级分层架构框架,由7个模块组成,分别是:Spring Core(核心容器)、Spring Context(应用上下文模块)、Spring AOP模块、Spring DAO(JDBC抽象和DAO支持模块)、Spring ORM(对象/关系映射集成模块)、Spring Web模块、Spring Web MVC模块,这些模块可以单独使用,也可以与其他一个或多个模块组合使用。
Spring中包含了非常丰富的内容,包括表示层和数据层,它提供了许多原来只有EJB才能提供的功能(如声明式的事务管理等),但Spring又无需运行在EJB容器中。Spring本身就是一个容器,它可以对系统对象的生命周期进行配置和管理。在SSH2组合框架中主要将Spring应用于中间的业务层,使用接口松散耦合的JavaBeans实现的对象模型可以通过XML配置文件进行组合。
1.3 Hibernate
Hibernate是一个开源的对象关系映射(Object-Relation Mapping,ORM)框架,是JAVA类与数据库表进行映射的工具,映射后持久化类的每个实例对应数据库表中的一行数据。Hibernate对JDBC进行了轻量级封装,以前使用JDBC将数据持久化到数据库的过程是:先得到Connection,再得到Statement,然后调用Statement的execute方法执行sql语句。这样写出的程序类似面向过程,而非面向对象,并且程序中嵌套了很多sql脚本,使得程序员将大量精力放在如何编写SQL语句上。现在使用Hibernate框架通过面向对象的方式对数据进行持久化,可以让Hibernate帮我们生成相应的SQL语句,程序员只需要操作对象就可以对数据库表进行增删改查操作。
2 SSH2组合框架
在进行软件开发时使用成熟的框架就相当于让别人帮你完成了一些基础的工作,使用Struts2、Spring和Hibernate这3种优秀的轻量级框架组成的SSH2组合框架可以充分发挥各个框架在Web应用不同层面的作用。
2.1 SSH2组合框架详细架构
SSH2组合框架分为三层:分别是持久层、业务层和表现层。每层具有明确的责任,数据层使用Hibernate对数据库进行增删改查操作,业务层使用Spring框架实现松耦合,表现层使用Struts2负责页面的请求和转发等。SSH2组合框架示意图如图1所示。
持久层:通过Hibernate的ORM将关系型数据库的数据映射成对象,从而实现以面向对象方式操作数据库。具体过程是,首先分析模块所要涉及的表,确定表之间的关系后进行数据库设计,然后用Hibernate提供的工具将数据表转化为POJO对象,再用面向对象的方式进一步操作这些对象以达到对数据的持久化控制。
业务层:位于三层架构的中间层,主要由Spring负责业务层处理。利用Spring的IOC容器实现功能模块的松耦合相连,利用Spring的AOP将业务逻辑从系统服务(如监控和事务处理)中分离出来,从而实现内聚开发。
表现层:表现层采用Struts2框架对用户请求进行响应。Struts2提供了丰富的Taglib标记库,极大地提高了开发效率,并且具有页面导航优势,通过一个配置文件struts.xml就可以把握整个系统各部分之间的关系,便于后期的维护和管理。
2.2 SSH2框架的优点
基于SSH2的Web应用架构整合了Struts2、Spring和Hibernate这3个轻量级的开源框架,具有如下优点:
1)属于开源架构,开发者可以更深入了解其内部实现机制和原理。
2)符合典型的三层架构模式,表现层、业务层和数据层架构层次分明,降低了层与层之间的耦合性。
3)采用MVC模式对业务逻辑层、数据层和表现层进行分离,所有业务逻辑都在Service中处理,有利于系统的开发和维护。
4)SSH已经把底层实现封装好了,软件开发者不仅可以在此基础上实现快速,而且可以更专注于业务逻辑的实现。
5)配置灵活,支持国际化,并且具有很高的重用性。
6)扩展性强,通过配置文件的形式实现扩展。
3 采用SSH2组合框架构建Web应用程序
使用SSH2组合框架进行程序开发,需要开发人员在IDE(例如MyEclipse)环境中正确导入并配置好Struts、Spring和Hibernate。搭建SSH2架构的Web应用环境,通常有两种方式,一种方式是采用自底向上的方式搭建,即先导入Hibernate、再添加Spring支持,然后集成Struts2。另一种方式是采用自上而下的方式搭建,即先加载Struts2,然后添加Spring支持,再集成Hibernate。下面我们着重介绍采用自上而下的方式搭建SSH2开发架构的过程。
3.1 新建工程,并创建数据库连接
开始一个新的项目, 通常需要先新建工程,另外大多数Web项目都需要用到数据库,故而新建工程后要创建数据库连接。首先在MyEclipse开发环境中新建Web Project工程,然后添加数据连接。以创建oracle数据连接为例,过程如下:
1)点击
2)在左侧的DB Browser中,点击鼠标右键,选择“New”,弹出如图2所示菜单;
3)在图2中,填写数据库相关信息并添加驱动类库ojdbc14.jar;
4)点击图2中的“Test Driver”,提示数据库连接成功即可。
3.2 添加Struts2支持
1)添加Struts2的jar包
首先在新建的工程中添加Struts2的jar包struts2-core-2.1.6.jar
2)创建struts.xml文件
在工程的src目录下创建struts.xml文件,该文件是Struts2的核心配置文件,用于管理和配置Action拦截器和逻辑视图映射等,在程序运行时该文件会被Struts2框架自动加载。
3)添加核心过滤器
在工程的web.xml文件,添加Struts2的核心过滤器FilterDispatcher,代码如下:
3.3 添加Spring支持
1)通过IDE环境添加Spring的jar包
在MyEclipse视图下,点击IDE环境左侧的工程名,然后选择”MyEclipse””Add Spring Capabilities…”,为新建的工程添加Spring支持,如图3所示,主要添加Spring 2.5 AOP Librabries、Spring 2.5 Core Librabries、Spring 2.5 Persistence Core Librabries、Spring 2.5 Persistence JDBC Librabries、Spring 2.5 web Librabries这5个包。
点击图3中的“Next”按钮,打开图4所示窗口添加Spring bean的配置文件applicationContext.xml,该文件必须放置到WebRoot/WEB-INF目录下,以便于通过web.xml进行加载。
2)配置web.xml文件,添加Spring监听器
在web.xml文件,添加Spring监听器的代码如下:
3.4 添加Hibernate支持
1)通过IDE环境添加Hibernate的jar包
在MyEclipse视图下,点击IDE环境左侧的工程名,然后选择 “MyEclipse””Add Hibernate Capabilities…”,为新建的工程添加Hibernate支持,如图5所示。
2)配置Hibernate
点击图5中“Next”按钮,进入图6所示的“Hibernate Configuration”页面,对Hibernate进行初步配置。选中“Spring configuration file(applicationContext.xml)”单选框,意味着我们将会使用Spring中的applicationContext.xml文件对Hibernate Bean进行管理。
点击图6中的“Next”按钮,对Hibernate进行进一步配置,如图7所示,选中“Exiting Spring Contfiguration file”单选框,文本框中输入“SessionFactory”。
1)添加数据源
点击图7中的“Next”按钮,弹出图8所示的添加数据源窗口,指定一个新的Spring数据连接。具体配置如图8所示,DB Driver处选择我们前面配置好的数据源oracledriver即可。
点击图8中的“Next”按钮,在弹出的图9窗口中取消勾选”Create SessionFactory class”选项 ,点击”Finish”按钮即完成Hibernate添加。
这时,我们的工程完整的添加了Struts、Spring和Hibernate支持,开发环境搭建完毕,就可以进一步编写业务需求的实现代码了。
4 结束语
在进行JAVA Web工程开发时,Web应用框架的选择非常重要。本文在深入研究和细致分析开源框架Struts2、Spring和Hibernate的基础上,根据Web应用的分层原则,提出采用SSH2组合框架自上而下构建Web应用程序的方式。使用这种优秀的解耦架构不仅可以提高开发效率,缩短开发周期,节约开发成本,而且对后期不断的需求变更能够更好地适应,在多个项目实施过程中,该组合框架也表现出了良好的性能。
参考文献:
[1] Oh snap! [EB/OL].http://hibernate.org/hibesdocs/reference/zh-cnlhtml.
[2] 孙鑫. Struts2深入详解[M]. 北京: 电子工业出版社, 2009.
[3] 王福强. Spring揭秘[M]. 北京: 人民邮电出版社, 2009.
[4] 孙卫琴. 精通 Hibernate:Java 对象持久化技术详解[M]. 2版.北京: 电子工业出版社, 2010.
[5] 李刚. 轻量级JavaEE企业应用实战——struts2+Spring+Hibernate整合开发[M]. 北京: 电子工业出版社, 2008.