Spring基础学习知识教育教案.doc

上传人:小** 文档编号:2540444 上传时间:2020-04-19 格式:DOC 页数:41 大小:1.79MB
返回 下载 相关 举报
Spring基础学习知识教育教案.doc_第1页
第1页 / 共41页
Spring基础学习知识教育教案.doc_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《Spring基础学习知识教育教案.doc》由会员分享,可在线阅读,更多相关《Spring基础学习知识教育教案.doc(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-*Spring 快速入门教程开发你的第一个 Spring 程序 翻译整理:Hantsy Bai本章学习用 struts MVC 框架作前端,Spring 做中间层,Hibernate 作后端来开发一个 简单的 Spring 应用程序。在第 4 章将使用 Spring MVC 框架对它进行重构。本章包含以下内容: 编写功能性测试。 配置 Hibernate 和 Transaction。 载入 Spring 的 applicationContext.xml 文件。 设置业务代理(business delegates)和 DAO 的依赖性。 把 spring 写入 Struts 程序。概述 你将会

2、创建一个简单的程序完成最基本的 CRUD(Create, Retrieve, Update 和 Delete) 操作。这个程序叫 MyUsers,作为本书的样例。这是一个 3 层架构的 web 程序,通过一个 Action 来调用业务代理,再通过它来回调 DAO 类。下面的流程图表示了 MyUsers 是如何工 作的。数字表明了流程的先后顺序,从 web 层(UserAction)到中间层(UserManager),再到 数据层(UserDAO),然后返回。鉴于大多数读者都比较熟悉 struts,本程序采用它作为 MVC 框架。Spring 的魅力在于 它宣称式的事务处理,依懒性的绑定和持久性

3、的支持。第 4 章中将用 Spring 框架对它进行 重构。接下来你会进行以下几个步骤:1. 下载 Struts 和 Spring。2. 创建项目目录和 antBuild 文件。3. 为持久层创建一个单元测试(unit tests)。4. 配置 Hibernate 和 Spring。5. 编写 HIbernate DAO 的实现。6. 进行单元测试,通过 DAO 验证 CRUD。7. 创建一个 Manager 来声明事务处理。8. 为 struts Action 编写测试程序。9. 为 web 层创建一个 Action 和 model(DynaActionForm)。10.进行单元测试,通过

4、Action 验证 CRUD。11.创建 JSP 页面,以通过浏览器来进行 CRUD 操作。12.通过浏览器来验证 JSP 页面的功能。13.用 velocity 模板替换 JSP 页面。14.使用 Commons Validator 添加验证。下载 Struts 和 Spring 1.下载安装以下组件: JDK1.4.2(或以上) Tomcat5.0+ Ant 1.6.1+2.设置以下环境变量: JAVA_HOME ANT_HOME CATALINA_HOME3.把以下路径添加到 PATH 中: JAVA_HOME/bin ANT_HOME/bin CATALINA_HOME/bin为了开发

5、基于 java 的 web 项目,开发人员必须事先下载必需的 jars,建好开发目录结 构和 ant build 文件。对于单一的 struts 项目,可以利用 struts 中现成的 struts- blank.war。对于基于 Spring MVC 框架的项目,可以用 Spring 中的 webapp-minimal.war。 这只为开发作准备,两者都没有进行 struts-spring 集成,也没有考虑单元测试。为此,我 们为读者准备了 Equinox。Equinox 为开发 Struts-spring 式的程序提供一个基本框架。它已经定义好了目录结构, 和 ant build 文件(针

6、对 compiling,deploying,testing),并且提供了 struts, spring, Hibernate 开发要用到的 jars 文件。Equinox 中大部分目录结构和 ant build 文件来自我的 开源项目AppFuse。可以说,Equinox 是一个简化的 AppFuse,它在最小配置情况下,为 快速 web 开发提供了便利。由于 Equinox 源于 AppFuse,所以在包名,数据库名,及其它地方 都找到它的影子。这是为让你从基于 Equinox 的程序过渡到更为复杂的 AppFuse。从 http:/ 上下载 Equinox,解压到一个合适的位置,开始准备

7、MyUsers 的开发。创建项目目录和 ant build 文件 为了设置初始的目录结构,把下载的 Equinox 解压到硬盘。建议 windows 用户把项目放 在 C:Source,Unix/Linux 用户放在/dev(译注:在当前用户目录建一个 dev 目录)中。 windows 用户可以设置一个 HOME 环境变量,值为 C:Source。最简单的方法是把 Equinox 解 压到你的喜欢的地方,进入 equinox 目录,运行 ant new -Dapp.anme=myusers。tips:在 windows 使用 cygwin(www.cygwin.org)就可以像 Unix/L

8、inux 系统一样使用正 斜杠,本书所有路径均采用正斜杠。其它使用反斜杠系统(如 windows 中命令行窗口)的用户 请作相应的调整。现在 MyUsers 程序已经有如下的目录结构:Equinox 包含一个简单而功能强大的 build.xml,它可以用 ant 来进行编译,布署,和测 试。ant 中已经定义好 targets,在 equinox 运行 ant,将看到如下内容:echo Available targets are:echo compile - Compile all Java filesecho war - Package as WAR fileecho deploy - De

9、ploy application as directory echo deploywar - Deploy application as a WAR file echo install - Install application in Tomcat echo remove - Remove application from Tomcat echo reload - Reload application in Tomcatecho start - Start Tomcat application echo stop - Stop Tomcat application echo list - Li

10、st Tomcat applicationsecho clean - Deletes compiled classes and WARecho new - Creates a new projectEquinox 支持 tomcat 的 ant tasks(任务)。这些已经集成在 Equinox 中,解讲一下如何 进行集成的有助于理解它们的工作原理。Tomcat 和 anttomcat 中定义了一组任务,可以通过 Manager 来安装(install),删除(remove),重载 (reload)webapps。要使用这些任务,可以把所有的定义写在一个属性文件中。在 Eqinox 的 根目录

11、下,有一个名为 tomcatTasks.properties 包含如下内容。deploy=org.apache.catalina.ant.DeployTask undeploy=org.apache.catalina.ant.UndeployTask remove=org.apache.catalina.ant.RemoveTask reload=org.apache.catalina.ant.ReloadTask start=org.apache.catalina.ant.StartTask stop=org.apache.catalina.ant.StopTask list=org.apa

12、che.catalina.ant.ListTask在 build.xml 定义一些任务来安装,删除,重新载入应用程序。 在上面列出的 target 中,必须定义一些$tomcat.*变量。在根目录下有一个build.properties 默认定义如下:# Properties for Tomcat Server tomcat.manager.url=http:/localhost:8080/manager tomcat.manager.username=admin tomcat.manager.password=admin确保 admin 用户可以访问 Manager 应用,打开$CATALI

13、NA_HOME/conf/tomcat- users.xml 中是否存在下面一行。如果不存在,请自己添加。注意,roles 属性可能是一个 以逗号(“,”)隔开的系列。为了测试所有修改,保存所有文件,启动 tomcat。从命令行中进行 myusers 目录,运行 ant list,可以看到 tomcat server 上运行的应用程序。好了,现在运行 ant deploy 来安装 MyUsers。打开浏览器,在地址栏中输入http:/localhost:8080/myusers,出现如图 2.4 的“Equinox Welcome”画面。下一节,将写一个 User 对象和一个维护其持久性的 H

14、ibernate DAO 对象。用 Sping 来管理 DAO 类及其依赖性。最会写一个业务代理,用到 AOP 和声明式事务处理。为持久层编写单元测试 在 myUsers 程序,使用 Hibernat 作为持久层。Hinbernate 是一个 O/R 映像框架,用来关 联 java 对象和数据库中的表(tables)。它使得对象的 CRUD 操作变得非常简单,Spring 结合了 Hibernate 变得更加容易。从 Hibernate 转向 Spring+Hibernate 会减少 75%的代码。这主要是因 为,ServiceLocater 和一些 DAOFactory 类的废弃,sprin

15、g 的实时异常代替了 Hibernate 的检测 式的异常。写一个单元测试有助于规范 UserDAO 接口。为 UserDAO 写一个 JUint 测试程序,要完 成以下几步:1.在 test/org/appfuse/dao 下新建一个 UserDAOTest.java 类。它继承了同一个包中的 BaseDAOTestCase,其父类初始化了 Spring 的 ApplictionContext(来自 web/WEB- INF/applictionContext.xml),以下是 JUnit 测试的代码。package org.appfuse.dao;/ use your IDE to han

16、dle importspublic class UserDAOTest extends BaseDAOTestCase private User user = null;private UserDAO dao = null;protected void setUp() throws Exception log = LogFactory.getLog(UserDAOTest.class);dao = (UserDAO) ctx.getBean(userDAO);protected void tearDown() throws Exception dao = null;public static

17、void main(String args) junit.textui.TestRunner.run(UserDAOTest.class);这个类还不能编译,因为还没有 UserDAO 接口。在这之前,来写一些来验证 User 的CRUD 操作。2.为 UserDAOTest 类添加 testSave 和 testAddAndRemove 方法,如下:public void testSaveUser() throws Exception user = new User(); user.setFirstName(Rod); user.setLastName(Johnson); dao.saveU

18、ser(user);assertTrue(primary key assigned, user.getId() != null);log.info(user);assertTrue(user.getFirstName() != null);public void testAddAndRemoveUser() throws Exception user = new User(); user.setFirstName(Bill); user.setLastName(Joy); dao.saveUser(user); assertTrue(user.getId() != null);assertTr

19、ue(user.getFirstName().equals(Bill);if (log.isDebugEnabled() log.debug(removing user.); dao.removeUser(user.getId(); assertNull(dao.getUser(user.getId();从这些方法中可以看到,你需要在 UserDAO 创建以下方法:saveUser(User) removeUser(Long) getUser(Long)getUsers() (返回数据库的所有用户)3.在 src/org/appfuse/dao 目录下建一个名为 UserDAO.java 类的

20、,输入以下代码:tips:如果你使用 eclipse,idea 之类的 IDE,左边会出现在一个灯泡,提示类不存在,可以即时创建。package org.appfuse.dao;/ use your IDE to handle importspublic interface UserDAO extends DAO public List getUsers();public User getUser(Long userId);public void saveUser(User user);public void removeUser(Long userId);为了 UserDAO.java,Us

21、erDAOTest.java 编译通过,还要建一个 User.java 类。4.在 src/org/appfuse/model 下建一个 User.java 文件,添加几个成员变量:id,firstName,lastName,如下。package org.appfuse.model;public class User extends BaseObject private Long id;private String firstName;private String lastName;/* 用你熟悉的 IDE 来生成 getters 和 setters,Eclipse 中右击 Source -

22、Generate Getters and Setters */注意,你继承了 BaseObject 类,它包含几个有用的方法:toString(),equlas(),hasCode(), 后两个是 Hibernate 必须的。建好 User 后,用 IDE 打开 UserDAO 和 UserDAOTest 两个类, 优化导入。配置 Hibernate 和 Spring 现在已经有了 POJO(Plain Old Java Object),写一个映像文件 Hibernate 就可能维护它。1.在 org/appfuse/model 中新建一个名为 User.hbm.xml 文件,内容如下:2.在

23、 web/WEB-INF/下的 applictionContext.xml 中添加映像。打开文件,找到,改成如下:org/appfuse/model/User.hbm.xml在 applictionContext.xml 中,你可以看到数据库是怎幺工作的,Hibernate 和 Spring 是如 何协作的。Eqinox 会使用名为 db/appfuse 的 HSQL 数据库。它将在你的 ant “db”目录下创建, 详细配置在“How Spring Is Configured in Equinox ”一节中描述。3.运行 ant deploy reload(Tomcat 正在运行),在 To

24、mcat 控制台的日志中可以看到,数据 表正在创建。INFO - SchemaExport.execute(98) | Running hbm2ddl schema exportINFO - SchemaExport.execute(117) | exporting generated schema to databaseINFO - ConnectionProviderFactory.newConnectionProvider(53) | Initializing connectionprovider: org.springframework.orm.hibernate.LocalDataS

25、ourceConnectionProviderINFO - DriverManagerDataSource.getConnectionFromDriverManager(140) | Creating newJDBC connection to jdbc:hsqldb:db/appfuseINFO - SchemaExport.execute(160) | schema export completeTip: 如果你想看到更多或更少的日志,修改web/WEB-INF/ classes/log4j.xml 的设置。4.为了验证数据库已经建好,运行 ant browser 启动 hsql cons

26、ole 。你会看到如的 HSQL Database Manager。Equinox 中 spring 是怎幺配置的使用 Spring 配置任何基于 j2ee 的 web 程序都很简单。至少,你简单的添加 Spring 的ContextLoaderListener 到你的 web.xml 中。org.springframework.web.context.ContextLoaderListener这是一个 ServletContextListener,它会在启动 web 应用进行初始化。默认情况下,它会查找 web/WEB-INF/applictionContext.xml 文件,你可以指定名为

27、 contextConfigLocation 的元素来进行修改,例如:contextConfigLocation/WEB-INF/sampleContext.xml元素可以是以空格或是逗号隔开的一系列路径。在 Equnox 中,Spring的配置使用了这个 Listener 和默认的 contextConfigLocation。那幺,Spring 怎幺知道 Hibernate 的存在?这就 Spring 的魅力所在,它让依赖性的绑定 变得非常简单。请参阅 applicationContext.xml 的全部内容:org.hsqldb.jdbcDriverjdbc:hsqldb:db/appfu

28、sesa org/appfuse/model/User.hbm.xml net.sf.hibernate.dialect.HSQLDialect create第一 bean 代表 HSQL 数据库,Spring 仅仅是调用 LocalSessionFactoryBeanr 的 setDataSource(DataSource)使之工作。如果你想用 JNDI DataSource 替换,可以 bean 的定义改 成类似下面的几行:java:comp/env/jdbc/appfusehibernate.hbm2ddl.auto 属性在 sessionFactory 定义中,这个属性是为了在应用启动

29、时自 动创建表,也可能是 update 或 create-drop。最后一个 bean 是 transactionManager(你也可以使用 JTA transaction),在处理跨越两个数据库的分布式的事务处理中尤其重要。如果你想使用 jta transaction manager ,将此 bean 的class 属性改成org.springframework.transaction.jta.JtaTransactionManager下面实现 UserDAO 类。用 hibernate 实现 UserDAO 为了实现 Hibernate UserDAO,需要完成以下几步:1.在 src/

30、org/appfuse/dao/hibernate(你要新建这个目录/包) 新建一个文件UserDAOHibernate.ava。这个类继承了 HibernatDaoSupport 类,并实现了 UserDAO 接口。package org.appfuse.dao.hibernate;/ use your IDE to handle importspublic class UserDAOHibernate extends HibernateDaoSupport implements UserDAO private Log log = LogFactory.getLog(UserDAOHiber

31、nate.class);public List getUsers() return getHibernateTemplate().find(from User);public User getUser(Long id) return (User) getHibernateTemplate().get(User.class, id);public void saveUser(User user) getHibernateTemplate().saveOrUpdate(user); if (log.isDebugEnabled() log.debug( userId set to: + user.

32、getID();public void removeUser(Long id) Object user = getHibernateTemplate().load(User.class, id);getHibernateTemplate().delete(user);Spring 的 HibernateDaoSupport 类是一个方便实现 Hibernate DAO 的超类,你可以它的一些有用的方法,来获得 Hibernate DAO 或是 SessionFactory。最方便的方法是getHibernateTemplate(),它返回一个 HibernateTempalte 对象。这个模板

33、把检测式异常 (checked exception)包装成实时式异常(runtime exception),这使得你的 DAO 接口无需抛出 Hibernate 异常。程序还没有把 UserDAO 绑定到 UserDAOHibernate 上,必须创建它们之间的关联。2.在 Spring 配置文件(web/WEB-INF/applictionContext.xml)中添加以下内容:这样就在你的 UserDAOHibernate(从 HibernateDaoSupport 的 setSessionFactory 继承)中建 了一个 Hibernate Session Factory。Spring 会检测一个 Session(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com