客服查询系统框架说明spring+hibernate+struts2.0+velocitySpring框架简单介绍•依赖注入通过配置文件注入对象•面向方面定义方法拦截器和切点,减弱代码的功能偶合•开放式的框架结构不强制使用自己的框架,可以整合其他的框架(webworkstrutsTapertry等等,)•Spring2.0的新特性1.bean的作用域由原来的单例与原形,增加了request和session范围2.提供了AspectJ切入点语言的支持3.提供对jdk5的支持Hibernate简单介绍•Hibernate是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(O/Rmapping)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。通常对于数据库中的每一个表对应一个类,表中的字段对应于类中的属性.另外还需要一个映射文件用来说明表与类的映射关系,以及表中的字段与类中的属性的映射关系.•提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。它屏蔽了数据库中的差异,使用统一的HSQL语言(类似SQL语言的hibernate的专用语言),通过设置方言,hibernate会自动把hsql语言转换成相应的数据库的语言.•Hibernate的映射对象使用的POJO,因此它的偶合性比较小,当它存在于session中时就是持久化对象(应用于实体层的操作),关闭了session后它就是游离对象(可以供web层做为值对象使用).从而达到复用的目的•Hibernte对关系比较确定的表(多对多,一对多,一对一)之间的操作比较方便,在映射文件中标注,通过对象的属性就能取出对象.Struts2.0框架简单介绍•Webwork与struts已经合并,struts2.0与webwork2.2基本一样1)web浏览器请求资源2)filterdispatcher查看请求信息来决定转发给相应的action来处理3)拦截器会自动地将相应的处理器应用于一个请求,如数据验证\上传文件等等,4)action的execute方法将会执行,处理一些交互层的逻辑5)结果将会以指定的形式输出(html,pdf,image)•要求jdk5.0,不过可以通过J4包中的工具转换一下struts2.0的jar包,可以让它支持jdk1.4Struts2.0框架简单介绍•Struts2.0的基本配置1)web.xml中的配置filterfilter-namestruts/filter-namefilter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class/filterfilter-mappingfilter-namestruts/filter-nameurl-pattern/*/url-pattern/filter-mappingStruts2.0框架简单介绍•Struts.xml配置packagename=tradequerynamespace=/tradequeryextends=struts-defaultactionclass=ShowQueryListActionname=showlistresultname=exitsystype=velocityparamname=location../tradequery/query2.vm/param/result/action/packageStruts2.0框架简单介绍•Struts.properties配置设置struts2.0框架的一些属性框架默认的配置文件是struts-default.properties在struts包中,自定义的struts配置文件的属性会覆盖其中同名的属性例如:struts.i18n.encoding=GBKstruts.objectFactory=springstruts.action.extension=actionStruts2.0框架简单介绍•Velocity.properties如果view层使用的是velocity,那么需要配置velocity的属性,如output.encoding=GBKinput.encoding=GBKdefault.contentType=text/html;charset=GBKvelocimacro.library=/WEB-INF/query-macros.vm并且还需要在struts.properties的配置文件中指定velocity配置文件的位置struts.velocity.configfile=velocity.propertiesStruts2.0框架简单介绍•包含一个比较成熟的服务器端的验证框架对数字,日期,email,url等格式进行验证设定验证的规则使用表达式验证文件的默认名称是action类名-action别名-validation.xmlStruts2.0框架简单介绍•Struts2.0拦截器struts2.0的拦截器是面向方面的思想的体现,当请求的资源映射到相应的action之前做一些预处理的工作,action执行完以后,在返回之前做一些收尾工作框架大部分的核心功能都是通过拦截器来实现的,如接收数据,数据的类型转换,上传文件的处理,防止多重提交,数据验证拦截器分为两种,一种是struts2.0提供的已经写好的拦截器,还有一种是自定义拦截器.这些拦截器都可以组合使用可以为所有的action设定一个默认的拦截器,也可以为每个action指定各自使用的拦截器.Struts2.0框架简单介绍•通配符的映射struts2.0可以使用通配符对一组提交进行映射例如:actionname=/edit*class=org.apache.struts.webapp.example.Edit{1}Action“method=“{1}”resultname=failurepath=/mainMenu.jsp/resultpath=/\{1\}.jsp//actionVelocity模版语言•Velocity是基于JAVA的模版引擎,它可以让页面人员引用JAVA代码中定义的方法,可以使页面人员与JAVA程序员并行工作,使页面人员集中精力于页面的美化工作,使程序员集中精力于代码逻辑.•Velocity语法简单,页面人员学习难度不大#foreach($manin$!manList)$!man#end#if($customer.hasPurchased($mud))#end#set($a=Velocity)##ThisisasinglelinecommentVelocity模版语言与struts2.0或webwork结合使用时可以取出request,response$req$resp可以进行一些简单的计算#set($value=$foo+1)#set($value=$bar-1)#set($value=$foo*$bar)#set($value=$foo/$bar)包含普通的txt文件可以用#include(one.txt)包含模版文件可以用#parse(me.vm)Velocity模版语言可以使用宏,达到复用的目的#macro(tablerows$color$somelist)#foreach($somethingin$somelist)trtdbgcolor=$color$something/td/tr#end#end引用宏时可以#tablerows($color$greatlakes)客服查询系统框架•框架总体结构概要本系统采用的框架是spring2.0+hibernate3.2(或ibatis)+struts2.0,其中spring主要应用于服务层,hibernate(或ibatis)应用于对数据库的操作,struts2.0应用于web层。客服查询系统框架整个框架从总体来说是按照模块划分的,在各模块内部是按层搭建的。对于各模块公共的代码放在src目录下,如各层spring的配置文件,组件工厂,hibernate数据库表的对应实体以及实体的映射文件,公共工具类文件,web层的工厂以及web层用到的加载工厂的监听器类,struts2.0和log4j的配置文件。对于各个模块的代码分别放在src/模块名的目录下。客服查询系统框架在各个模块下主要分为如下几层:实体层,DAO层,服务层,web层以及该模块用到的工具包,对于采用hibernate的开发人员可以分出一个值对象层,主要的用途在于为web层提供方便的列表对象。对于采用ibatis的开发人员可以将实体层与值对象层合并为model层。客服查询系统框架•各层结构说明1)实体层(或model层)说明:对于采用hibernate的开发人员可以通过myeclipse的插件或手工方式生成对于数据库中表的hibernate的映射对象和映射文件在dao层中有一个hibernatedao的接口及实现类,在该类中主要提供一些基本的对于实体对象的增、删、改、获取等操作,在测试文件中可以使用该工具来获取实体对象,测试实体类的正确性。客服查询系统框架在生成完每一个表的映射文件和映射类之后,建议通过在测试文件中用JUNIT测试一下,以排除该层出错的可能性,以便缩小错误的的范围对于采用ibatis的开发人员建议把用到的model与映射文件分别放在不同的包中,如类可以放在model包中,映射文件可以放在maps包中。客服查询系统框架•2)DAO层说明:该层主要有三类文件,1)抽象文件:存放需要通过注入的实体类的getter和setter方法。2)接口文件:为服务层提供DAO的方法的接口。3)接口实现:继承抽象类,实现接口。hibernate事务管理可以建立在该层中。建议在每实现一个方法在测试文件中测试一下,可以通过配置层中的组建工厂获取DAO层的接口,从而测试其中的方法。客服查询系统框架3)服务层说明:该层是直接面向web层的,文件也分为三类,各类文件与DAO层的各类文件类似,对于数据库的操作可以通过注入DAO的实现类来调用其中的方法,对于非数据库的操作可以直接在服务层的实现类中书写实现的代码,最后也建议在完成该层的每个接口方法的实现后在测试文件中测试。客服查询系统框架4)WEB层说明:Web层用的是struts2.0的框架结构,在src目录下可以看到它的两个配置文件struts.properties和struts.xml,由于整个应用框架是以模块来区分的,所以每个模块都会有一个struts的xml配置文件,可以用模块名来命名,在struts.xml中将各模块的xml配置文件include进来就可以了。客服查询系统框架在web层中创建了一个web工厂类,它和组件工厂的区别在于组件工厂独立加载配置文件的,所以不起服务同样可以获得spring中定义的bean,这样就可以在测试文件中通过组件工厂来获得各层的接口。Web工厂在起服务的情况下可用,可以用与web层中获取服务层的接口,不过一般通过struts2.0关于spring的插件通过注入的方式获取服务层的接口.但是在action以外的类(如servlet等中)中要获得服务层的接口可以通过web工厂获得,建议在web层不要使用组件工厂,因为这样有时会产生循环加载的错误.客服查询系统框架还有一点需要说明由于使用的服务器的不同,listener,servlet和filter加载的顺序有所区别,例如在tomcat中listener就在filter之前被加载,所以在struts的action的构造方法中就可以通过web工厂获得接口,不会报错,但是在resen中filter的加载就在listen之前,所以在系统构造struts的action的时候spring的配置文件并没有被加载,所以在这种情况下,如果在struts