Spring基础教程.docx
- 文档编号:10046305
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:47
- 大小:1.38MB
Spring基础教程.docx
《Spring基础教程.docx》由会员分享,可在线阅读,更多相关《Spring基础教程.docx(47页珍藏版)》请在冰豆网上搜索。
Spring基础教程
Spring快速入门教程
──开发你的第一个Spring程序翻译整理:
HantsyBai
本章学习用strutsMVC框架作前端,Spring做中间层,Hibernate作后端来开发一个简单的Spring应用程序。
在第4章将使用SpringMVC框架对它进行重构。
本章包含以下内容:
编写功能性测试。
配置Hibernate和Transaction。
载入Spring的applicationContext.xml文件。
设置业务代理(businessdelegates)和DAO的依赖性。
把spring写入Struts程序。
概述
你将会创建一个简单的程序完成最基本的CRUD(Create,Retrieve,Update和Delete)操作。
这个程序叫MyUsers,作为本书的样例。
这是一个3层架构的web程序,通过一个Action来调用业务代理,再通过它来回调DAO类。
下面的流程图表示了MyUsers是如何工作的。
数字表明了流程的先后顺序,从web层(UserAction)到中间层(UserManager),再到数据层(UserDAO),然后返回。
鉴于大多数读者都比较熟悉struts,本程序采用它作为MVC框架。
Spring的魅力在于它宣称式的事务处理,依懒性的绑定和持久性的支持。
第4章中将用Spring框架对它进行重构。
接下来你会进行以下几个步骤:
1.下载Struts和Spring。
2.创建项目目录和antBuild文件。
3.为持久层创建一个单元测试(unittests)。
4.配置Hibernate和Spring。
5.编写HIbernateDAO的实现。
6.进行单元测试,通过DAO验证CRUD。
7.创建一个Manager来声明事务处理。
8.为strutsAction编写测试程序。
9.为web层创建一个Action和model(DynaActionForm)。
10.进行单元测试,通过Action验证CRUD。
11.创建JSP页面,以通过浏览器来进行CRUD操作。
12.通过浏览器来验证JSP页面的功能。
13.用velocity模板替换JSP页面。
14.使用CommonsValidator添加验证。
下载Struts和Spring
1.下载安装以下组件:
•JDK1.4.2(或以上)
•Tomcat5.0+
•Ant1.6.1+
2.设置以下环境变量:
•JAVA_HOME
•ANT_HOME
•CATALINA_HOME
3.把以下路径添加到PATH中:
•JAVA_HOME/bin
•ANT_HOME/bin
•CATALINA_HOME/bin
为了开发基于java的web项目,开发人员必须事先下载必需的jars,建好开发目录结构和antbuild文件。
对于单一的struts项目,可以利用struts中现成的struts-blank.war。
对于基于SpringMVC框架的项目,可以用Spring中的webapp-minimal.war。
这只为开发作准备,两者都没有进行struts-spring集成,也没有考虑单元测试。
为此,我们为读者准备了Equinox。
Equinox为开发Struts-spring式的程序提供一个基本框架。
它已经定义好了目录结构,和antbuild文件(针对compiling,deploying,testing),并且提供了struts,spring,Hibernate开发要用到的jars文件。
Equinox中大部分目录结构和antbuild文件来自我的开源项目──AppFuse。
可以说,Equinox是一个简化的AppFuse,它在最小配置情况下,为快速web开发提供了便利。
由于Equinox源于AppFuse,所以在包名,数据库名,及其它地方都找到它的影子。
这是为让你从基于Equinox的程序过渡到更为复杂的AppFuse。
从上下载Equinox,解压到一个合适的位置,开始
准备MyUsers的开发。
创建项目目录和antbuild文件
为了设置初始的目录结构,把下载的Equinox解压到硬盘。
建议windows用户把项目放在C:
\Source,Unix/Linux用户放在~/dev(译注:
在当前用户目录建一个dev目录)中。
windows用户可以设置一个HOME环境变量,值为C:
\Source。
最简单的方法是把Equinox解压到你的喜欢的地方,进入equinox目录,运行antnew-Dapp.anme=myusers。
tips:
在windows使用cygwin(www.cygwin.org)就可以像Unix/Linux系统一样使用正斜杠,本书所有路径均采用正斜杠。
其它使用反斜杠系统(如windows中命令行窗口)的用户请作相应的调整。
现在MyUsers程序已经有如下的目录结构:
Equinox包含一个简单而功能强大的build.xml,它可以用ant来进行编译,布署,和测试。
ant中已经定义好targets,在equinox运行ant,将看到如下内容:
[echo]Availabletargetsare:
[echo]compile-->CompileallJavafiles
[echo]war-->PackageasWARfile
[echo]deploy-->Deployapplicationasdirectory[echo]deploywar-->DeployapplicationasaWARfile[echo]install-->InstallapplicationinTomcat[echo]remove-->RemoveapplicationfromTomcat[echo]reload-->ReloadapplicationinTomcat
[echo]start-->StartTomcatapplication[echo]stop-->StopTomcatapplication[echo]list-->ListTomcatapplications
[echo]clean-->DeletescompiledclassesandWAR
[echo]new-->Createsanewproject
Equinox支持tomcat的anttasks(任务)。
这些已经集成在Equinox中,解讲一下如何进行集成的有助于理解它们的工作原理。
Tomcat和ant
tomcat中定义了一组任务,可以通过Manager来安装(install),删除(remove),重载(reload)webapps。
要使用这些任务,可以把所有的定义写在一个属性文件中。
在Eqinox的根目录下,有一个名为tomcatTasks.properties包含如下内容。
deploy=org.apache.catalina.ant.DeployTaskundeploy=org.apache.catalina.ant.UndeployTaskremove=org.apache.catalina.ant.RemoveTaskreload=org.apache.catalina.ant.ReloadTaskstart=org.apache.catalina.ant.StartTaskstop=org.apache.catalina.ant.StopTasklist=org.apache.catalina.ant.ListTask
在build.xml定义一些任务来安装,删除,重新载入应用程序。
--TomcatAntTasks-->
depends="war"> password="${tomcat.manager.password}"path="/${webapp.name}"war="file: $ {dist.dir}/${webapp.name}.war"/> password="${tomcat.manager.password}"path="/${webapp.name}"/> password="${tomcat.manager.password}"path="/${webapp.name}"/> password="${tomcat.manager.password}"path="/${webapp.name}"/> password="${tomcat.manager.password}"path="/${webapp.name}"/> 在上面列出的target中,必须定义一些${tomcat.*}变量。 在根目录下有一个 build.properties默认定义如下: #PropertiesforTomcatServertomcat.manager.url=http: //localhost: 8080/managertomcat.manager.username=admintomcat.manager.password=admin 确保admin用户可以访问Manager应用,打开$CATALINA_HOME/conf/tomcat-users.xml中是否存在下面一行。 如果不存在,请自己添加。 注意,roles属性可能是一个以逗号(“,”)隔开的系列。 为了测试所有修改,保存所有文件,启动tomcat。 从命令行中进行myusers目录,运 行antlist,可以看到tomcatserver上运行的应用程序。 好了,现在运行antdeploy来安装MyUsers。 打开浏览器,在地址栏中输入 http: //localhost: 8080/myusers,出现如图2.4的“EquinoxWelcome”画面。 下一节,将写一个User对象和一个维护其持久性的HibernateDAO对象。 用Sping来 管理DAO类及其依赖性。 最会写一个业务代理,用到AOP和声明式事务处理。 为持久层编写单元测试 在myUsers程序,使用Hibernat作为持久层。 Hinbernate是一个O/R映像框架,用来关联java对象和数据库中的表(tables)。 它使得对象的CRUD操作变得非常简单,Spring结合了Hibernate变得更加容易。 从Hibernate转向Spring+Hibernate会减少75%的代码。 这主要是因为,ServiceLocater和一些DAOFactory类的废弃,spring的实时异常代替了Hibernate的检测式的异常。 写一个单元测试有助于规范UserDAO接口。 为UserDAO写一个JUint测试程序,要完成以下几步: 1.在test/org/appfuse/dao下新建一个UserDAOTest.java类。 它继承了同一个包中的BaseDAOTestCase,其父类初始化了Spring的ApplictionContext(来自web/WEB-INF/applictionContext.xml),以下是JUnit测试的代码。 packageorg.appfuse.dao; //useyourIDEtohandleimports publicclassUserDAOTestextendsBaseDAOTestCase{ privateUseruser=null; privateUserDAOdao=null; protectedvoidsetUp()throwsException{ log=LogFactory.getLog(UserDAOTest.class); dao=(UserDAO)ctx.getBean("userDAO"); } protectedvoidtearDown()throwsException{ dao=null; } publicstaticvoidmain(String[]args){ junit.textui.TestRunner.run(UserDAOTest.class); } } 这个类还不能编译,因为还没有UserDAO接口。 在这之前,来写一些来验证User的 CRUD操作。 2.为UserDAOTest类添加testSave和testAddAndRemove方法,如下: publicvoidtestSaveUser()throwsException{ user=newUser();user.setFirstName("Rod");user.setLastName("Johnson");dao.saveUser(user); assertTrue("primarykeyassigned",user.getId()! =null); log.info(user); assertTrue(user.getFirstName()! =null); } publicvoidtestAddAndRemoveUser()throwsException{ user=newUser();user.setFirstName("Bill");user.setLastName("Joy");dao.saveUser(user);assertTrue(user.getId()! =null); assertTrue(user.getFirstName().equals("Bill")); if(log.isDebugEnabled()){ log.debug("removinguser..."); }dao.removeUser(user.getId());assertNull(dao.getUser(user.getId())); } 从这些方法中可以看到,你需要在UserDAO创建以下方法: saveUser(User)removeUser(Long)getUser(Long) getUsers()(返回数据库的所有用户) 3.在src/org/appfuse/dao目录下建一个名为UserDAO.java类的,输入以下代码: tips: 如果你使用eclipse,idea之类的IDE,左边会出现在一个灯泡,提示类不存在,可以 即时创建。 packageorg.appfuse.dao; //useyourIDEtohandleimports publicinterfaceUserDAOextendsDAO{ publicListgetUsers(); publicUsergetUser(LonguserId); publicvoidsaveUser(Useruser); publicvoidremoveUser(LonguserId); } 为了UserDAO.java,UserDAOTest.java编译通过,还要建一个User.java类。 4.在src/org/appfuse/model下建一个User.java文件,添加几个成员变量: id,firstName,lastName,如下。 packageorg.appfuse.model; publicclassUserextendsBaseObject{ privateLongid; privateStringfirstName; privateStringlastName; /*用你熟悉的IDE来生成getters和setters,Eclipse中右击>Source->GenerateGettersandSetters*/ } 注意,你继承了BaseObject类,它包含几个有用的方法: toString(),equlas(),hasCode(),后两个是Hibernate必须的。 建好User后,用IDE打开UserDAO和UserDAOTest两个类,优化导入。 配置Hibernate和Spring 现在已经有了POJO(PlainOldJavaObject),写一个映像文件Hibernate就可能维护它。 1.在org/appfuse/model中新建一个名为User.hbm.xml文件,内容如下: xmlversion="1.0"encoding="UTF-8"? > DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD2.0//EN"" 2.在web/WEB-INF/下的applictionContext.xml中添加映像。 打开文件,找到 在applictionContext.xml中,你可以看到数据库是怎幺工作的,Hibernate和Spring是如何协作的。 Eqinox会使用名为db/appfuse的HSQL数据库。 它将在你的ant“db”目录下创建,详细配置在“HowSpringIsConfiguredinEquinox”一节中描述。 3.运行antdeployreload(Tomcat正在运行),在Tomcat控制台的日志中可以看到,数据表正在创建。 INFO-SchemaExport.execute(98)|Runninghbm2ddlschemaexport INFO-SchemaExport.execute(117)|exportinggeneratedschematodatabase INFO-ConnectionProviderFactory.newConnectionProvider(53)|Initializingconnection provider: org.springframework.orm.hibernate.LocalDataSourceConnectionProvider INFO-DriverManagerDataSource.ge
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spring 基础教程