spring框架范文
时间:2023-03-18 03:28:10
导语:如何才能写好一篇spring框架,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。
篇1
Abstract: This thesis introduced spring framework. Present tier uses Struts technique which is integrated into Spring through the configuration. Define the transaction management based on AOP technique in business tier in order to enhance the stability and flexibility of system. Define the base DAO class and configure in Spring framework in data tier to provide the standard exception types.
关键词: 软件架构;可维护性;事务管理
Key words: software architecture;maintainability;transaction management
中图分类号:TP392文献标识码:A文章编号:1006-4311(2010)16-0158-02
0引言
为了高效的完成业务功能需要系统具有良好的稳定性、可维护性和易于扩展的特点。以Spring为核心,以Struts为前端web表示层开发,以Hibernate为O/R映射的工具,建立了松散耦合软件架构,使系统的灵活性大大的提高。
1系统的架构设计
1.1 系统的架构分层MVC是一种经典的软件架构,其生成结构严谨的子系统化应用程序的有效性已得到证实[1]。本系统架构按照MVC的设计模式分为三层分别是表示层(Presentation)、商务层(Business)、数据层(Data)[2]。
表示层使用Struts应用框架作为实现框架,并将Spring的Web Application配置到Struts中。Struts最早是作为Apache Jakarta项目的组成部分问世运作。项目的创立者希望通过对该项目的研究,改进和提高Java Serve Pages (JSP) ,Servlet,标签库以及面相对象的技术水准[3]。
商务层和数据层使用Spring框架和Hibernate。处理了BO和DAO的依赖,处理了接口和实现类的依赖,事务处理,在DAO层对Hibernate API的包装,在DAO层的异常包装转换。Hibernate完成ORM功能。
基于Spring的表示层、商务层、数据层分层设计即使实现三层的松散耦合,又提供了集中配置的功能,使系统的各层功能明确,使系统的可维护性大大提高。
1.2 层间的调用的规约禁止表示层,商务逻辑层,数据访问层的跨层调用。数据信息的跨层传递可以使用DTO,如果PO信息量满足要求也可以把PO直接当作DTO使用,DTO类型不限可以使Java Bean,Map。DAO,BO必须声明接口,并且在编码中只允许使用接口类型,不允许出现实现类,增强系统可维护性,减少耦合性。
2数据访问层
2.1 设计的目的和方法主要目的是能够清晰地划分出应用层次而不管使用何种数据访问和事务管理技术;使应用对象之间的耦合松散。业务对象不再依赖于数据访问和事务策略;不再有硬编码的lookup;不再有难于替换的singletons;不再有自定义的服务注册。从而增强了系统可维护性。设计的方法是采用Spring和Hibernate相结合的方法。
基于O/R(Oriented/Relation)映射数据存取技术的Hibernate,在大型项目中被广泛地使用,它将应用系统逻辑和数据存储逻辑分开,而且它将所有数据存储逻辑都封装在持久层的类中,对应用系统开发者隐藏了数据存储的实现细节。应用系统开发者只要通过持久层提供的接口,以自己熟知的处理方法,向对象发送数据存储或数据装载信息,就可以完成对象持久化的工作。暂态对象和持久对象之间的区别也被隐藏起来,应用系统开发者使用同样的处理方式来对待暂态对象和持久对象。所以选择Hibernate作为底层数据持久化工具。
在Spring框架中可以集成了Hibernate,同时提供了的Hibernate的DAO的抽象类,将异常封装成一致的异常层次。Spring引进了DAO异常体系,主要目的是为了够清晰地划分出应用层次而不管使用何种数据访问和事务技术。
2.2 配置与定义在系统的数据访问层的设计中,为了提供统一的异常处理方式和统一的事务处理方式。在配置文件中定义Hibernate的Session Factory这样可以为所有的Spring中定义的Bean调用。根据IoC的原则,采用声明式的方式配置定义的Base DAO。Base DAO是Spring不可装载的基类,其主要的功能是负责其他的DAO提供Session Factory。这样可以为Hibernate Sessio Factroy提供统一的维护,增强系统的可维护性。用户自定义的DAO类要继承于Hibernate Dao Support类或其子类。并要定义用户自定义DAO的接口,在接口的定义中展现用户自定义类的方法,这样才能由Spring利用java反射机制生成其相应的DAO类的实体。这样所有的DAO子类就可以选择直接通过Hibernate Template来初始化,并将特定的异常转换为unchecked异常体系。
3业务层
业务层是整个系统的核心,其中包含着核心的商业逻辑,需要完善的日志操作日志,全面的事务管理。在本节将介绍在spring框架下配置BO和进行事务管理的配置。
3.1 Spring事务管理的概念Spring提供了一致的事物管理抽象。这个抽象是Spring最重要的抽象之一,它有如下的优点:
①为不同的事务API提供一致的编程模型,如JDBC、Hibernate、iBatis数据库层和JDO。提供比大多数事务API更简单的,易于使用的编程式事物管理API。②整合Spring数据访问抽象。③支持Spring声明式事物管理。
事物管理抽象为Plateform Transaction Manager,它的实现和定义同其他Spring容器中的对象一样都是由容器管理的。这个好处是即使使用JTA,也是有很有价值的抽象:事务代码可以比直接使用JTA更加容易测试。在Spring中,Transaction Exception是unchecked的。底层的事务失败几乎是致命的,很少有情况可以从他们中恢复,开发者依然可以扑获并处理Transaction Exception。Transaction Definition接口用来定义事务的,可以设定如下内容:
事务隔离程度:当前的事务和其他事物的隔离的程度。
事务传播程度:通常在一个事务中执行的所有代码都会在这个事务中运行。但是,如果一个事务上下文已经存在,有几个选项可以指定一个事务性方法执行行为。例如,简单的在现有的事务中运行,或者挂起现有的事务,创建一个新事务。
事务超时程度:事务在超时前能够运行多久。
只读状态:只读事务不需要修改任何数据。在只读的某些情况下是一种非常有用的优化。
Transaction Status接口为处理事物的代码提供一个简单的控制事务执行和查询状态的方法。通过get Transaction Status方法可以获得Transaction Status对象,他可能代表一个新的或已经存在的事务。如同J2EE事务上下文一样,Transaction Status也是和执行的线程相关联的,用来反映事务的状态。
3.2 基于AOP的事务管理的实现根据分析,决定使用Spring框架结合Hibernate实现事务管理的业务。Spirng和Hibernate本身不具备事务的管理的功能。Spring对Hibernate进行了封装,Hibernate 是JDBC 的轻量级封装。在事务管理过程中,Spring将事务委托给Hibernate,后者又将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。Hibernate的默认事务处理机制基于JDBC Transaction。JDBC的事务处理功能简单、易用。JTA的功能强大其管理的事务可以跨越connection,但其资源消耗较大。所以决定采用Hibernate的事物管理的默认实现。
通过以上的配置将Spring框架的事务管理功能映射到Hibernate的默认事务管理功能。并且自定义了异常类型Tmj Business Exception,当该异常被抛时,事务将进行回滚操作。
3.3 BO的基类的定义BO负责业务逻辑的对象,不及数据持久化的调用允许在BO抛出异常。BO内有一个或多个DAO Interface的成员变量,DAO初始化是通过Spring框架在xml文件配置的。A_BO调用B_BO必须把B_BO作为A_BO的属性,同时配置到Spring的配置文件中事务处理是控制在BO层,事务模型属于声明型事务。
采用AOP的编程的方法的,当在BO中的方法中抛出Business Exception时,事务自动回滚。在Trace Interceptor类中引用Tmj Logger类将用户的操作的行为记录如日记文件。在BO中利用面向方面的编程方法使事务管理和日志的记录一致的,增强了系统的稳定性,提高了系统的维护性。
4表示层的设计
表示层是同用户交互的界面,负责将数据表示。表示使用广泛使用的Struts应用框架架构。
Struts应用框架通过“Plug-in”元素同Spring框架结合起来。
Base Action的定义:Base Action对Action进行封装,减少了系统的冗余性。 Base Action主要提供如下的功能:get Bean()的将在Application Context中声明的bean引入到Web Application中,便于在表现层引用。
check Login()判断用户是否已经登录。
log AccessInfo()将用户的信息、访问时间和访问的页面ID等信息写入日志文件中。
5总结
在实现过程中,根据Spring提供的AOP的功能,配置完善的事务管理程序为系统提供了统一的透明的事务管理方法;使异常更容易的被分类处理,并记入日志,便于系统管理员分析错误;使系统的稳定性大大提高。
参考文献:
[1]Richard Jensen. Mapping Classes to Relational Tables. Java Pro, 2004, (4):11-12.
篇2
关键词:持久化,对象/关系映射,J2EE
随着计算机网络的普及以及计算机技术的普遍应用,近年来出现了越来越多的Web 应用,应用范围包括信息管理、在线交易、工作流及协作环境、网络社区等。这些应用系统的共同特点是Web 页面多、导航困难、业务逻辑复杂。而在现在B/S 结构的大型Web 开发中, 可重用的、易维护和扩展的, 并且性能良好的组件, 是至关重要的。Hibernate+Struts+Spring (HSS) 框架。这种框架使用Struts 实现表示层,Spring实现业务层,Hibernate 实现持久层,然后把三者无缝地整合起来,应用到项目开发中。劳资管理是一项政策性很强,工作量很繁复的工作,其主要包括2 年1 次的正常晋级、职务变动等劳动工资的调整及各类人员绩效工资情况的统计。由于它牵扯到每一个员工的切身利益,所以其准确性要求极高, 特别是要查找某人历年的工资变动情况时,非常繁琐,费时费力。本文将Web 环境下的Hibernate+Struts+Spring 框架应用于劳资管理工作中。
1 MVC 模式
MVC(Model- View-Control, 模型- 视图- 控制器)模式是XeroxPARC 在20 世纪80 年代为编程语言Smalltalk―80 设计的一种软件设计模式, 至今已被广泛使用, 并被推荐为Sun 公司J2EE 平台的设计模式, 其为开发交互式应用系统提供了一个优秀的设计模式, 受到越来越多开发者的欢迎。MVC 要由3 部分组成:模型、视图和控制器,
模型(Model)包括业务逻辑和业务规则等, 在MVC 的三个部件中拥有最多的处理任务。它可以用JavaBean 和EJB 等组件技术来处理数据库的访问。模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用, 所以减少了代码的重复性。
视图(View)是屏幕上的显示。模型进行操作之后, 其结果就是通过视图来显示的。在视图中其实没有真正的处理发生, 只是作为一种输出数据并允许用户操作的方式。控制器用于管理用户与视图发生的交互。一旦用户想对模型进行处理时, 它不能直接去执行模型, 而是通过控制器来间接地实现。
控制器(Control)能从视图中取值, 然后将相应的值传给模型进行处理。控制器接受用户的输入并调用模型和视图去完成用户的需求。论文大全。
MVC 模式的处理过程是:首先由控制器接收用户的请求, 并决定应该调用哪个模型来进行处理, 然后模型用业务逻辑来处理用户的请求并返回数据, 最后控制器用相应的视图返回数据, 并通过表达层呈现给用户。MVC 本身就是一个非常复杂的系统, 所以采用MVC 实现Web 应用时,最好选一个现成的MVC 框架, 在此之下进行开发, 从而取得事半功倍的效果。现在有很多可供使用的MVC 框架, 由Struts有完整的文档并且相对来讲比较简单, 所以用它开发MVC 系统还是比较方便地。
2 Struts+ Hibernate+ Spring
Struts 提供了Controller组件并且整合了其它技术来实现Model 和View。对于Model,Struts 可以使用标准数据访问技术,如JDBC 和EJB,也可以使用第三方工具,如Hibernate。至于View,Struts 支持JSP 技术、JSTL 和JSF,也可以使用Velocity模板,XSLT 及其它表示系统。此外Struts 提供了自定义的标记库,可以辅助JSP 进行表示层的设计,通过这些自定义标记可以和系统的Model 部分进行交互。Struts 的核心组件有:
ActionServlet、Action、ActionForm、ActionMapping、ActionForword、TagLib 以及配置文件等。我们用JSP 技术结合Struts 强大的TagLib 来实现我们的表示层[3]。
在企业级的应用中,由于需要频繁的与数据库交互,开发者往往在应用和数据库之间建立一个“持久层”,它负责应用到数据库的数据存储,也负责数据的检索和更新。在J2EE 的应用中,这个持久层通常使用DBC,实体Beans,JDO 等等技术来建立。但由于JDBC 中数据访问对象(DAO) 和SQL 语句直接绑定在一起,且不支持继承和多态,而且还需要额外的EJB 容器,这就降低了系统的可维护性。Hibernate 是一个实现对象和关系之间映射(objectrelation mapping,ORM)的开源框架。它对JDBC 进行了轻量级的对象封装,使得JAVA程序员可以使用面向对象的编程思维来操作关系数据库。如果在软件开发中采用面向对象的方式进行设计,而使用的是关系数据库,就可以选用Hibernate 这种框架来实现对象和关系之间的映射和数据的持久化。Hibernate拥有一种功能非常强大的查询语言HQL,这种语言与SQL 相似,而且完全是面向对象的。它查询的是持久化对象,而不是数据库的记录,而且它可以支持多态、继承、关联等关系[3]。
Spring 是一个以依赖注入(inversionof control,IoC)原则和面向方面编程思想(aspect-oriented programming,AOP)为基础的轻量级框架。Spring 既是一个AOP 框架,也是一个IoC 容器。运用AOP 可以创建“横切关注点”(CrosscuttingConcerns),在应用时将它们插入代码中,使得代码有良好的可重用性。IoC 容器允许在需要生成对象的地方创建一个应用上下文,然后将这些对象传递给它们的合作对象。它可以很容易地替换业务对象,只要用Java Bean 属性和配置文件加入依赖性,然后就可以很容易地在需要时替换具有类似接口的协作对象[3]。
Spring 还提供了可以和总体的IoC 容器集成的强大而灵活的MVCWeb 框。Spring 是一个轻型容器,其核心是Bean 工厂,用以构造我们所需要的Model。在此基础之上,Spring 提供了AOP的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean 工厂的扩展ApplicationContext 更加方便我们实现J2EE的应用;DAO/ORM 的实现也更方便我们进行数据库的开发;Web MVC 和Spring Web 提供了JavJava Web 应用的框架或能够与其它流行的Web 框架进行集成[5]。
Spring 使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从Spring 中受益。
3 系统设计
经过对劳资管理系统进行详细的系统分析,系统需要实现全动态、分布式的信息传输与处理机制,实现系统出勤信息按部门和权限进行动态和更新。Web 浏览器是集成所有信息服务的最终平台,因此该系统是基于三层的浏览器/服务器(B/S) 体系结构。
其中表现层用JSP 技术结合Struts 强大的TagLib 来实现,业务层由Spring 实现业务组件的组装关联,通过依赖注入、A O P应用、面向接口编程,来降低业务系统开发环境:Netbeans;后台数据库:SQL Server2000;Web服务器:Tomcat5.0。系统总体设计如下:
图1 系统总体设计图
考勤模块:此模块可以由各部门通过网络访问,将本部门的各员工的本月出勤情况,加班情况上报人事部门。经人事审核后存入系统数据库。
工资计算:此模块由人事部门使用,包括岗位工资,技能工资,月奖,年终奖的计算方法设置,系统根据人事部门设定的计算日期自动计算当月各员工工资。
政策管理:此模块负责有关各项人事法规、工资法规的设置,根据这些法规设置工资调整,工资的计算法则。
工资查询:由各员工通过网络访问进行月度工资的计算;财务部门也可以通过此模块进行工资核实。此系统在当月工资计算完毕惊人是审核后会自动传递到财务部门的财务系统,接受财务审核。
用户管理:此模块负责该系统用户的使用权限的分配和管理。
4 结束语
本文针对劳资管理的特点,利用企业流行的Struts+Hibernate+Spring 应用技术,设计出基于J2EE 平台的电子政务系统。论文大全。论文大全。在系统建模中,通过采用Struts 的设计充分地体现了MVC 的架构,其维护起来会非常方便。Hibernate的引入避免了手工编写访问数据持久层的方法,Spring利用延时注入思想组装代码,大大增强了项目的可扩展性,降低了维护成本,提高了软件开发效率。实际的应用表明:该系统具有良好的交互性、可扩展性和可维护性,表现出良好的性能。
参考文献
[1] 李 健. 劳动工资与社会保障MIS 系统的设计与实现[J ] . 计算机系统应用,2000 (1) :26~29.
[2] 吴翔胜.人事劳资管理软件的开发和应用[J ] . 郑州纺织工学院学报,1999 (2) .
[3] 孙卫琴.精通Struts:基于MVC 的Java Web开发[M].北京:电子工业出版社,2004:95-127.
[4].The apache softwarefoundation[EB/OL].struts.apache.org/.
[5] Hibernate .Relational ersistence for Javaand .NET[EB/OL].hibernate.org.
篇3
关键词: 科研管理;三层架构;Struts;Spring;Hibernate
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2009)27-7684-02
Scientific Management System Based on Struts+Spring+Hibernate Frameworks
NI Jian-xin
(Journal of Wuxi Teachers' College, Wuxi 214001, China)
Abstract: In this paper, discusses the Scientific Management System's architecture, function modules, key technologies, this system uses the three-tier architecture, the realization of Web performance using Struts, Hibernate for data access and persistence layer, Spring for business layer, practice shows that this system greatly improved the efficiency of Scientific Management in our college.
Key words: scientific management; three-tier architecture; struts; spring; hibernate
随着校园网应用以及教师专业化进程的不断深入,各高校和科研单位都对科研工作的数量和水平提出了新的要求,科研管理部门的工作量日趋加重,原先利用档案或简单的统计软件对科研项目,科研成果进行管理,统计,分析已经变得越来越困难,而且其信息的滞后性也不能反映出学校目前的科研现状,为了提高我校科研管理工作的效率,减少科研管理的工作量,使科研管理更加规范化,现代化,设计一个符合我校科研管理模式的科研管理系统就显得十分重要,本文从系统结构,相关模块及主要实现技术三个方面详细描述了其实现过程。
1 系统结构
本系统采用三层架构的模式分为表现层、业务层和持久化层,利用Struts实现Web表现层,Hibernate实现数据访问和持久化层,Spring实现业务层和整合工作,用MYSQL作为数据库服务器,JSP服务器采用Tomcat, 在设计模式中,分层是一个非常重要的设计模式,可以剪断层与层之间的耦合关系,在每层中只解决相关问题,利于发挥不同框架的功能,其总体结构图如图1所示。
2 相关模块及用例图
本系统主要包括登录模块和科研信息的管理两个功能模块,其中科研信息的管理又可以细分为新增,修改,查询,删除,分页,统计等,其实现的用例图如图2所示。
3 系统主要实现技术及相关代码
3.1 Web表现层的实现
本系统利用Struts强大的标签库和自动校验功能,来实现数据的前端显示,并把Action类的实例化交给Spring的IoC容器来完成,并采用一个模块一个配置文件的手段,由login.xml、manage.xml和struts.xml负责登录模块、科研管理模块以及全局配置。在登录模块中自定义了一个Action类LoginAction.java进行登录校验,以Model-Driven方式来实现,使用一个User值来传递数据,登录成功进入系统,失败则显示错误信息,其配置文件代码如下:
/index.jsp
error.jsp
在科研管理模块中,为了代码简单清晰,仅仅使用一个Action类ManageAction来实现新增,修改,查询,删除,分页,以Property-Driven属性驱动模式来实现,所有表单域都作为ManageAction的属性,没有值对象参与,通过Spring的Ioc容器将相关属性注入,在一个类中实现了query(),save(),delete()等相关方法,为了让用户在使用时感觉更加人性化,在save()方法的配置文件中还定义了两个过滤器来实现输入数据的自动校验功能,对于前端JSP页面的显示,主要通过使用Struts中的表单标签来实现。
在struts.xml中通过来包含导入的manage.xml和login.xml,从而实现全局配置。
3.2 数据层的实现
本系统后台数据库采用Mysql来实现,在Mysql中创建科研管理系统相关的数据表management,其表结构主要字段如表1。
表创建完毕后,需要通过配置数据源将Hibernate和Spring整合在一起,这里直接使用MyEclipse中的DatasourceSessionFactory向导来完成这个工作,并生成Mapping文件和持久化类。
整个系统数据库连接部分,也就是DAO类的实现非常简单,都是借助于父类HibernateDaoSupport来实现,对于登录模块直接通过用户名和密码来查找验证,对于科研管理模块中的新增,修改,查询,删除直接使用getHibenateTemplate()方法来实现,对于数据分页则使用Query类的setFirstResult()和setMaxResults()方法来实现。
其主要代码如下:
Public List doInHibernate(Session session) throws HibernateException, SQLException{Query query=session.createQuery(sql1);
query.setFirstResult(startRow1);
query.setMaxResults(pageSize1);
return query.list();}
3.3 业务层的实现
本系统利用Spring的IoC容器整合了Web表现层,业务层和数据层,主要通过如下方法来实现,将Struts中的Action类实例化,将DAO组件实例化,并将DAO组件实例注入业务逻辑组件,从而实现了业务逻辑组件和DAO组件的高度解耦,加载Hibernate模块,提供数据源,为业务逻辑方法增加事务控制,借助于Spring的声明式事务管理,并不需要添加任何代码,所有的事务管理都放在Spring的application―Context.xml配置文件中,其中科研管理模块Bean配置如图3所示。
其相应的Bean配置文件代码如下:
从这里我们可以看出三层结构的分布情况,层与层之间都是面向接口方式实现,以此实现高度解藕。
4 结束语
本文讨论了使用轻量级J2EE框架Struts+Spring+Hibernate的整合来开发J2EE应用项目科研管理系统,该架构开发简洁、结构清晰,并使系统具有良好的复用性、扩展性和可维护性,通过添加更复杂的业务逻辑,可以满足更多的实际需求,经实践表明,极大的提高了我校科研管理的效率。
参考文献:
[1] 刘聪.零基础学Java Web开发[M].北京:机械工业出版社,2007.
篇4
本文针对Java EE多层体系结构、关键设计模式进行研究,采用构建轻量级J2EE框架所使用的Struts2、 Ibatis、Spring技术,该框架实现了表现逻辑和业务逻辑的分离,使系统具有较好的扩展性和可维护性。
【关键词】Struts2 iBATIS Spring
1 引言
产品销售是企业的生命线,对产品销售数据进行管理分析,并以可视化的图表方式展示产品销售的各种数据,为企业决策提供准确的参考依据。本文介绍了系统的需求、功能模块划分、技术架构等方案。
2 系统架构设计
本系统采用Java EE的多层结构,这些层次是:控制层、、持久层、领域模型层。 每层在应用程序中有各自的功能,不能与其他层功能耦合。
视图层负责系统数据的显示,它从业务层取得数据并显示数据。当业务层变化时,将自动更新,并传送给控制层。本系统采用Struts2实现MVC框架,视图层由JSP结合Struts2 TagLib来实现。视图层属于MVC开发设计模式中“V”,Struts2框架是实现MVC模式的一个应用框架,它以WebWork的设计为核心,同时兼容Struts1.x。
控制层是MVC框架中的”C”,FilterDispatcher是Struts2框架的核心控制器,主要负责拦截用户请求。响应请求Struts2框架会依据struts.xml配置文件选择相应的Action进行业务处理。
业务层主要负责实现系统的业务逻辑。EJB框架和Spring框架都可实现业务层,Spring框架与应用服务器整合的能力相对EJB3.0要弱,但是Spring框架模块的可分离配置优于EJB3.0的灵活性。
持久层主要负责与数据库的交互,为业务层提供数据库访问功能。使用iBATIS提供的O/R Mapp映射机制,iBATIS通过在SQL开发的工作量和数据库移植性上提供了很大的自由空间,本系统选择采用iBATIS实现持久层。
领域模型层是ORM思想的产物,ORM用对象关联数据表,将这些对象的集合归为一个专门的层即领域模型层。它不再需要开发者建立和维护不必要的数据传输对象来匹配对应的领域对象,而且不需要附加编码。
3 系统总体设计
产品销售是企业经营过程中的一个重要环节,通过产品销售分析系统,可以获取各种产品销售系统,生成各种产品销量和营业额的相关图形,产品销售系统分为产品管理、订单管理和销售分析3个模块。产品管理可以添加、删除、修改产品,维护企业的产品资源;订单管理可以添加、删除、修改订单,维护企业的产品订单;销售分析是根据产品订单数据生成各种产品销售分析图。
4 系统实现
4.1 iBATIS配置文件
根据系统需求分析,产品销售分析系统需要实现产品维护、订单维护以及各种销售分析图形的生成等功能。以产品销售分析系统的订单维护功能为例介绍有关配置。在iBATIS的SQL Map框架中,需要一个配置文件XML配置持久层框架信息,如配置数据库连接JDBC、SQLMap映射文件的加载、SQL Map的配置和优化设定。
4.2 Spring与iBATIS整合实现DAO
本系统框架中采用Spring整合iBATIS结合来实现系统的DAO层。DAO模式是Java EE核心设计模式,用来抽象和封装所有对数据源的访问。Spring对iBATIS整合后,对iBATIS的配置主要是对SqlMapClient节点的配置,实际上是配置了一个SqlMapClient的创建工厂类。本系统Spring的核心配置文件是/WEB-INF/spring-context/applicationContext.xml,系统通过在web.xml中配置Spring监听器来启动Spring,Spring在web.xml中的配置。
系统启动时通过ContextLoadListener初始化Spring容器。然后ContextLoaderListener监听器通过初始化参数connextConfigLocation找到配置文件applicationContext.xml并加载。
SqlMapClient节点配置中,configLocation属性配置了iBATIS映射文件的路径及名称,dataSource属性引入了数据源。
4.3 业务逻辑层设计与事务管理
业务逻辑层是系统架构中核心价值的部分,它主要实现业务规则制定、业务流程的实现等与业务需求有关的系统设计。系统业务逻辑层的设计,采用接口和实现分开的原则,业务逻辑组件接口定义该组件包含的功能,实现类提供该组件的实现。在轻量级JavaEE架构中,DAO组件将事务管理延迟到业务逻辑层管理。通过Spring的声明式事务管理,让业务逻辑层对象的方法具务事务性。
4.4 Spring与Struts2整合管理Action
本系统采用Spring IoC容器来管理业务逻辑组件,利用依赖注入为Action注入业务逻辑组件。Spring插件是通过覆盖Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象时,Spring插件会用Struts2配置文件中的class属性去和Spring 配置文件中的id属性进行关联,如果属性名相同,则由Spring创建,否则由Struts2框架自身创建,最后由Spring来装配。
4.5 Spring整合Log4j实现日志管理
Log4j是Apache的一个开源代码项目,它提供了一种细腻的日志管理方式,通过一个配置文件,可以多选择的控件每条日志的输出格式和目的地;通过定义信息的级别,可灵活开关代码中的反馈信息。通过Spring来使用Log4j,可以使Log4j的配置更简单灵活。
5 总结
本文主要介绍该系统各个功能划分,系统框架整合,在该整合框架中如何实现产品维护、订单维护和生成销售分析图等功能。
参考文献
[1]梁建全,周力,孟志勇,田利军.轻量级javaEE框架整合方案[M].北京:人民邮电出版社,2008.
[2]叶健毅.javaEE Eclipse Struts2 Hibernate Spring框架整合应用案例(第2版)[M].北京:人民邮电出版社,2009.
作者单位
篇5
关键词: SSH框架; J2EE技术; Web开发; 篮球俱乐部
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2012)10-24-03
引言
目前,Java Web轻量级开发的主流技术是SSH(Struts+Spring+Hibernate)框架。但随着软件开发技术的快速发展,SSH框架表现出安全性、开发过程复杂、功能不够齐全的问题,因此,对SSH框架进行补充和改进是必要的。
针对SSH框架存在的问题,运用各种成熟框架与技术对SSH框架进行集成和扩展,实践证明,在项目的开发过程中应用改进后的SSH框架,使开发的效率显著提高,系统的可靠性、可扩展性和可维护性等各种性能也明显提升。
1 成熟框架和通用技术简介
1.1 常用框架技术
1.1.1 SSH框架
SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑。SSH集成框架与技术结构如图1所示。
Compass是基于Lucene之上的,是第一个实现Java的开源搜索引擎框架[1]。Compass封装了对全文检索引擎lucene的操作,并且提供了Spring/Hibernate的应用层框架,让用户可以不必深入了解lucene,轻松地在自己的Spring/Hibernate架构的Web应用当中集成全文检索功能。Hibernate可直接操作数据库,当数据发生改变时,可以通过Compass的OSEM对数据索引进行更新。
1.1.3 Spring MVC框架
Spring MVC框架采用前端控制模式(Front Controller),它是Spring MVC请求中枢,其核心是DispatcherServlet。Spring MVC的所有请求通过它转发到不同的处理器(Colltroller)处理,处理完后返回一个Model And View对象。DispatcherServlet查询一个或多个ViewResolver视图解析器,找到Model And View对象指定的视图对象,视图对象负责渲染返回给客户端。
1.1.4 SWF(Spring Web Flow)框架
Spring Web Flow是Spring框架提供的构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的Spring Web框架还是Struts这样的Web框架。通过策略接口,Spring框架是高度可配置的,而且包含多种视图技术,例如JavaServer Pages(JSP)技术、Velocity、Tiles、iText和POI。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。因此,它的出现极大地提高了编程效率,尤其适合需要复杂用户交互界面的Web应用程序[2]。
1.1.5 DWR框架
DWR(Direct Web Remoting)是一个开源项目,是基于Java的Ajax实现。它包含服务器端 Java 库、一个DWR Servlet以及JavaScript库。DWR的主要特点是能够将服务器所写的Java类直接转化为Javascript中所引用的对象,简化了Javascript中的转化操作[3]。
1.2 通用技术介绍
1.2.1 Ajax技术
AJAX(A synchronous JavaScript and XML)实际上是几项技术按一定的方式组合, 在共同的协作中发挥各自作用的技术[4]。Ajax具有改善B/S模式下交互、带宽性能等优点。Ajax的核心是JavaScript对象XmlHttpRequest。另外,Ajax为SSH提供了一种高效的数据传输方式,其常用的数据组织方式有JSON(JavaScript Object Notation)。在Ajax的应用中,通过JSON组织传输大块数据,优势明显。
1.2.2 表单及时验证器
表单验证器是表单的一种验证方式,当表单提交时,通过它能提高接收数据的有效性,因此被广泛地应用于各种Web应用程序中。表单验证结合Ajax技术能发挥出实时高效的验证功能。
1.2.3 任务动态调度(Quartz)
Quartz是Web应用开发中广泛使用的任务调度解决方案,它提供的强大任务调度机制允许开发人员灵活地定义触发器等调度事件表。另外,Quartz提供了可持久化的调度运行环境机制,在需要时可以保存并恢复调度现场。
篇6
关键词:轻量级Web应用框架;Spring;控制反转模式
1. 引言
J2EE框架标准将一个系统划分为WEB和EJB两个主要部分,从设计上可以抽象为表现层、业务层和持久层,实现了解耦的目的。因此,在实际编程中,大多数应用从功能上根据这三个层次来划分,但要这样做,没有技术上约束限制是比较困难的,因此一般借助J2EE具体技术来实现,可以使用EJB规范实现服务层和持久层,Web技术来实现表现层。J2EE应用虽然从总体上划分了三个层次,但在针对每一层上的具体应用,要设计出可维护性、高拓展性的软件设计目标还是有一定的难度。因此,类似Spring的轻量级框架应运而生,其目的是许多的应用不需要分布式、不需要J2EE中那些重量级的技术,譬如JNDI,有必要将大多数应用中不必要的技术隔离、改造。轻量级框架的发展已经成为推动J2EE技术发展的重要推动力,已经成为一代J2EE技术构架的基础,为此本文对一种新型轻量级Web应用框架进行相关研究。
2. Web应用框架相关研究
2.1. 基本概念
框架是一种软件重用技术,是一个应用软件系统部分或整体可重用设计,规定了其应用体系结构,阐明了整个设计、协作构件之间依赖关系,责任分配以及控制流程,具体表现为一组抽象类以及与它们的实例之间的协作方法。采用基于框架的开发,开发者只需要做的是向事先架好的骨架中填入特定的代码,可以使整个系统结构的改善和流程的固定化,提高了整个系统的可重用性和易修改性。
J2EE是一种利用Java2平台技术简化企业解决方案的开发、部署以及管理一些复杂问题的结构体系。J2EE定义了丰富的技术标准,符合标准的开发工具和API为开发企业级应用提供重要支持。J2EE与别的多层体系平台比较,其核心技术及优势表现在:组件技术、Servlet和JSP、JDBCAPI、JNDI和EJB等方面。
2.2. 轻量级Web框架
轻量级框架主要是指在Java应用程序开发环境中,简化的编程模型和更具响应能力的容器,旨在消除与传统J2EEAPI有关的不必要的复杂性和限制,缩短应用程序的部署时间,从而提高开发效率。比较流行或即将兴起的轻量级Web框架主要有:Struts框架、Tapestry框架、JATO框架以及Spring框架。本文是基于Spring框架展开的,在此做详细描述:Spring首先是一个开源项目,并且非常活跃;是一个基于反向控制(IoC)和面向方面编程(AOP)的多层J2EE系统框架,但它不强迫开发者必须在每一层中必须使用Spring,因为其模块化做的很好,允许开发者根据自己的需要选择使用它的某一个模块;Spring实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,它采用的IoC可以很容易的实现Bean的装配,它提供了简洁的AOP并据此实现事务管理等特性。
3. 新型轻量级Web应用框架
根据Web应用多层开发原则,把基于Spring框架的新型Web应用分为视图层、控制层、业务逻辑层、数据持久层,本节分别对这四层进行分析研究,并分析了Acegi安全框架的工作原理和实现机制以及设计实现了一种可重用动态数据管理构件,最后给出了以Spring框架为核心,整合可重用动态数据管理构件和Acegi安全框架的轻量级Web应用框架的总体结构设计。
3.1. 层次分析
3.1.1. 视图层
视图层位于整个Web应用层次结构的最顶端,负责处理用户交互,并从业务服务层获取相关数据以显示给用户。现在主流的MVC设计模式思想,视图层主要采用JSP实现,进行数据展现和处理,一般存在如下问题:无法像C/S那样使用丰富的效果来展示数据,不具有展观性;Web应用程序的执行效率,产生了不必要的等待;客户端通过提交窗体或者采用地址栏传递参数的形式发送参数时,不管哪种形式,都将导致页面被重新加载。
Ajax技术的出现,很好的解决了上述问题。Ajax是一种位于客户端的技术,能将客户端由原来的“哑”终端加强成智能化的“富客户端”,它采用异步发送请求的方式代替采用窗体提交实现无刷新更新网页,该技术的应用大大降低了客户端延迟,提高Web应用程序执行效率,解决了浏览器等待数据传输问题,改善了用户体验,使用户可以快速得到Web服务器的数据。Ajax实质上也是遵循Request/Server模式,所以这个框架基本的流程也是:对象初始化->发送请求->服务器接收->服务器返回->客户端接收->修改客户端页面内容。只不过这个过程是异步的。利用Ajax实现的MVC模型如图1所示:
3.1.2. 业务逻辑层
业务逻辑层的职责是:处理应用中的业务逻辑和业务有效性验证逻辑;管理事务;管理业务对象之间的依赖关系;在持久层上构造出业务逻辑的上下文,提供业务逻辑服务;管理基于持久层的业务逻辑实现。一般的业务逻辑层设计方案只是为了适应系统的四层架构而建立的平铺式的结构,存在着两个缺点:首先对于同一个主题对象来说,X1和X2对象模型应该有一些共性;七次在理论上,XXService是业务逻辑,对整个系统来说是重要的战略性决定,有着一定的必然性;而DAO是具体层次的实现,带有相当大的偶然性选择。当使用上面的设计方法,直接生成具体对象就使得偶然决定了必然。这种依赖是不可忍受的,业务由具体的实现来决定,这违反了设计模式中的“开一闭”原则(OCP)。所谓的“开一闭”原则,即是指:“一个软件实体应当对扩展开放,对修改关闭,也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。”相对于系统来说,业务层XXService的设计应该是可扩展的,即:当添加一个编码表的DAO实体时其代码应该保持不变。为实现XXService层的“开一闭”,必须进行相应的抽象,使得业务逻辑依赖于抽象层,如图2所示。
3.1.3. 数据持久层
在企业级应用开发中,持久层连接着数据资源层和业务逻辑层,起着承上启下的作用。Spring框架本身而言,是一个很有特色的Web应用框架,不仅如此它还提供了对持久层和视图层的实现的封装。对持久层来说,它为业务逻辑层提供数据,所有对数据库的操作都被屏蔽在持久层。Spring在持久层对JDBC进行了良好的封装,通过提供相应 的模板和辅助类,在相当程度上降低了JDBC操作的复杂性。并且得益于Spring良好的隔离设计,JDBC封装类库可以脱离Spring Context独立使用,也就是说,即使系统并没有采用Spring作为结构性框架,开发者也可以单独使用Spring的JDBC部分(spring-dao.jar)来简化访问数据库的工作。
3.2. 动态数据管理构件
本文动态数据管理构件的设计主要包括了两个方面:数据字典和动态数据对象。数据字典实现与数据库中各表名以及对应字段名的映射关系。数据字典记录了数据库中各表的结构信息,它由存放表名的表和存放各表字段信息的表构成。建立好数据字典后,也可以用它来创建一张物理表。本构件采用的这种方式简化了通过页面的参数传递来取值的代码,简化了对数据库的操作代码,避免了大量SQL语句在代码中的重复出现,从而降低了开发人员的负担,减小了出错机会。动态数据对象的应用是建立在数据字典基础之上的。
数据字典是动态数据对象能够使用的必要条件,是可重用动态数据管理构件的基础。一般认为,数据字典是以数据库中数据基本单元为单位,按一定顺序排列,对其内容作详细说明的数据集。本构件的数据字典是对整个系统中所有数据库表信息的集中管理。主要包括以下两个部分:数据字典表管理;数据字典字段索引表管理。
实现了数据字典后,就能根据数据字典所存储的信息封装一个完整的动态数据对象。一般地,动态数据对象通过绑定一张数据库表,实现对数据库的操作。它可以将页面传入的值有规律地存放在动态数据对象中,从而方便将所需要的值一一对应地注入到数据库中。同样地,也可以将数据库中取出的信息有规律地封装成动态数据对象,从而方便将取出的值显示到页面上。数据对象的封装,使得传值的工作大大简化,简化了数据库的操作。
3.3. Acegi安全框架
Spring框架本身没有提供对系统的安全性支持。Acegi是一个能够为基于Spring的应用系统提供描述性安全保护的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring对IOC和AOP的支持。Acegi安全框架主要有4个主要组件来实施安全性。它们分别是:安全拦截器、认证管理器、访问决策管理器、运行身份管理器,它们之间的关系如图3所示。
在Acegi框架中支持多种安全信息的持久化方式,可以在配置文件中配置或存放在关系数据库,由于在实际应用中,需求是经常发生变化的(例如在运行期间用户可能会提出动态改变权限分配的需求)。所以,在配置文件中配置是满足不了实际应用需求的。
3.4. 新型架构设计
本文提出的新型轻量级Web应用框架从上到下依次为视图层、控制器层、业务逻辑层、数据持久层,如图4所示:
图 4新型轻量级Web应用框架
视图层通过JSP结合Ajax技术实现,能将客户端由原来的“哑”终端加强成智能化的“富客户端”,Ajax技术采用异步发送请求的方式实现无刷新更新网页。控制层通过Spring提供的灵活的控制器来完成。业务逻辑层由Java Bean或者EJB组件构成。数据持久层是使用JDBC实现的,JDBC是Java核心类库的一部分,是一个面向对象的应用程序接口,通过它可访问各类关系数据库。
4. 结束语
本文利用Spring框架将可重用动态数据管理构件和Acegi安全框架整合进来,结合Ajax技术构成了一个轻量级Web应用框架。在此轻量级应用框架的基础上,应用系统分为视图层、控制层、业务逻辑层、数据持久层。Spring IoC编程模式降低了多层开发中层次之间的耦合度,Spring AOP编程方式实现了事务处理,Acegi安全框架实现了系统安全控制,可重用动态数据管理构件简化了操作数据库的复杂性,避免了大量SQL语句在代码中的重复出现,这样就使开发人员能够投入更多精力关注具体业,进而提高开发效率。
篇7
关键词: Struts; Spring; Hibernate; ORM; MVC
1 引言
目前Java在企业级开发中主要采用多层结构,这样做的好处有:它增强了程序的健壮性,提高了代码的重用率,也加快了程序开发的速度,缩短开发周期,同时还能便于开发人员对代码的维护,其中以三层结构最为经典。本文将理论联系实际地介绍三层结构的开发模式。
2 系统介绍
J2EE的三层结构主要指三层体系结构,即用户层、应用层和数据库服务器。用户层主要指用户界面,它要求尽可能的简单,使最终用户不需要进行任何培训就能方便地访问信息;第二层就是应用服务器,也就是常说的中间件,所有的应用系统、应用逻辑、控制都在这一层,系统的复杂性也主要体现在应用层;最后的数据库服务器存储大量的数据信息和数据逻辑,所有与数据有关的安全、完整性控制、数据的一致性、并发操作等都是在第三层完成。而轻量级架构Struts+Spring+Hibernate可以实现J2EE多层结构,其中Struts用于表示层、控制层Spring用于业务处理层,而Hibernate则用于数据持久层。
2.1 J2EE多层架构分析
2.1.1 Struts框架
Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:
* 模型 (Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的;
* 视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面;
* 控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类
* 一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户
提示信息的(这样一来就实现了应用系统的多语言支持)。
2.1.2 Spring框架
Spring是一个目前非常活跃的轻量级的开源的框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
* 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
* 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
* 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
2.2 J2EE轻量级架构
2.2.1 J2EE轻量级架构描述
J2EE的三层结构在业界是指表示层(Presentation),业务逻辑层(Business logic)以及基础架构层(Infrastructure)。这样的划分当然是经典的,但是在实际项目中,往往会对三层体系结构做一些扩展来满足项目的需要。一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator) 、领域层(Domain)、 数据持久层(Data Persistence) 和数据源层(Data Source)。它其实是在三层架构中增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间。
2.2.2 View层
视图层中主要采用 Struts技术:
在前端 JSP页面中使用 Struts提供的标签与 EL、JSTL结合来实现页面数据逻辑的组织和显示,如:Bean标签,HTML标签等;
将不同国家语言的字符串信息存储到对应的资源文件,并通过 Struts的 Bean标签提取到 JSP页面中,从而使其能处理国际化的消息;在页面中使用 Struts包含的 Tiles框架实现页面布局的复用,便于系统的改版和维护。
3 结论
从软件层次结构的角度上讲,软件的框架要具有较高的伸缩性和可扩展性。本文所讨论的SSH组合框架架构,它的模块化设计得到了很好的应用,层次非常清晰,具有很好的可复用性。持久层中,Hibernate的应用使得研发人员的工作大大降低,但同时它也存在着一些不足之处,如Hibernate直接生成SQL语句虽然方便快速开发,但同时失去了灵活性,使其应用在一些复杂的SQL应用中比较麻烦。
Struts,Spring,Hibernate三者结合,发挥各自的优点,使得基于轻量级J2EE架构开发简洁、结构清晰、开发周期短、有较高的可扩展性和可维护性,适用于面向对象的设计与开发。
篇8
论文摘要:本文通过介绍框架技术特点,提出了基于五层Web应用的框架整合结构。并在此结构上实现了城市公共信息服务平台的应用,为类似的电子政务应用提供了参考。
随着网络技术、信息技术的发展,各类信息充斥我们生活、工作及学习周围,但这些信息之间重复严重,数据准确度不高,社会公众很难准确获取与个人生活、工作、学习密切相关的本地数据和信息,进而影响人们的网络生活,因而各类专业的本地信息服务已成为当前互联网应用的一种趋势。由政府牵头整合政府、市场、企业等多方面资源,共同构建一个统一、开放、跨平台、系统结构层次清晰的城市公共信息服务平台,并以灵活多样的形式为本地公众提供准确、权威的信息服务已经成为当地互联网应用的一种重要需求。
基于J2EE技术标准体系的框架技术能够快速、有效地支持大中型Web应用项目的开发,但是在大中型Web应用中,可能存在几个层次,需要使用几个不同的框架。那么如何整合各层框架以让每个层在一种松耦合的方式互相协作,这是一个在软件工程领域实践性很强的课题。本文介绍了一个以Spring框架为核心,结合Struts、Hibernate框架的一种快速有效构建Web应用的框架整合策略,并在此整合策略基础上阐述了城市公共信息服务平台应用的设计思想和实现技术。
1J2EE框架技术特点
目前随着软件开发技术的发展,可重用、易扩展,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可有充裕的时间用来分析、构建业务逻辑,而不是繁杂的代码工程。于是人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。
1.1Spring框架
Spirng框架是一个以控制反转(IOC)模式和面向方面编程(AOP)思想为核心的轻量级框架,主要用于对中间层业务组件的管理。常用的中间件解决方案EJB是一种重量级的容器,主要有以下缺点:必须实现EJB的接口,对业务逻辑组件侵人性很大;应用依赖于EJB容器,不能单独运行,另外启动时间长,测试复杂、配置很困难。
首先,Spring是一种轻量级的框架,是基于组件化、模块化的结构。它有分层的体系结构,因而针对Spirng开发的组件不需要任何外部库,也可以选择某个模块独立使用,从而避免了EJB复杂、启动时间长的缺点。
其次,Spring也是一个IOC容器。IOC模式是Spring的核心,它的本质是由容器控制业务对象的协作关系,而非传统的用程序编码在业务对象直接控制,控制权由程序代码转移到外部容器。通过IOC模式可以很容易地管理和替换业务对象。
另外,Spring又是比较全面的框架,它并没有象EJB一样从底层开始全面实现J2EE的功能模块。Spring提供了大多数的层次功能模块,但它并不是从头开始实现的,它通过对其它框架技术的支持来实现各层功能。它包括SpringCore核心层、MVC模块、SpringDAO、SpringORM、上下文控制、WEB表示层、面向方面编程7个功能模块。
1.2Hibernate框架
Hibernate是一种专业的对象关系映射(O/R)工具,通过Hibernate的O/R映射,可以以对象化的方式处理数据库表中的记录。Hibernate通过Properties文件建立数据库连接,通过映射文件(.hbm.xm1)将数据库表映射为Java类,表中的每条记录对应为类的实例,而数据列值映射为实例的属性。Hiber—nate将这些实例以持久对象(Persistentobject)形式向中间业务层提供服务。
1.3Struts框架
Sturts框架很好地实现了MVC设计模式的概念。它通过ActionServlet对象实现集中控制,并利用Struts—conifg.xml文件,很好地实现了视图、控制、模型层次之间的分离,使得页面设计与改变真正做到与代码无关。
2整合框架的Web应用架构
如果以上述任何一个框架技术来实现大中型的Web应用,会存在效率不高,解决问题不彻底等问题,通过以轻量级框架Spring为核心,充分利用Spring框架的开放性、模块化以及对业务对象、事务管理等强大的功能,整合Sturts、Hibernate框架,可以构造出五层Web应用架构,分别为:客户层、Web层、业务层、持久层、企业资源层5个层次。整合框架的Web应用架构如图1所示:
在客户层,通过JSP页面实现交互,负责传送请求(Request)和接受响应(Response)。在Web层,Sturts根据ActionServlet接受到的请求,委派相应的Action。Action对象中的execute方法调用模型中的业务组件,决定“做什么”。在业务层,管理业务组件的SpringIOC容器负责向Action提供业务模型(Mode1)组件,决定“怎么做”和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件提升系统性能和保证数据完整性。业务层通过DAO数据访问对象,向持久层请求数据处理。在持久层,依赖于Hibernate的对象关系映射和对象化的查询语言操作,通过Hibernate的会话,处理DAO组件请求的数据,并返回处理结果。
对照基于EJB的一般WEB应用结构,整合框架的Web应用架构中通过Spring提供的轻量级业务组件的管理和IOC容器,实现了对EJB技术的替代和更好的组件重用性,使业务组件间的协作更加松耦合。同时利用Spirng的开放性、模块化以及对Hibernate良好支持的特点,通过引入专门的O/R映射框架Hibernate实现了对关系数据库的对象化,隐藏了数据库的底层细节,便于开发者以统一的面向对象思想来开发应用。另外通过Sturts的MVC模式,开发清晰明确的业务流程和用户交互,实现表现逻辑和业务逻辑的解耦,摆脱了原有的开发模式带来的高耦合性。通过框架的整合不仅集成了各种框架的优势,同时也构造了层次清晰,结构合理的5层Web应用架构。
3应用实例
3.1项目概述
“宁波市城市公共信息服务平台”是由宁波市信息产业局牵头,以政府投资形式建设的一个公益性地信息服务平台。平台整合本地各类专业的信息服务企业和机构的信息资源,以合作的方式共同打一个宁波市本地的信息资源集聚中心和本地的信息门户,进而既增值开发利用了政府信息资源,也提了信息服务业的核心竞争能力,同时也为社会公众提供了一个权威的、统一的信息渠道,达到了政府、业、公众共赢的局面。
本平台整合了与社会公众有关的衣、食、住、行等政府、企业信息。信息分基本信息和市场商业信息两类。对于基本信息,平台的管理员及加盟企业所有成员都能进行信息的维护和更新,并有专门的信息员进行审核和管理,保持平台基本信息的准确与及时性。对于商业信息,基本上由者负责为原则,平台提供一种免费的平台,同时对这些的信息给予地图定位以及与其它频道信息等关联的增值服务,进一步提升第三方网站的信息价值。根据本平台的用户角色区分,主要有:前端普通用户和后台管理用户。后台管理用户有4种,分别是系统管理员、频道运作单位、加盟企业、信息员,主要负责对信息的采集与。前端用户是指一般的网站浏览用户,前端普通用户可以按分类信息查询,也可以按搜索引擎方式查询,在查到文本信息的同时给出对应的GIS信息,进而可以获得行车路线等有关地图位置信息。另外,如用户根据本平台查到的信息,想进一步进行电子商务操作,如网上购物、电子订票等,本平台可以负责直接转向,起了一个信息门户的作用。
3.3主要实现技术
本平台采用Tomcat5.0作为Web服务器,Struts框架为1.2版本,Spring框架为1.2.5版,Hiber—nate框架为3.0版,根据上述整合框架的Web应用架构来实现平台的结构。
3.3.1视图层页面设计:根据前端用户灵活的信息浏览需求,同时又要适应频道运作单位自己管理频道模块的需求,因此,页面设计改动不能影响到其它业务逻辑。在实现中通过Sturts的自定义标签,结合MVC模式,实现页面与业务逻辑分离,做到JSP页面不包含Java代码。另外,利用JSP技术在显示页面嵌入地图内容,实现图文并茂的显示方式。
3.3.2Web层请求响应控制:通过struts—conifg.xml配置文件把后台用户管理页面或前台用户浏览页面都对应到每个Action,当页面发出请求后,根据struts—config.xml的配置文件中对应的Action部署,由Action对象调用本平台内的业务层组件。如果此时请求的是地图信息那么Action对象中以AP/方式向市规划局的GIS平俞调用地图位置信息,并把结果返回给客户端。如果此时请求是进一步需要第方电子商务服务,那么直接重定向到第方电子商务服务网站。
3.3.3业务对象的IOC方式管理:Web层的Action只是决定“做什么”,并没有实现“怎么做”,具体的业务逻辑由业务层的业务组件来完成。平龠中包括信息查询、会员注册、积分管理等功能模块都需要有一个业务组件来实现该功能。在项目实现中,把每一个业务组件包按接口类和实现类分开编码,当需要互相协作时,在代码层只要直接引用协作对象的接口类就可以了。协作对象的实现类统一南Spring容器根据配置文件的说明进行注入。如:在本项目中,普通会员信息的业务需要信息员审核,审核通过后要把该信息的状态记录到某个频道运作单位下。那就可以分为i个服务组件:信息组件、信息审核组件、信息状态记录组件,在Spring的IOC机制下,利用配置文件和基于接口与实现分离的编码方式可以很好地实现这个组件之间的松耦合协作,减轻了应用对容器的依赖。
3.3.4利用Spring框架实现事务管理及与持久层会话:在本项目中对于会员注册,积分管理等操作需要进行事务管理,同时所有的操作数据保存需要与持久层进行连接,这些都可利用Spring框架本身的功能来实现。如:通过Spring配置文件可以直接实现数据源、会话工厂、事务管理和数据访问对象的配置,数据访问对象根据上述Spring配置可以直接和持久层连接.这样在实现有中不用考虑这些功能的具体实现。Hibernate通过转换工具把各类信息保存表转换成相应的对象文件和.xml映射文件,Spring中的数据访问对象,直接对对象文件进行操作,由Hibernate完成数据的持久化。
篇9
关键词:企业级Web应用;开源;框架;J2EE
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)16-21252-03
The Research of the Construction of Enterprise Web Application System Based on Integration of Open Source Frameworks
HE Han-hui1, DING Yong2
(1.Zhejiang Medical College,Hangzhou 310053,China;2.Dept of information technology,Zhejiang Institute of Economic & Technology,Hangzhou 310018,China)
Abstract:This thesis did research on how to combine three open source frameworks (Struts framework based on MVC model, Spring framework based on IoC model and Hibernate framework based on ORM model), which are widely used currently, to construct Enterprise Web Application. It provides a lightweight solution of J2EE for Enterprise Web Application. In the end of the thesis, a project is implemented by the application of the integration of open source frameworks.
Key words:Enterprise Web Application;Open Source;Frameworks;J2EE
1 引言
MVC(Model View Controller的缩写)是一种常用的设计模式,它有效地减弱了业务逻辑接口和数据接口之间的耦合,提高了软件的可扩展性、可维护性。Struts+Spring+Hibernate开源组合框架为开发基于J2EE的企业级Web应用提供了一种轻量级解决方案。它不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。本文通过我们为浙江杭州某知名服装公司开发的一个较为大型的进销存系统展示了如何进行基于SSH框架的Web应用开发。
2 MVC设计模式
MVC即Model-View-Controller的缩写,MVC设计模式将应用程序进行了分层,视图和模型通过控制器连接,从而减少了用户界面和业务逻辑之间的耦合,使程序设计更加清晰、灵活,也提高了软件的可扩展性、可维护性。MVC的工作原理,如图1所示。
图1 MVC模型
2.1 视图(View)
视图提供了用户界面,是用户和应用程序的交互的窗口,既接受用户输入,也把模型数据状态显示给用户,但是视图不负责任何业务逻辑处理,仅仅是将用户输入数据传递给控制器或将模型数据显示给用户。
2.2 控制器(Controller)
控制器连接了模型和视图,根据用户请求判断将请求交给哪个模型来完成,然后调用视图来显示模型处理后的用户请求结果。
2.3 模型(Model)
模型封装了用户数据和处理数据的业务逻辑,体现了应用程序的当前状态,而且可以将用户数据状态的变化提供给多个显示该数据的视图共用。模型是应用程序的核心。
3 开源框架
3.1 Struts开源框架
Struts框架主要分为模型(Model)、视图(Viewer)和控制器(Controller)三部分,其主要的设计理念是通过控制器实现表现逻辑和业务逻辑松耦合,从而提高系统的可重用性、可扩展性和可维护性。
3.1.1 Struts中的视图(View)
Struts构架主要采用了JSP作为视图的实现。Struts自身包含了一组标记库(TagLib),这也是Struts的精华之一,灵活运用它们可以简化JSP页面的代码,提高开发效率。而且引入了ActionForm组件(实质为JavaBean)作为用户表单的封装来完成数据的传输。
3.1.2 Struts中的控制器(Controller)
Struts框架中采用了ActionServlet和Action类以及Struts-config.XML配置文件作为控制器的实现。当用户提出请求,ActionServlet类最先对请求进行处理,它将根据Struts-config.xml配置文件将用户请求映射到具体的Action类;而当Action类调用模型组件处理好用户请求,并返回了处理结果后,仍然由ActionServlet类根据Struts-config.xml配置文件将结果转发到视图提供给用户,或者转发另外一个Action做进一步处理。
3.1.3 Struts中的模型(Model)
模型以一个或多个Java bean的形式存在。Struts没有定义具体Model层的实现,Model层通常是和业务逻辑紧密相关的,有持久化的要求。Struts框架实现了MVC设计模式,但是它是典型的表现层框架,对模型的实现是不足的,所以有必要引入其他架构加强对模型的实现。这也就是说开发人员有更多自由来选择合适量级的持久化技术,比如Hibernate、EJB等等。
3.2 Spring开源框架
Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。Spring框架的核心是控制翻转IoC(Inversion of Control)/依赖注入DI(Dependence Injection)机制。IoC是指由容器中控制组件之间的关系而非传统实现中由程序代码直接操控,这种将控制权由程序代码到外部容器的转移,称为“翻转”。DI是对IoC更形象的解释,即由容器在运行期间动态地将依赖关系注入到组件之中。Spring采用设值注入和构造子注入的机制,通过配置文件管理组建的协作对象,创建可以构造组件的IoC容器。Spring框架的结构如图2所示。
Spring框架可以成为企业级应用程序一站式的解决方案,同时它也是模块化的框架,允许开发人员自由地挑选适合自己应用的模块进行开发。Spring框架式是一个松耦合的框架,框架的部分耦合度被设计为最小,在各个层次上具体选用哪个框架取决于开发者的需要。
3.3 数据持久层框架Hibernate
O/R mapping技术是为了解决关系型数据库和面向对象的程序设计之间不匹配的矛盾而产生的。Hibernate是目前最为流行的O/R mapping框架,它在关系型数据库和Java对象之间做了一个自动映射,使得程序员可以以非常简单的方式实现对数据库的操作。Hibernate工作原理如图3所示。
图2Spring 框架的结构 图3Hibernate工作原理
Hibernate通过对JDBC的封装,向程序员屏蔽了底层的数据库操作,使程序员专注于OO程序的开发,有助于提高开发效率。程序员访问数据库所需要做的就是为持久化对象编制xml映射文件。
底层数据库的改变只需要简单地更改初始化配置文件(hibernate.cfg.xml或者hibernate.properties)即可,不会对应用程序产生影响。
Hibernate有自己的面向对象的查询语言HQL,HQL功能强大,支持目前大部分主流的数据库,如Oracle、DB2、MySQL、Microsoft SQL Server等,是目前应用最广泛的O/R映射工具。Hibernate为快速开发应用程序提供了底层的支持。
4 基于SSH组合框架的Web应用开发实例
下面将通过我们为浙江杭州某知名服装公司所开发的一个大型的进销存系统来展示如何进行基于SSH框架的Web应用开发。由于本系统功能模块较多、业务逻辑复杂,限于篇幅原因,下面我们将以“渠道管理模块”为例来概要地说明系统的开发与实现过程。
4.1 数据持久层的实现
本系统的数据持久层由Hibernate实现。Hibernate通过映射(Mapping)文件将对象(Object)与关系型数据(Relational)相关联。有了Java持久化类后就可以在此基础上实现数据访问类。在Spring框架中,数据访问类可以从辅助类HibernateDaoSupport继承,这极大地方便了Hibernate框架在Spring中的使用,相应的部分代码如下:
public class ChannelDAO extends HibernateDaoSupport {
private static final Log log = LogFactory.getLog(ChannelinfoDAO.class);
// property constants
……
public void save(Channelinfo transientInstance) {
log.debug("saving Channelinfo instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
} }
……
}
4.2 业务逻辑层的实现
业务逻辑层由Spring框架支持。由于数据持久层实现了Java持久化类并且封装了数据访问对象(DAO),因此可以在Model组件中方便地调用DAO组件来存取数据。Spring的IoC容器负责统一管理Model组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。
在用户管理模块中,通过业务建模创建了用户模型ChannelService类,封装了对用户的权限管理以及积分管理等功能。ChannelService类通过调用数据访问类ChannelDao实现对用户数据的操作。这些组件的关系将通过配置Spring框架的applicationContext.xml联系起来,配置文件的主要内容如下:
<!-- ===创建业务模型组件ChannelService,并调用ChannelDao组件作为协作对象=== -->
< bean id= "ChannelService" class= "com.ebcss.hibernate.ChannelService">
<property name= "ChannelDao"> ref local= "ChannelDao"/> </property >
<bean>
<!--===创建数据访问组件ChannelDao,并调用Hibernate的Session工厂作为协作对象===-->
< bean id= " ChannelDao " class= " com.ebcss.hibernate.dao.ChannelDao ">
<property name= " SessionFactory "> ref local= " SessionFactory "/> </property >
<bean>
4.3 表示层的实现
表示层结合JSP和Struts的TagLib库处理显示功能,利用ActionServlet将请求(*.do)映射到相应的Action,并由Action调用业务逻辑的服务组件,然后根据处理结果跳转到Forward对象指定的响应页面。
业务流程的部署由struts-config.xml完成。下面以一个显示所有渠道信息的请求(ListChannel.do)为例来说明配置文件的使用。
<!- 请求调用ListChannelAction,并根据返回的Forward对象的状态来转到相应的页面-->
<struts-config>
<form-beans> <form-bean name="channelForm" type="com.ebcss.struts.form.ChannelForm"/>
</form-beans>
<action-mappings>
<action path = "/ListChannel.do"
type= " com.ebcss.hibernate.action.ListChannelAction "
name= "channelForm"
scope = "request"
validate = "true"
input= "/index.jsp"
>
<forward name="Success" path="/successListChannel.jsp" />
<forward name="Failure" path="/error.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.ebcss.struts.applicationResources"/>
</struts-config>
一个好的架构可以避免重复设计,减少开发风险,增强软件的可扩展性、可维护性及可移植性,提高软件质量和性能效率。本文通过整合Struts+Spring+Hibernate开源框架,提出了一种利用轻量级开源框架来快速搭建Web应用的解决方案,并且通过其在实际项目中的应用,证明了采用此方案可以帮助开发人员在短时间内建立结构清晰、可重用性好、维护扩展方便的Web应用程序。
参考文献:
[1] JOHNSON R,HOELLER J,ARENDSEN A,et al.Java/J2EE application framework reference document V1.1[M].2004.
[2] CRAIG WALLS,RYAN BREIDENBACH.Spring in Action[M].2005.
[3] Matt Raibler.Spring Live[S].SourceBeat,LLC,2004.
[4] 夏昕,曹晓钢,唐勇.深入浅出Hibernate[M].北京:电子工业出版社,2005.
篇10
Struts2框架实现MVC(Model,View,Controller)模式[10],MVC模式能够提高程序组件的重用性和清晰程序结构。Spring框架通过IoC(控制反转)和AOP(面向方面编程)两种技术,来实现对程序中的对象关系、事务、权限和日志的统一管理。Hibernate框架完成系统数据持久化的工作,通过Hibernate可以提高民政服务信息系统对底层数据库兼容性,能在不修改后台代码的情况下实现数据库系统的更换。
2系统设计
2.1系统总体设计民政服务信息系统包括三个子系统,分别是民政内部办公系统、社会服务平台和社会家园网。三个子系统协作示意图如图1所示。图1中实线表示业务申报,虚线表示审核结果回复,数字表示民政业务类型(1表示社区申报的业务,2表示社区家园网直接申报的业务,3表示通过社区家园网向社区申报并且最终由社区提交到民政局的业务)。智慧社区服务平台是由社区的办公人员使用,主要完成社区基本情况登记与查询,民政业务上传与下达。民政内部办公系统是提供给民政局办公人员使用的,民政局办公人员通过该系统能够审批社区上报的申请和管理的民政业务信息。社区家园网是一个论坛,为群众提供一个咨询、办事和交流的平台,不需要进行证件真实性审核的业务都通过社区家园网申报。
2.2架构设计民政服务信息系统采用ExtJS和JSP实现前台页面,通过Struts2、Spring和Hibernate实现后台业务处理,并通过ExtJS和SSH整合搭建一个实现了MVC设计模式的系统架构。ExtJS+SSH架构中ExtJS实现了从用户界面向后台提交请求。控制层使用Struts2来实现MVC模式。业务逻辑层细化为Service层和DAO层,通过Spring来管理Service和DAO之间的耦合关系。数据持久层使用Hibernate框架。实现时为了提高系统的扩展性,Service层和DAO层使用抽象接口,将具体的实现类和接口分离,并通过Spring指定Service接口和DAO接口的具体实现类,在需求变化后,只需更改Spring的配置文件就可以适应新的需求,符合“开闭原则”。系统架构图如图2所示。控制层通过Struts2的servlet来完成,Action层由Struts2中的自定义action类实现。Action层中的对象使用Struts-Spring插件管理,而Service层和Dao层及相应实现层的对象统一由Spring管理。表现层通过JSP和ExtJS实现。
2.3功能设计
2.3.1民政内部办公系统的设计民政内部办公系统按组织机构来划分功能模块,主要包括区划地名科、社会福利与社会事务科、最低生活保障局、民间组织管理科、救灾救济科、局办公室和人事科。根据通用信息系统的需求,添加了权限管理和登录管理。由于每个模块都有相应的政策法规,将政策法规提取出来作为一个模块,局长监督模块体现了民政服务信息系统比手动办公的优势,局长通过该系统就可以了解下属的工作情况而不会打扰到下属办公。民政内部办公系统的功能结构图如图3所示。由于篇幅所限,图3中的第三级模块只列出具有代表性的功能模块,并对部分有代表性的第二级模块功能作了说明。区划地名科的功能是对地名普查等基本信息进行管理,主要包括:地名更改审批和行政区划,自然村和建筑物等地名信息的查询/添加/删除/修改和历史信息查询。社会福利与社会事务科是对儿童收养、社会福利机构、婚姻登记、殡葬及墓地和社会救助的管理。审批类业务主要包括儿童收养审批和社会福利机构审批,管理类业务主要是对儿童收养信息、婚姻登记信息、社会救助信息和殡葬及墓地信息的添加/删除/修改。民间组织管理科的主要功能是民间组织的审核、民间组织信息管理和民间组织年检。民政内部办公系统具有权限验证的功能,用户登录后只能处理本科室的业务。
2.3.2社区服务平台的设计社区服务平台是以业务功能来划分模块的,将社区的办公作为办公系统模块,其他模块都是对业务数据进行管理。社区服务平台的功能模块还有社区基本信息、社区组织、社会救助、社区服务、灾害数据管理和社区居委会管理。社区服务平台的功能结构图如图4所示。图4中的三级模块都是二级模块的核心功能,其他功能由于篇幅所限暂未列出。社区服务平台的主要功能模块分析如下。社区基本信息、社区组织、社会救助、社区服务都属于信息管理模块,主要功能是对相应信息进行查询。灾害数据管理的主要功能是提交灾害数据到民政局和对该社区的灾害数据进行管理。2.3.3社区家园网的设计社区家园网的实质是论坛,社区家园网实现时使用一个开源的论坛框架,然后添加一个二级模块民政业务来完成所有在社区家园网提交的民政业务。社区家园网的功能结构图如图5所示。由于篇幅所限,图5中的民政业务模块的部分功能模块未列出。
3系统的关键技术
民政服务信息系统是以Struts2为实现架构的基础,通过Spring来整合相应的框架。Struts2和Spring整合来完成对Action的管理,Spring和Hibernate整合来实现持久化的工作。ExtJS作为Struts2的视图的实现。
3.1系统核心配置文件的实现民政服务信息系统在web.xml中定义Struts2和Spring的配置文件路径。该系统中Struts2的Action对象由Struts-Spring插件来管理,该插件需要在web.xml中配置相应的监听器。web.xml文件核心内容。
3.2Spring和Hibernate整合的实现Hibernate完成系统业务数据持久化的操作,提供了save、delete、update等方法,在DAO层只需调用这些方法就可以存储业务数据。Spring对Hibernate支持非常完善,在Spring的配置文件daoContext.xml中配置一个id为dataSource的bean和一个sessionFactory的bean,在程序中使用注入的sessionFactory对象来实例化Spring框架提供的HibernateTemplate模板,DAO通过HibernateTemplate来调用持久化方法进行业务数据存储。
3.3整合ExtJS的实现ExtJS框架只需要在JSP页面导入ExtJS的核心JS文件和CSS样式,就可以在自定义JS文件中使用ExtJS提供的页面组件和表单组件,而不必使用HTML标签来编写Web界面。在主界面的JSP中整合ExtJS的代码如下。
4结束语