SSM+前端ExtJS MVC框架的搭建实例

上传人:xin****18 文档编号:117408963 上传时间:2022-07-08 格式:DOCX 页数:50 大小:1.71MB
收藏 版权申诉 举报 下载
SSM+前端ExtJS MVC框架的搭建实例_第1页
第1页 / 共50页
SSM+前端ExtJS MVC框架的搭建实例_第2页
第2页 / 共50页
SSM+前端ExtJS MVC框架的搭建实例_第3页
第3页 / 共50页
资源描述:

《SSM+前端ExtJS MVC框架的搭建实例》由会员分享,可在线阅读,更多相关《SSM+前端ExtJS MVC框架的搭建实例(50页珍藏版)》请在装配图网上搜索。

1、SSM+ExtJSMVC框架搭建实例2013目录1 重要声明22 项目搭建22.1项目jar包简介22.2项目新建5.2.3管理项目目录9.2.4配置使用mybatis102.5 配置使用spring132.6 测试用例的编写1.52.7 新建和启动server212.8ExtJS之MVC2.52.8.1前端开发之页面访问252.8.2前端开发之struts配置272.8.3前端开发之web.xml配置282.8.4前端开发之前端概貌302.8.5前端开发之view层342.8.6前端开发之model层和store层362.8.6前端开发之controller层373 结尾的话4.02.1项j

2、ar包简介SSM+ExtJSMVC框架搭建实例1重要声明在开始搭建我们的web项目之前,需要进行以下声明:1)这份实例帮助文档主要针对一些初入职场或者是初识java和ExtJS的程序员,希望能一定程度上给予一些建议和引导,避免走一些不必要的弯路。对于职场元老级人物可以直接略过,不作理会,以免贻笑大方。2 )这次实例演示我们所采用的IDE是eclipse,因此如果当你使用myeclipse或者是其他IDE来进行实践时,有些场景不完全相同,但基本相似;3 )本次实例后端采用spring+struts+mybatis框架,前端采用ExtJS,前后端均采用MVC的开发模式来进行开发。4)本文档的作者是

3、一个程序菜鸟,因此本文档中难免存在诸多错误和问题,请多多包涵。如果可以的话,请及时与我沟通交流,以期共同进步。2项目搭建在正式开始我们的项目搭建之前,让我们来看一下在我们即将开始的项目中,主要会使用到哪些jar包,具体如右图所示:1)aopalliance.jar:这个包是AOP联盟的API包,里面包含了针对面向切面的接口,通常Spring等其它具备动态织入功能的框架依赖此包。2)commons-dbcp.jar:DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。3) commons-fileupload.jar:commons项目中的关于文件上

4、传的包,struts2.1.6版本后必须加入此文件。4) commons-io.jar:commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的。5) commons-lang.jar:ApacheCommons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。6) commons-lang3.jar:跟java.lang这个包的作用类似,CommonsLang这一组API也是提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理

5、等。7) commons-logging.jar:这个包是使用spring的必备包,用来记录程序运行时的活动日志。8) commons-pool.jar:DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCP。9) dom4j.jar:java解析xml文件。10) freemarker.jar是webwork的包,FreeMarker允许Javaservlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成HTML。11)javassist.jar:是一个开源的java字节码操作工具,主要

6、是对已经编译好的class文件进行修改和处理,这里我写了一个简单的说明,复杂的请去看的官方文档。12) mybatis.jar:使用mybatis必须要引用的包。13) mybatis-spring.jar:mybatis与spring集成所需要的包。14) ognl.jar:OGNL(ObjectGraphNavigationLanguage)是一种表达式语言,使用它可以使表达式与java对象中的getter和setter属性绑定,且一个OGNL表达式可以进行存和取两方面的操作.15) ojdbc14.jar:java连接oracle的驱动。16) spring-aop.jar:这个jar文

7、件包含在应用中使用Spring的AOP特性时所需要的类。使用基于AOP的Spring特性,如声明事务型管理(DeclarativeTransactionManagement),则需要在应用里包含这个jar包。17) spring-beans.jar:这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行InversionofControl/DependencyInjection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。18) spring-context.j

8、ar:这个jar文件为Spring核心提供了大量扩展。可以找到使用SpringApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。19) spring-core.jar:这个jar文件包含Spring框架基本的核心工具类,Spring其它组件都要使用到这个包里的类,是其它组件的核心。20) spring-expression.jar:spring的表达式语言。21) spring-jdbc.jar:这个

9、jar文件包含Spring对JDBC数据访问进行封装的所有类。22)Spring-tx.jar:提供对事务的支持。23)spring-web.jar:这个问文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。24) struts2-core.jar:struts的核心包,必须的。25) struts2-json-plugin.jar:struts2中返回和传递json格式数据的插件。26) struts2-spring-plugin.jar:s

10、trtus2与spring集成所需要的jar。27) xwork.jar:包含webwork构建所依赖的xwork类库,webwork是基于xwork的。以上所列举的jar包都是我们这次工程搭建过程中所必须使用到的,后续由于功能的扩展可能会有相应的增加。在实际工程搭建过程中,jar包往往是根据需要动态添加的,不会一成不变。2.2 项目新建当涉及到前后端数据动态交互的时候,我们往往需要新建一个动态web工程,如下图所示:1U9iu96eueH引qeiM澀牙寻工胡四驻宙牙胆寻工胡章母四驻区半山尋H-iT-ElOF工|IAJ*!4-J尹羽.py:tiaimsSTSHBfjpjij:gsinvaITM

11、.niJrijHiJa=1M4cl=jTixgF75町科询KJV上巾rcl3.呷门期rafqnnmnjddy閔FF*!ri-nnfTJr.qbpEIEHB.jM1ipjiprr油IDHTW他皿阳阀mqp:g*豹沁阴戸IThCtriatjZ+pi:jnfctiJZlStrKlS113kl361打“山口3IS1巒-打口叫祖,:用王EbbtK-毒ESI76|.y:xlllH|2|祖蓟卜知:冃冲wjnf棹逐MW1桎車VH:tJlWll.CMH!l$TDMlAFHn模干吃吐HEjl油1ZUcd4RJH祜詣,”KW!】砂ZZcd4隔iAwn-a,h-jajaplyBJHFlfgJsdr曲-7=Cl|TqJ

12、|JJriHdvCi3-,jXllilJtoOC-_BJZ-I-!.(tt-H:CIIfiA.si,-,-LdnHIKWIKUI-讯T-:.i910IJKn,冲+智曰impsris刖:i罗MTiy护珂电瓯“(网同町!I阿丄IPlfiJSO#*怕构却個!(BackNextFinishC:=LTLi:elFrojectname:+ableMLagernentProjmetlocalionUsedefataltlocatiAgoodslscrlingpointforworkingwithApacheTomcatv6.0nintime.Additionalfacetscanlaterbe单击finis

13、h按钮完成工程的新建。将我们前面章节所提到的jar包复制到lib目录下,如下图所示:-+ahi訓迅進酣hTl*库)占JH-ASWebServices+总目DejlojttientIIeecr1p+or:t=ibleM日注宅:mmmnt日JavaResoujrces+色src十巳Libraries十Bi;,JavaScriptRezcmfcesbuild一AaliCijnierLt(J&META-IHF宜&WEB-IMF0-lit曽割aopalli:iiLce-!.0.jarcomniunsdbcpl.4.jjit0e&rrinii:iriSLleiiploa.dl.2.2.jar0c&nini

14、ons_io_2.0.1.jarc&ninions_1:=LTLg2.5.jar|c&ninioni_1:=ltl33.1.j:=li_Igmniuris1qgging-111jarc&riniLirispLiol_l.6.jardom4j_l.6.1.jar翳|freem4rkr-2-3.16.jarjavassiet_3.11.0.GjL_i:=lt理亞|mytatis3.1.1.j:=lt喪rnybatis-spring-1.2.0.:=ltqstl13.0.L._i=xrojdLcl4.jar囂|spring-aop_3-2.2.RELEASE.jar豐sprirL-t.:=jLE-3

15、.2.2.FLELEASE,j=j-0spring-匚o止ext-3.2.2.FlELEASE.j:eq-2spriELg-1:ore-3.2.2.FLELEASE.j:=lt粵計spring-expression_3.2.2.RELEASE,jar|spring-jdbc_3.2.2.RELEASE,jar卑|spring-tx_3.2.Z.BELEASE.j:r亀|spring-web3-2.2.RELEASE.jar枣j|EtmtE2-core-2.2.3.|stmts2_json_plugin_2.3.IS.1.jarjetmtz2-springplugitl-2.2.3.1.jstr

16、勢xrorlcore-2.2.3.1.j:f上图即为工程成功创建后的默认目录。当然,在eclipse中,不同的视图模式,会呈现不同的目录形式,不过基本内容大同小异。上图所示的目录结构则是在JAVAEE视图模式下的。值得注意的是,在实际项目中,我们最好不要再为lib目录建立新的子目录。这样做虽然方便了jar包的分类管理,但是有可能造成工程运行时jar包无法正确加载的情况,从而出现一些莫名其妙的错误。当然,你也可以根据需要导入相应的jar包,而不是这样一次性准备好。这可能需要花费你更多的时间和精力。不过随着我们工程的增长和壮大,有可能还需要引入新的jar包。2.3 管理项目目录-二1tableM:

17、=LTL:=Lgement-!srccummurL.hy.tableM:=LTL:=Lgement-曲serveronges田田田田曰田Eh:=LfeE田dumains丄exception.-田test+田daofflm:=LTLa.Eercunfig5JT1ESystemLitr:aryjdid.E.圮21ApacheTomcatv6.0ApacheTomcatLWebAppLibr:=Lt_iee5?buildD1WebCorLtHrLt毎&META-IHFv6.D&-resoilfceEExtJSimagestableM:=LTL:=LgemEnt&appcunttolleld:让amo

18、delstoreviewApp.is新建好一个web项目后,首先需要构建适合自己使用和理解的文件目录。这些文件目录和目录里面的文件需要遵循统一的命名规则,以方便后续的维护和扩展。当然如果是在公司环境或者是经常进行项目构建的话,可以采用prototype原型的方式直接生成预订格式的目录工程,而无需每次都手动构建。我们这里采用的目录结构如下图所示:1)第1部分的目录主要存放后端的实现代码和测试代码,shares目录下主要存放后端要使用的一些实体、异常等。server包显示我们这里将后端代码分为三层,分别是dao层、manager层和action层,其中dao层主要实现与数据库的交互,manager

19、层主要实现业务逻辑的处理,action层主要实现与前端页面的交互。test包下存放的是测试代码,此处只对dao层和manager层进行测试用例的编写。+凸libpages4也web.xml-已WEB-IHF2)第2部分主要存放的是一些XML和property配置文件。3)第3部分主要用来存放前端除html文件外的js、css等代码文件,其中ExtJS文件夹下主要存放页面使用ExtJS进行开发时所必须引入的一些文件,images文件夹集中存放图片,tableManagement文件夹下存放的则是基于ExtJS工具下的一个典型的MVC应用。其中,App.js作为程序的入口,首先需要指定这个应用所需

20、要调用的controller控制器,这些控制器都定义在controller文件夹下。model文件夹下存放页面model,store文件夹下存放view中要使用的store,view存放具体页面,data存放数据。后续当我们要使用ExtJS的MVC开发模式进行前端开发时,也应该遵循这样基本的目录规范。4)第4部分的lib文件夹下存放了之前我们准备好的所有jar包,pages文件夹下将用来存放我们项目中的所有页面。当然,还有最重要的web.xml文件也存在于这个目录下,我们需根据需要对这个文件按需配置。2.4 配置使用mybatis要想使用mybatis框架来操作访问我们的数据库,那么首先得配置

21、我们所需要使用的数据源。我们这个项目中使用的数据库是oracle数据库,具体的配置信息如下图所示:1)jdbc.driverClassName:驱动类名,我们这里需要使用的是oracle数据驱动:1*0Jiva=tproj)rtiej-方住嗣曲iTMixrEkfL三+耳*|u上H+l|E限遢過-虽j亡芒4Q6:RFuJKSfiB问皿研bR环FP口jdi%ErijnrL-uJ|區lasrTf-irsei|jk.ietbjwLiwii:aszac,jdbc.driverClassName=oracle.jdbc.driver.OracleDriver;2)jdbc.url:数据源的地址,我们需要提

22、供待访问的数据库所在的ip地址和数据库名称。我们这里链接的是远程数据库,为了安全起见,做了些许处理,读者无需介怀,按实际情况进行配置即可。3)jdbc.username:待访问的数据库的用户名。5)jdbc.password:待访问的数据库的密码。其他的几个属性为可选配置,感兴趣的童鞋可以深入研究看看,这里不做赘述。不过作者想稍微啰嗦一下,以前有句俗语咋说的来着,“不怕千招会,就怕一招精”。在我们如饥似渴的吸收新知识的同时,切忌不可贪大求全,尝试着选准一个方向,仔细钻研下去,才有机会成为高手中的高手。貌似跑题了回来回来。配置好了数据源之后我们新建一个UserRole实体类,如下图所示:publ

23、ic:ITs-SERoLeC严/fflFSfiprivate31king/幅呂凶沖工lg七日Et-ringroleKamsrzzujbliaStzingactDsz-zK-anie(IuserEJmeth*userNam*toset-publicvoidsax口:BQizKurriiC兮匸忙丄iiflarblfnA)七hiSmUiBerMansuserHaD.c;Epia匸曲roleHiSjieth*raleHaiiK-togetpublicStsinggai.BQlaKamia|(z-atumj狂icKarolaUmatoaax.|ZlUEnrlfiLajK-h书Basis码LiiMa曰田i

24、virL田iu田軒曰C4xl3Eg!KrkLi3Jiitpinir击aL齿g#*.”ttLSJULhbLJbrsrF4kltdjliTf*4iii.tSQ叩*后T4Marf+gi.laLhpf-LihriHri.BC臼Iruliai匕IsKeitLwLkL占iJifiniCCijDfB6卞nbCE-j-LcVQtlucri.S.l?WK+IBvs;耳0-taM/hF/abloflwkcnnR/0hk/4koina/V34-iHolerjafi-FllpQ口cFExrlcBiKr-i.LQL口BsrsirXiti工p-LQLE1!SITh-UirkiKii-|jl2QlJEddwthLi-iWM

25、Wb口scTB-istoinlsr-ii口1J津bxMlic1Evmiini曰滸i凶出切粧工祇=V*E3-KE1田EX.Iqr.:KSUBKILS田mmrffiBjEEtCTi曲Im田uuifirid9lEtriFE&SiiMim这个实体只包含两个属性,分别是用户名称userName和roleName。一般在domain实体里,我们只提供这些实体属性的get方法和set方法,其他都不做扩展,以保持实体类的高度纯洁。接下来,我们需要配置mybatis.xml文件,如下图所示:SkrnrafiijIT!:O切=打”EalLJ!lirikC4M,il曰554=iiai|:I世電科盈“dJ一bfiar

26、rijLrspl-世TEaflaLJl-HAhEl3HT!?W印eci.nB3lu-E3lQ;Tair&?HrlliluTiCt.Jini3曹JU込LmUbrMryOUI!;L比出eTebvL唸.0CiyiUEluitrE駅A1k硼UblTiHniiHCtstiiia田L1Bn*-iP41&rEaU*aE在mybatis.xml配置文件中,我们可以对经常使用到的类定义别名,同时配置我们所需要的mapper映射文件。当然这一配置是建立在我们已经创建了一个名为UserRoleMapper.xml映射文件的基础上进行的。这些mapper映射文件定义了对于相关数据表的增删改查等具体操作,后续再做介绍。

27、在这里,一定要注意配置文件的路径。我们这里的相对路径默认是在src文件夹下的,而我们这里的配置文件统一放在了common/hy/tableManagement/config文件夹下进行管理,具体如上图所示。上面提到了UserRoleMapper.xml配置文件,接下来让我们看一下UserRoleMapper.xml中的具体内容,如下图所示:BS9siL,AcfjjrLiiuyQSUiNid诚LnOBTwirLjBH.FD3EHZZUIEH5CCCE印印比a印讪由曰圧I这是一个典型的mybatis映射文件,大部分的映射文件都长成这个样子。在这个文件里面完成对数据库的增加、删除、查询、修改等操作,

28、这里只以最简单的查询为例,其他的定义和使用都与此相似,只需遵循mybatis的通用语法即可。在这个文件的定义里需要有以下几点,值得注意:1)namespace属性定义整个mapper文件的命名空间,一般以所操作的实体类的全路径来作为命名;2) resultMap定义了实体类中的属性与数据库中字段的一一对应关系,一次定义后即可多处使用。当以上这些文件都定义完成之后,我们便可以开始构思我们dao层的代码了。如下图所示:大家可以注意到,为了方便代码的管理和维护,我们这里对类名和方法的命名比较讲究。当然这纯属个人习惯和公司规范问题,读者可根据个人的喜好自由选择简洁易懂可维护的命名规则去遵守。在我们的这

29、个DAO层接口里,暂时只定义了一个方法,用以查询用户角色基本信息。这里的方法名称和mapper文件中相应的id相同,当然,这并非强制如此。2.5 配置使用spring为了更高效的进行类间关系的管理和维护,我们引入了spring来对我们的类进行统一管理。在这里,我们主要利用spring的控制反转的特性,通过配置文件的管理,完成类与类之间的依赖注入。在完成了之前的这一系列工作之后,就可以配置我们所需要的spring.xml文件,来完成sqlSessionFactory类等的依赖和注入了,具体内容如下图所示:IfrKkkC*EjiplciB6凶Eju-1-ki.L爲QUxMifkJjrflHJtid

30、rLjMk前龄1W誉DxiEIgiLimi.uCuAKKdhuLfJbvxi血TasrlililuTisLjkfh.邱hlfiktH证JU伽tinlih-iry.i4l6O_jl匾!40(toadkaT!:1i!xi:lai*ijr|!lii.kruiril1ni=LlS由Wntnl:+i耳KTA-JWspring.xml文件会加载我们之前准备好的jdbc.properties文件和mybatis.xml文件,进行数据源的配置和注入依赖的配置。这里,我们一定要保证配置文件引入路径的正确性。对于初学者来讲,文件引入的路径是一个让人头疼的问题,不过摸索多了,尝试清楚了,自然问题就会迎刃而解了。这里

31、为了让读者查看方便,对一些文件路径进行了换行操作,在实际操作中,建议不要中途换行,否则容易引起一些意外的错误。如上图所示,我们配置了一个名为userRoleDao的bean完成dao层的注入注入的bean为sqlSessionTemplate。这个bean里定义了对于数据库的一系列操作,后续你会从代码里面看到它的强大之处。完成了这些配置之后,让我们一起看看dao层实现类的代码详情:AuthorKAoriDingyatratiirnIsdlgld3四EwnmHC7SIScerHb:_jdbaprdifiBHridiic.XsgrtsLaxaslJ些苫Lh*irFk*hiKir皿ISTFST圧|M

32、rUdCiICl.UB3EILt:KE*j!gULfiTasrlililuTiaLjkfh.為htfifaCHxiJH伽tinLLkrsrrJikL.6.4JL出IradkaTaeHhfl0(hadkaTatCai:1i!B,朮lijtjrjirkrsriMijItlA-Jff耳ratofiirdH我们可以看到,查询用户角色信息的实现类十分简单,需要定义我们所需要调用的mapper文件的namespace和相应id,同时需要将我们所需要的类注入进来。大家肯定都还有印象,sqlSessionTemplate这个bean我们之前已经在spring.xml文件中引入了。注意,这里一定要保证bean名

33、称的一致性,否则spring无法自动解析,同时需要提供被注入bean的set方法,get方法就不需要了。2.6测试用例的编写经过上述一系列的操作之后,dao层的代码即已宣告完成。可是我们如何检测我们写好的代码是否能返回我们想要的结果呢?这个就需要测试类来辅助我们进行验证了。大家应该还记得,我们已经建立了专门的目录,用以书写测试用例了,那现在让我们开始吧。倒!a遢卩出岀曲占石口町血3“(团TbPliUfcJACL回npm*耶STtLBll2+*UpMJ.paiDkagvEiiiiH口hytab2cHajiAgwwn-.toEtUEUiumf1:逊如pxrtapri口qf:ranw0rrkkwri

34、!iBea口“BaEGDiptdmua曰fflif!liai.ELarrijLguxBl世Teh-1.LJ.ii-UIJ印bjecLkbB由lai-ifiTh|JTEfiTlBLrfJ0IlhMr&9j.4Du.jKF3il:il3曰苗lx由4asiJiaPft耳耐*和,耳MhUbC-KJk=it?laKfirLiiiTlh耳Eih-ERhinomurm匕ICKfKH-&叩&23 *?ApplLCArLOFtCOilE4M.EEMa.24 -gpnukji*=an.hy-Hft.t*at25 3-a.nthorniacihaDjyiEi2a*ion.VO.127-2Q13-10-24tryIu

35、sprFcleDaoCIVseERcleDaoI2=1:&?&口*口15耳1尺口二三&1口),BfiAnaExc-apr1-2-afl)Sj5tmig-uC:;1ratu-E口ustrBnlffDa:-;从目录可以看到,在我们的test包下包含了common、dao、manager这三个子目录,分别用来存放公用的bean获取类、dao层测试用例和manager层测试用例。其中公用的bean获取类如上图所示,它实现了从相应spring配置文件中读取所需要的bean并完成实例化。接下来看具体看一下我们dao层测试类的内容和输出,如下图所示:口I*ai.bl*an*c*Mvtsra/Dnaam/il

36、r/tINeImuRlMft、tNti1mQ/DaimTFEie*MTMt.-israIrwu-vi-E-iHM.9Q-KWMnF_-b9-KK-RnnMtU4a.D.ewIIFTFHffl0:Or1西Ip5IJIJ?54Tto*-n?h冒FmfrsEErlr:一rds-EQUMiubii二已KIrM-HMH4HHU护Ear首m-r?丄5-1&SInk01耿*r-E二ITF號rhctEFLfirirMMbETZ-k匚FDpsabM:SlbiEle口aaHR口le-DaQTe-MFjiawM*nDBHBPh.吨nRCZL3V.SUHn.riDb-La/lfEhI:MI-S口hrlotgyeveH

37、ulo口_s-MnA.ZSWIlaluln肚-rrK-btbk_knJslreV-SnlhwM-Fuh5Alarm渗obe匚pr-PIrE-.aus豊*KB1回TEHTrk-HAHgLal田MrTWfflVEG呂/wrm虫hmrT-I-UXMfkJKtrMrgbt?hWnt*nt*ETT、rln*N+-*A-vapcskairenn93.aah弋fr-ak-lsHal:ll5口3TIll:-.rr-sut:dbtlzhjMQh-Fi1rIultkHFiJrtJ口bllfthlubb口宀publicaa-a3inimbHing-U-si口J一t.luaaHRJOAoiDaLOuuliHRJDJL

38、aDlloAnll-p口Mrfrp呂CQOLtcxd-ElaEi口-lhuh-c口ul-sBolevEiuM冒MaLiBrt1nCUDHfflDM.CUS-sg/l!、;*訐曾物13国魁乙-I”睁ULHE-tDi-THJjl-gggkizdn_=-:a豆一1应$兀_=一aaJZ_JdlA$li&-l_swF-ru昌日KIIol-lIAllll-lalhJIs-寓ullwQEg-nllrcliagMhllaBMHhErKl-gDrlJiaMItulupp&KIri-l.Abblrf-lhilvlnlri-lAppliErlld-DacMltJaKtpNIopi一H1LMlfnlluhill弋aH

39、-a=spninufnsrt-K口Hsc-mvtlbKl-匚勺勺口Ilct-cl-!KldaitErxnl.s3:flligt-r-cl口CCITtlbKrtM1GCIBe-MOPWRQMm一孤OMlaulwQEg-nend.口gHIHaluwQnlc-yllDlc!HIni:Qt:YmlsnLB0:allDaril,-T.l*-DaSDDAdJat:1G1I0PM*-MWSHIrlkaLnn.-B也.31.|!-口口fhul-lfnnlhMTJt.a-!ounnai【nEnsual%-h.Y.llbliabn-Hui*nri-、n口2olu3llu0115;Dm”53c-n-J-u划nH-口

40、-UH-s-rtoon-npr-SHa!urfsn-nrt-IJHclpe-HtieuIamalH加uppollctloamdI卫HM;HOEH.虫dEDPQMHpIJ口fllrtH-,l-J“HzrHDtDU-RP-u.-MaabDHK-M-uz-r.915i0EBI530n4-u巧ni口ql-hHaule-n齐-40-口a-l-h03ony-u-QPPDH-t-Defa/ULltftHlat-akbLe-BMJlFaJEt-DEHt.wtalillgrtgrli.rli.DgDi启llarlDDbin.Qr=giDpz*l-I-Dgl-iiz*una蓉Kle,b口olrlkdri-QRyb

41、UPPDZ*HDaru:.rlI.l,=Ms-腔兵、Hsisdao回7曲亠二耳M畑罟冊。1117滉曲亠_何冊耳dfr罟崖a秣斗莎血巨、合冊飙来越罟5H、凹壬aaaunir*岀胡育MaHS、合-HSI耳引-1一:WebContentglGMETA-I1IFrheoiji-i:esEl凸WEE-inQ-&libQ-Dpalliaime一I.D.jarccirTiTiL-ns-ilbcp-l.4.j:irccirTiTiijnE-ti1eupload.-1-2.2.jar?cijmTiLrLE_io_2.0.1.jar*CCTTiTi:Tl5l:=LTLg2吁.j=Lt_commons_Laiig3

42、_3.1.jarcommons-logging-l.1.1.jarcCirTiTiL-ns-pool-1.Fi.jii?icim-lj-1.E.1.j:=lt:jfreerTi:=Lfkt:r-2.3.IE.j:迂卓耳iavasist-3Lljarggjimit-4.11.jar1Hmybatis_3.1.1.jarmybatis-Epring-1.2.CLjar# ogr丄-3.0.1.j:=lt* oj-lbcl4.j:=ltjsprLrifr-aop-3.2.2RELEASE,j:=:api-i.ng-be:xrLS_3.2,2.RELEASE,j?|eprlng-cORtest_3.2

43、.2-RELEASE,spring-core_3.2.2.RELEASE,jaisprn旷53-rprEEic.n-3.2.2.EELE圈spring-jdbc-3.2.2.RELEASE,jspring-tx_3.2.2.FlELEASE.j:=Lt-spring-web-3.2.2.RELEASE,jar幽struts2-core-Z.2.3.1.jarEtrutE2_jEon_pliLgLR_2.3.15.1.strutE2Eprinjlugin2.2.3.1零xworl.:ore-2.2.3.L.jh十pagzes现在可以看到,我们的web工程lib目录下增加了一位新成员。在之前的篇幅

44、中,我们也提到过,我们的工程lib目录会随着我们开发的深入而不断壮大。在进行junit单元测试之前,我们需要提供一个通用的方法,允许用户根据bean的名字获取到相应bean的实例,如下图所示:Etg口口口丄U-JKFS.,.JiOieFrqfarti.oi無mLEfTi鼻gdkL上mtratm.El曰5Qiliia3iHilbrr&?rfhTaaI:.jm.LED*田GKBEB-g;心1鼻伸HlJHiS-iflonHf圧JUSprLwUbi-iryI丿衣EU/jl卜,TdiMHii.itD如tadhiTrtKiTxiila%ifl?Librcriwn士IdlLIB进朮WsrH出ItKih-EI

45、TElj_narsrena出汾氐5庄i(jisHpini9ItM-tfltfikCtMfil宫耳H3fUBistrQbir耳皿3i匕wo承!1出耳CiddTii!亡TIW&TlM-iflH,ik4ahi|jE宙亡rtl-Cfli+rij!lTiC4Fi上图所示的代码只是为获取指定名称的bean实例提供一个借鉴,各位可以有其他的实现方式。在这里需要注意一下代码中泛型的使用方式。当我们获取到某个bean时,我们并没有办法事先知道这个bean的实例类型,只知道我们想要的是什么类型,就能通过getBean方法给我们返回到相应的bean,因此做了上图所示的定义。接下来编写测试用例就成为一件很简单的事情了

46、。junit之所以强大,是因为我们在编写实际的测试用例时,不需要遵循以往编写测试用例诸多的命名规范,而只需要在相应的方法前加上相应的annotation注解即可,具体代码如下图所示:这些注解很容易理解,这里不做赘述。注意我们所编写的测试用例一定要继承自我们的TestCase类。有了这句强调,大家就应该知道下图所示的测试用例跑不起来的原因了吧?因为一开始我们的测试类没有继承TestCase。上帝呀,确实是很不可思议的错误!然而很多时候,困恼我们很久很久的大麻烦就是这些看似很简单的小细节,大家都是程序员,这一点应该深有体会吧。=JaiLraDa.o口fAZ?foj烬3Beforecpujbli-c

47、:sarlpOUle-wsEsc4pci-=-31-r:ujrriS(?2ffuffcSpEin-jTestHelps-E(-jetBean(VseEHcleDaool-a.s;41ifCusAi-Ro2fiZ;fD=null)Eymt-m.-v7.pzizitliLi:;131中:Softerpuli-cv&idUie-iiwsxzQpci-z-n.5Q-3Testpujbli-cvoid!scUs-aK-l-aLifieO2List-UseEHcleuseEHcleList口STrSoJffStfcmt0,匸FSyscam.dut.psIhtIn(uflaHjolaiLiat.gwt(D-

48、).1JV:SrkkC4-H占;jumEkaJ口ESKahJcuft.U3lirlE矗EHH:LflFuliria0.ijdriiiJUlibMrlldJiE-i.|Fwmn*ni4|3DLlIhmivdTvriaIFXmmrAJni丨*IW(Wi1銅L%i.Eiali3iiEliEZfEi1切OOO)测试用例编写完成之后,要运行它就变得轻而易举了。在需要运行测试的方法上单击鼠标右键,选择runatJunitTest,即可测试你的相应方法是否正确,具体如下图所示:0TestpuJblicvoiduseR-oleLieSvsc-wio口匸0上inrlastiiR-s-lteBtGetUB&rRo

49、l&LieAl就5hiImwsSsrFsr屯EBiapiEt1etst讯ncalEIijdr:r+dAfsarMALEk+-Jct.iisifemiTE.:.ivii.5i:ntu:iuq耳ion:/gt;丄UuC3-sElcLeCi3cT-E-5t-iij-iTdQpa-okaae-anmDnhytabl-rftana-j-en.en.ttestdaoAuthor茎呂hQiya、巴fiYrsrsion.VtJ.lEDSl恤2011-10-29PHEizgar&HiiljirjrrtJAU3rfk-l-iDua3rLj.讯nDKLsrviJrXiOj-D3rpaUmnsFE!OrrTiklLi

50、LurM-EkrSli*in|fa*dlpublic-alafifi口saRaLaria.or!aae鸟工已曲:祖厲Tm:aT:0.iQ$privatestatic:ICflarSo-laEac-口j-3-.-.Bcfarc-puLbliooi.d.set-dpthrovBEsc3ffrKGiffi7G-EpringTestH-eiCuserBalePa0nullIiSystemc-utprnt1口田兩BJ*iwIjsowIst*c-ljQ”brHiCtrWDA-fnarpuilacvoidtaarD-!3WD11thrtiWECiurltILtlCVSIL日伽阳丁CbhGiiliflcjHw

51、皿+*CUHVTfliBiMrtH-iClifCfcirl+TajiiriSiu$fcsIl3ILl+E+11./CtiBXCtrl3E看,我们得到了与之前编写非专业测试用例运行同样的结果,不过整个过程相比之前简单很多,扩展性也更强。为了使整个测试过程更加易于管理,我们这里人为规定了一些有关测试用例的命名规范,譬如被测试方法名必须以test开头等等。当然,这是因人因项目而异的,你也可以根据自己的偏好来制定命名规范。2.7新建和启动server在完成了之前DAO层代码的编写和测试之后,我们就可以根据类似的编写逻辑完成manager层代码的编写。由于本文档介绍的只是一个简单的搭建实例,因此在man

52、ager层并没有进行很复杂的逻辑校验,所以代码格式和结构与dao层基本一致。注意,在编写manager层实现代码之前,要将所引用的dao层实例注入spring文件,如下图所示:sFrrkc*Ika.-ZJrph-+E-smMm:m磴I%H.E由SIS?*Ld*lnBUmnLkT启KSSKEL.:VHFr-s-H-pd届山lEirsipEl.feLhMrEBlslwl一sal田EiTFmrElsXE-.*TraMnaEto.E&?kefEBsH_5M_-+阳qfMhm-ffliv-匕+阳abmr田r-ss丄审R_KAW.m田奇一咅t&-to瓷EmR-IPSff広ERStrlHTb厨fbiq*.V

53、射iMH師Hfcfcsni-iREB-BTS亠亍iJMikrhc-njs*”iteKirHfclLta.HErsM3i卜i卜14LaJ2HO诚B76Ssh&s3.5HGH21?pSAh&h-bftN.hnobHsrishfr-fisd-h.-BOH口xaclhela他讨理x讨、SN-u-c-lshbebfcla0-MiscihU.Dh-bMK.S.h.Kft.N.h&E-vss354-BshKalCTk-.-pbsaQ.liIDh.lJT.f.rt.grrthltcp-Qzv/QI(ib-gls、lto.pIJIt1hnl7lhc:ipl3日MafLAvA-1ftH&al:秒So匸Rn山4IV

54、Aaa口d-aMt-flnQperty-PLacehQZLdall,Qa0t-5.a口._lonHHahxhJfxnbBieflahlaHenft-、AbQ口POHdrtlbubciLlEnDfilLKIuH謁0Eg,bpdclJlIGLnptaES-M-dbraJStaERh_bEnb&CH-hfl-a-d*lIJIt-l1t)ylmTcthcd】n-uft-ivApx-Dpa-RnyAPHOPelcryAPI-Dpa-RnTAPHOPelcryApz-DpaRnyApHpe-HyAPHDP9代riyESN3&SIESH3&SIESHESHATIRl$ulull-HnFEnboryEla“口!VKmIAbEill口POMnHVUUH-4H.EhRb_hMbhnbNmDAPHOPSIIBYH.MWl3lT3l、vuimAnrD口V36AbEi口hd=hrylsbshhf&ZT谥-E巧x电J-APHCT*!lfT3.HSIw兵、nB罪spring+mybatis罟商船礦训料ylB、i曲亠二建寒s-H、腔

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!