您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 基于Struts+Spring+Ibatis轻量级开发
基于struts+spring+ibatis的轻量级J2EE开发文档选项级别:初级吴高峰(shuwgf@21cn.com)常德卷烟厂信息技术部2005年2月01日大多数IT组织都必须解决三个主要问题:1.帮助组织减少成本2.增加并且保持客户3.加快业务效率。完成这些问题一般都需要实现对多个业务系统的数据和业务逻辑的无缝访问,也就是说,要实施系统集成工程,以便联结业务流程、实现数据的访问与共享。JpetStore4.0是ibatis的最新示例程序,基于StrutsMVC框架(注:非传统Struts开发模式),以ibatis作为持久化层。该示例程序设计优雅,层次清晰,可以学习以及作为一个高效率的编程模型参考。本文是在其基础上,采用Spring对其中间层(业务层)进行改造。使开发量进一步减少,同时又拥有了Spring的一些好处…1.前言JpetStore4.0是ibatis的最新示例程序。ibatis是开源的持久层产品,包含SQLMaps2.0和DataAccessObjects2.0框架。JpetStore示例程序很好的展示了如何利用ibatis来开发一个典型的J2EEweb应用程序。JpetStore有如下特点:ibatis数据层POJO业务层POJO领域类StrutsMVCJSP表示层以下是本文用到的关键技术介绍,本文假设您已经对Struts,SpringFramewok,ibatis有一定的了解,如果不是,请首先查阅附录中的参考资料。Struts是目前JavaWebMVC框架中不争的王者。经过长达五年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。但是Struts某些技术特性上已经落后于新兴的MVC框架。面对SpringMVC、Webwork2这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。但站在产品开发的角度而言,Struts仍然是最稳妥的选择。本文的原型例子JpetStore4.0就是基于Struts开发的,但是不拘泥于Struts的传统固定用法,例如只用了一个自定义Action类,并且在formbean类的定义上也是开创性的,令人耳目一新,稍后将具体剖析一下。SpringFramework实际上是ExpertOne-on-OneJ2EEDesignandDevelopment一书中所阐述的设计思想的具体实现。SpringFramework的功能非常多。包含AOP、ORM、DAO、Context、Web、MVC等几个部分组成。Web、MVC暂不用考虑,JpetStore4.0用的是更成熟的Struts和JSP;DAO由于目前Hibernate、JDO、ibatis的流行,也不考虑,JpetStore4.0用的就是ibatis。因此最需要用的是AOP、ORM、Context。Context中,最重要的是Beanfactory,它能将接口与实现分开,非常强大。目前AOP应用最成熟的还是在事务管理上。ibatis是一个功能强大实用的SQLMap工具,不同于其他ORM工具(如hibernate),它是将SQL语句映射成Java对象,而对于ORM工具,它的SQL语句是根据映射定义生成的。ibatis以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。有ibatis代码生成的工具,可以根据DDL自动生成ibatis代码,能减少很多工作量。回页首2.JpetStore简述2.1.背景最初是Sun公司的J2EEpetstore,其最主要目的是用于学习J2EE,但是其缺点也很明显,就是过度设计了。接着Oracle用J2EEpetstore来比较各应用服务器的性能。微软推出了基于.Net平台的Petshop,用于竞争J2EEpetstore。而JpetStore则是经过改良的基于struts的轻便框架J2EEweb应用程序,相比来说,JpetStore设计和架构更优良,各层定义清晰,使用了很多最佳实践和模式,避免了很多反模式,如使用存储过程,在java代码中嵌入SQL语句,把HTML存储在数据库中等等。最新版本是JpetStore4.0。2.2.JpetStore开发运行环境的建立1、开发环境JavaSDK1.4.2ApacheTomcat4.1.31Eclipse-SDK-3.0.1-win32HSQLDB1.7.22、Eclipse插件EMFSDK2.0.1:Eclipse建模框架,lomboz插件需要,可以使用runtime版本。lomboz3.0:J2EE插件,用来在Eclipse中开发J2EE应用程序SpringIDE1.0.3:SpringBean配置管理插件xmlbuddy_2.0.10:编辑XML,用免费版功能即可tomcatPluginV3:tomcat管理插件PropertiesEditor:编辑java的属性文件,并可以预览以及自动存盘为Unicode格式。免去了手工或者ANT调用native2ascii的麻烦。3、示例源程序ibatis示例程序JpetStore4.0改造后的源程序(+spring)(源码链接)2.3.架构图1JpetStore架构图图1是JPetStore架构图,更详细的内容请参见JPetStore的白皮书。参照这个架构图,让我们稍微剖析一下源代码,得出JpetStore4.0的具体实现图(见图2),思路一下子就豁然开朗了。前言中提到的非传统的struts开发模式,关键就在strutsAction类和formbean类上。strutsAction类只有一个:BeanAction。没错,确实是一个!与传统的struts编程方式很不同。再仔细研究BeanAction类,发现它其实是一个通用类,利用反射原理,根据URL来决定调用formbean的哪个方法。BeanAction大大简化了struts的编程模式,降低了对struts的依赖(与struts以及WEB容器有关的几个类都放在com.ibatis.struts包下,其它的类都可以直接复用)。利用这种模式,我们会很容易的把它移植到新的框架如JSF,spring。这样重心就转移到formbean上了,它已经不是普通意义上的formbean了。查看源代码,可以看到它不仅仅有数据和校验/重置方法,而且已经具有了行为,从这个意义上来说,它更像一个BO(BusinessObject)。这就是前文讲到的,BeanAction类利用反射原理,根据URL来决定调用formbean的哪个方法(行为)。formbean的这些方法的签名很简单,例如:publicStringmyActionMethod(){//..workreturnsuccess;}方法的返回值直接就是字符串,对应的是forward的名称,而不再是ActionForward对象,创建ActionForward对象的任务已经由BeanAction类代劳了。另外,程序还提供了ActionContext工具类,该工具类封装了request、response、formparameters、requestattributes、sessionattributes和applicationattributes中的数据存取操作,简单而线程安全,formbean类使用该工具类可以进一步从表现层框架解耦。在这里需要特别指出的是,BeanAction类是对struts扩展的一个有益尝试,虽然提供了非常好的应用开发模式,但是它还非常新,一直在发展中。图2JpetStore4.0具体实现2.4.代码剖析下面就让我们开始进一步分析JpetStore4.0的源代码,为下面的改造铺路。BeanAction.java是唯一一个Strutsaction类,位于com.ibatis.struts包下。正如上文所言,它是一个通用的控制类,利用反射机制,把控制转移到formbean的某个方法来处理。详细处理过程参考其源代码,简单明晰。Formbean类位于com.ibatis.jpetstore.presentation包下,命名规则为***Bean。Formbean类全部继承于BaseBean类,而BaseBean类实际继承于ActionForm,因此,Formbean类就是Struts的ActionForm,Formbean类的属性数据就由struts框架自动填充。而实际上,JpetStore4.0扩展了struts中ActionForm的应用:Formbean类还具有行为,更像一个BO,其行为(方法)由BeanAction根据配置(struts-config.xml)的URL来调用。虽然如此,我们还是把Formbean类定位于表现层。Struts-config.xml的配置里有3种映射方式,来告诉BeanAction把控制转到哪个formbean对象的哪个方法来处理。以这个请求连接为例=/shop/viewOrdertype=com.ibatis.struts.BeanActionname=orderBeanscope=sessionvalidate=falseforwardname=successpath=/order/ViewOrder.jsp//action此种方式表示,控制将被转发到orderBean这个formbean对象的viewOrder方法(行为)来处理。方法名取path参数的以/分隔的最后一部分。2.MethodParameteractionpath=/shop/viewOrdertype=com.ibatis.struts.BeanActionname=orderBeanparameter=viewOrderscope=sessionvalidate=falseforwardname=successpath=/order/ViewOrder.jsp//action此种方式表示,控制将被转发到orderBean这个formbean对象的viewOrder方法(行为)来处理。配置中的parameter参数表示formbean类上的方法。parameter参数优先于path参数。3.NoMethodcallactionpath=/shop/viewOrdertype=com.ibatis.struts.BeanActionname=orderBeanparameter=*scope=sessionvalidate=falseforwardname=successpath=/order/ViewOrder.jsp//action此种方式表示,formbean上没有任何方法被调用。如果存在name属性,则struts把表单参数等数据填充到formbean对象后,把控制转发到success。否则,如果name为空,则直接转发控制到success。这就相当于struts内置的org.apache.struts.actions.ForwardAction的功能actionpath=/shop/viewOrdertype=org.apache.struts.actions.ForwardActionparameter=/order/ViewOrder.jspscope=sessionvalidate=false/actionService类位于com.ibatis.jpetstore.service包下,属于业务层。这些类封装了业务以及相应的事务控制。Service类由formbean类来调用。com.ibatis.jpetstore.persistence.iface包下的类是DAO接口,属于业务层,其屏蔽了底层的数据库操
本文标题:基于Struts+Spring+Ibatis轻量级开发
链接地址:https://www.777doc.com/doc-5948673 .html