![[计算机软件及应用]ssh框架.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/5/a6f451fd-a725-4cf7-a870-920cadda227b/a6f451fd-a725-4cf7-a870-920cadda227b1.gif)
![[计算机软件及应用]ssh框架.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/5/a6f451fd-a725-4cf7-a870-920cadda227b/a6f451fd-a725-4cf7-a870-920cadda227b2.gif)
![[计算机软件及应用]ssh框架.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/5/a6f451fd-a725-4cf7-a870-920cadda227b/a6f451fd-a725-4cf7-a870-920cadda227b3.gif)
![[计算机软件及应用]ssh框架.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/5/a6f451fd-a725-4cf7-a870-920cadda227b/a6f451fd-a725-4cf7-a870-920cadda227b4.gif)
![[计算机软件及应用]ssh框架.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/5/a6f451fd-a725-4cf7-a870-920cadda227b/a6f451fd-a725-4cf7-a870-920cadda227b5.gif)
已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.新建Web项目ssh_test新建Web项目ssh_test,如图15-2所示。(点击查看大图)图15-2 创建Web项目J2EE的版本要选择Java EE5,这样会默认支持JSTL。单击Finish按钮完成创建。2.添加Struts1.3框架支持文件添加Struts 1.3框架支持文件,如图15-3所示。(点击查看大图)图15-3 添加Struts 1.3框架文件Struts框架选择版本为1.3,并且设置包的名称为struts。单击Finish按钮完成设置。3.添加Hibernate Database Explorer数据库连接进入数据库浏览透视图,新建一个数据库连接,如图15-4所示。(点击查看大图)图15-4 新建数据库连接单击Next按钮继续添加,如图15-5所示。(点击查看大图)图15-5 选择数据库单击Finish按钮完成设置。双击数据库连接查看是否正确连接数据库,如图15-6所示。图15-6 是否连接数据库正确连接到数据库,可以看到table_1表。4.添加Hibernate 3.1框架支持文件添加Hibernate 3.1框架支持文件,如图15-7所示。(点击查看大图)图15-7 添加Hbiernate 3.1框架支持文件这里需要取消勾选Hibernate 3.1的核心JAR包复选框和高级JAR包复选框。因为在本SSH整合中会使用Spring自带Hibernate的JAR包,单击Next按钮继续添加,后面的步骤按默认的设置即可,但在后面的向导中需要创建一个orm包,用来存放Hibernate实体类和DAO文件。5. 添加Spring 2.0框架支持文件添加Spring 2.0框架支持文件,如图15-8所示。(点击查看大图)图15-8 添加spring 2.0框架支持文件按图中的示意添加相应的JAR包,然后单击Next按钮继续添加,如图15-9所示。(点击查看大图)图15-9 配置文件的选项这步会设置配置文件applicationContext.xml的生成方式,New是新建一个,Existing是使用存在的。由于本示例是一个全新的项目,所以要新建一个配置文件,单击Next按钮继续配置,如图15-10所示。(点击查看大图)图15-10 LocalSessionFactory的id名称这步会设置session工厂的id别名,这里选择默认即可。单击Finish按钮完成设置6. 自动创建的applicationContext.xml文件在项目中src目录下自动创建了一个applicationContext.xml文件,其代码如下:1. 2. 6. 7. /新建了LocalSessionFactoryBean类型的变量sessionFactory,用来从hibernate.cfg.xml配置 8. /文件中取得数据库的连接,以便用hibernate来操作数据库 9. 11. /设置LocalSessionFactoryBean类型的变量sessionFactory的configLocation属性来源于一个 12. /hibernate.cfg.xml配置文件,也就是Hibernate的配置文件,classpath的意思是在当前项目 13. /的classpath路径中寻找这个hiberante.cfg.xml配置文件,从配置文件中取得数据库的连接 14. /信息,是一个典型的Spring注入案例 15. 17. 18. 19. 从代码中可以看到:1. org.springframework.orm.hibernate3.LocalSessionFactoryBeanSpring封装了Hibernate 3.0版本的操作,使用Spring的方式接管了Hibernate的session创建、销毁,以及创建SessionFactory的周边信息。如数据库连接地址、用户名和密码等都来源于hibernate.cfg.xml配置文件。7. 在web.xml文件中加入Spring的utf-8过滤器更改后的代码如下:1. 2. 6. 7. /过滤器使用spring类CharacterEncodingFilter 8. encodingFilter 9. 10. org.springframework.web.filter.CharacterEncodingFilter 11. 12. 13. encoding 14. /过滤器过滤后的编码为utf-8 15. utf-8 16. 17. 18. 19. /过滤所有的路径:/*代表所有的路径 20. encodingFilter 21. /* 22. 23. 24. 25. action 26. /struts中的ActionServlet,所有的请求应答由ActionServlet来处理 27. 28. org.apache.struts.action.ActionServlet 29. 30. 31. /struts中的配置文件的存放位置 32. config 33. /WEB-INF/struts-config.xml 34. 35. 36. debug 37. 3 38. 39. 40. detail 41. 3 42. 43. 0 44. 45. 46. /映射的后缀扩展名名称 47. action 48. *.do 49. 50. 51. index.jsp 52. 53. 类org.springframework.web.filter.CharacterEncodingFilter是Spring特有的,专门解决Web的中文utf-8乱码问题。8. 在struts-config.xml文件中加入spring的request代理更改后的struts_config.xml配置文件如下:1. 2. 4. 5. 6. 7. 8. 9. 10. /加入Spring框架中的DelegatingRequestProcessor代理请求处理,目的是将Struts的请求 11. /及应答用Spring的ioc容器中的Bean来处理 12. 14. 15. 16. 17. /Struts的请求和应答由Spring的DelegatingRequestProcessor类进行拦截,使用Spring框 18. /架的IOC容器来处理,那么如何知道Struts的Action的路径对应IOC容器中的哪个Bean 19. /呢?通过设置插件ContextLoaderPlugIn的属性contextConfigLocation为配置文件的所在 20. /位置及文件名来指定即可 21. 23. 25. 26. 27. org.springframework.web.struts.DelegatingRequestProcessor类可以将Struts的请求拦截,使用Spring的IOC容器进行管理,这样方便在一个request(请求)下进行数据库操作的事务封装。另外由于Spring是一个容器,所以包括Struts的Action类也要由Spring来管理,这样Action的路径就需要和applicationContext.xml文件中的配置进行匹配,所以在下面的代码中使用了插件的方式将Struts的Action路径和Spring中的IOC容器中的Bean进行匹配: 28. 30. 32. 33. 另外需要注意一点,如果是ssh+dwr(ajax)整合时,在Struts中的配置文件就可以把节点去掉,而在web.xml文件中加入以下代码: 34. 35. 39. 40. contextConfigLocation 41. 42. /WEB-INF/classes/applicationContext.xml 43. 44. 45. 46. 47. org.springframework.web.context.ContextLoaderListener 48. 49. 这样在容器启动时,就需要将Spring配置文件applicationContext.xml中的Bean加载到内存,以便dwr可以正确地访问到内存中的Bean实例。9. 对MySQL数据库中的table_1表进行Hibernate逆向工程逆向第1步的截图如图15-11所示。(点击查看大图)图15-11 逆向的第1步在第1步中需要取消勾选Create abstract class复选框,即不创建DAO的抽象类。需要留意的是要选择逆向目标工程的名称,另外读者需要注意,本DAO类是基于Spring DAO的。单击Next按钮继续配置,如图15-12所示。(点击查看大图)图15-12 主键生成策略主键生成策略为native,是自增类型,取决于数据库的规则。由于MySQL的主键是自增的,所以以整型每次加1的规则来创建主键的生成。后面的步骤按照默认即可,最后单击Finish按钮完成数据库表的逆向工程。10. 了解继承自HibernateDaoSupport类DAO在orm包中创建了一个DAO:Table1DAO,其代码如下:1. packageorm; 2. 3. importjava.util.List; 4. mons.logging.Log; 5. mons.logging.LogFactory; 6. importorg.hibernate.LockMode; 7. importorg.springframework.context.ApplicationContext; 8. importorg.springframework.orm.hibernate3.support.HibernateDaoSupport; 9. 10. /继承自HibernateDaoSupport的Table1DAO类具有Spring封装Hibernate操作数据库 11. /的完全功能,继承自HibernateDaoSupport的目的是让Spring管理事务并且DAO具有 12. /面向接口编程的特点,多态性使DAO类的实现多样化,而且在Spring的管理下, 13. /数据库连接的打开和关闭,事务的处理也都变成自动化了 14. publicclassTable1DAOextendsHibernateDaoSupport 15. privatestaticfinalLoglog=LogFactory.getLog(Table1DAO.class); 16. /propertyconstants 17. publicstaticfinalStringUSERNAME=username; 18. 19. protectedvoidinitDao() 20. /donothing 21. 22. 23. publicvoidsave(Table1transientInstance) 24. log.debug(savingTable1instance); 25. try 26. getHibernateTemplate().save(transientInstance);/保存数据 27. log.debug(savesuccessful); 28. catch(RuntimeExceptionre) 29. log.error(savefailed,re); 30. throwre; 31. 32. 33. 34. publicvoiddelete(Table1persistentInstance) 35. log.debug(deletingTable1instance); 36. try 37. getHibernateTemplate().delete(persistentInstance);/删除数据 38. log.debug(deletesuccessful); 39. catch(RuntimeExceptionre) 40. log.error(deletefailed,re); 41. throwre; 42. 43. 44. 45. publicTable1findById(java.lang.Integerid) 46. log.debug(gettingTable1instancewithid:+id); 47. try 48. Table1instance=(Table1)getHibernateTemplate().get(orm.Table1, 49. id);/根据id取得实体类 50. returninstance; 51. catch(RuntimeExceptionre) 52. log.error(getfailed,re); 53. throwre; 54. 55. 56. 57. publicListfindByExample(Table1instance) 58. log.debug(findingTable1instancebyexample); 59. try 60. Listresults=getHibernateTemplate().findByExample(instance); 61. log.debug(findbyexamplesuccessful,resultsize:62. +results.size();/根据QBE来取得数据 63. returnresults; 64. catch(RuntimeExceptionre) 65. log.error(findbyexamplefailed,re); 66. throwre; 67. 68. 69. 70. publicListfindByProperty(StringpropertyName,Objectvalue) 71. log.debug(findingTable1instancewithproperty:+propertyName 72. +,value:+value); 73. try 74. StringqueryString=fromTable1asmodelwheremodel.75. +propertyName+=?;/根据属性值取得数据 76. returngetHibernateTemplate().find(queryString,value); 77. catch(RuntimeExceptionre) 78. log.error(findbypropertynamefailed,re); 79. throwre; 80. 81. 82. 83. publicListfindByUsername(Objectusername) 84. returnfindByProperty(USERNAME,username);/根据姓名取得数据 85. 86. 87. publicListfindAll() 88. log.debug(findingallTable1instances); 89. try 90. StringqueryString=fromTable1; 91. returngetHibernateTemplate().find(queryString); 92. /查询全部数据 93. catch(RuntimeExceptionre) 94. log.error(findallfailed,re); 95. throwre; 96. 97. 98. 99. publicTable1merge(Table1detachedInstance) 100. log.debug(mergingTable1instance); 101. try 102. Table1result=(Table1)getHibernateTemplate().merge( 103. detachedInstance); 104. log.debug(mergesuccessful); 105. returnresult; 106. catch(RuntimeExceptionre) 107. log.error(mergefailed,re); 108. throwre; 109. 110. 111. 112. publicvoidattachDirty(Table1instance) 113. log.debug(attachingdirtyTable1instance); 114. try 115. getHibernateTemplate().saveOrUpdate(instance); 116. log.debug(attachsuccessful); 117. catch(RuntimeExceptionre) 118. log.error(attachfailed,re); 119. throwre; 120. 121. 122. 123. publicvoidattachClean(Table1instance) 124. log.debug(attachingcleanTable1instance); 125. try 126. getHibernateTemplate().lock(instance,LockMode.NONE); 127. log.debug(attachsuccessful); 128. catch(RuntimeExceptionre) 129. log.error(attachfailed,re); 130. throwre; 131. 132. 133. 134. publicstaticTable1DAOgetFromApplicationContext(ApplicationContextctx) 135. return(Table1DAO)ctx.getBean(Table1DAO); 136. 137. 从DAO类中可以看到自动生成了基本CURD操作的代码,类是继承自Spring封装Hibernate的操作类:public class Table1DAO extends HibernateDaoSupport。HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交。在JDBC中一个Connection对象使用一个事务,那么在Hibernate中一个事务肯定要关联一个SessionFactory了,然而这个SessionFactory却没有在DAO中体现。其实主要的原因是HibernateDaoSupport类已经默默地做了封装的工作,它用一个setSessionFactory方法将SessionFactory进行注入,所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库,如图15-13所示。(点击查看大图)图15-13 HibernateDaoSupport类的结构虽然有set方法,但在哪注入的呢?当然是在applicationContext.xml文件上。打开这个配置文件后,可以看到如下代码:1. 2. 6. 7. 8. 10. 12. 13. 14. 15. /将refbean=sessionFactory注入到Table1DAOr的property 16. /name=sessionFactory属性中 17. 18. 19. 20. 21. MyEclipse工具自动将创建的DAO注入了sessionFactory的对象,所以DAO对象就具有了通过Hibernate操作数据库的功能。11. 创建All_DAO对象本示例是使用分层的结构,在service服务层有可能需要使用到某些DAO(当然本示例只有一个DAO),所以要想办法将这些零散的DAO集中起来,以供某一个service类进行调用。根据本示例的结构,创建All_DAO类,并且在All_DAO类中添加属性table1dao,这里一定要注意,属性的名称一定要小写,因为Spring对属性名称有自己的认知性,小写不会出现错误,并且生成get和set方法,如图15-14所示。(点击查看大图)图15-14 生成get和set方法生成后的代码如下:1. packageorm; 2. 3. publicclassAll_DAO 4. 5. Table1DAOtable1dao; 6. /声明Table1DAO类的变量table1dao,All_DAO就相当于一个手袋一样 7. /把所有的dao封装进这个All_DAO中 8. 9. publicTable1DAOgetTable1dao()/get方法 10. returntable1dao; 11. 12. 13. publicvoidsetTable1dao(Table1DAOtable1dao)/set方法 14. this.table1dao=table1dao; 15. 16. 17. 12. 创建Table1_Service服务对象创建Table1DAO的service服务对象Table1_Service,并且把这个服务对象放入到service包中,所以还需要新建一个service包。由于Table1_Service服务类会使用到很多的DAO,所以在服务类中声明一个All_DAO类的对象,这样就可以在一个服务类中使用全部的DAO了,具有很强的灵活性。手动创建的代码如下:1. packageservice; 2. 3. importjava.util.List; 4. 5. importorm.All_DAO; 6. 7. publicclassTable1_Service 8. 9. All_DAOall_dao;/声明All_DAO类的实例变量all_dao 10. 11. publicvoidsetAll_dao(All_DAOall_dao)/set方法 12. this.all_dao=all_dao; 13. 14. 15. publicListget_table1_all()/取得表中所有数据的方法 16. 17. returnthis.all_dao.getTable1dao().findAll(); 18. 19. 20. 21. 在服务类中创建了一个get_table1_all方法,用于获取table_1表中的所有数据。13. 创建All_Service服务对象创建All_Service服务对象的目的是将所有的服务对象集中管理,这样在控制层Action调用时只需要调用All_Service对象,就可以调用所有的服务了,而那些服务又可以调用所有的DAO,软件模块之间数据的流动性大大增强。手动创建的代码如下:1. packageservice; 2. 3. publicclassAll_Service 4. /All_Service又相当于一个手袋一样,将所有的自定义的Service类进行封装 5. /以便Struts的Action对象调用。 6. Table1_Servicetable1_service;/创建Table1_Service类的变量table1_service 7. 8. publicTable1_ServicegetTable1_service()/get方法 9. returntable1_service; 10. 11. 12. publicvoidsetTable1_service(Table1_Servicetable1_service)/set方法 13. this.table1_service=table1_service; 14. 15. 16. 到此已经将All_DAO、Table1_Service和All_Service对象创建完成了,当然这还是不够的,还必须将这些类注册到Spring的IOC容器中,即在applicationContext.xml配置文件中配置这些类之间的关系。14. 在applicationContext.xml文件中配置dao和service的关系手动配置后的applicationContext.xml的代码如下:1. 2. 6. 7. /声明一个类型为LocalSessionFactoryBean的变量beanid=sessionFactory 8. 10. 12. 13. 14. /将orm.Table1DAO中sessionFactory属性进行注入:refbean=sessionFactory 15. 16. 17. 18. 19. 20. /对All_DAO中的属性table1dao进行注入:ref=Table1DAO 21. 22. 23. 24. 25. /对service.Table1_Service服务中的all_dao属性进行注入:ref=all_dao 26. 27
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宝应医院面试题及答案
- 2025年甘孜州康定市投资发展集团有限公司招聘考试笔试试题(含答案)
- 2025年防城港市检察院招聘考试笔试试题(含答案)
- 矿山救护工初级模拟考试题含参考答案
- 2024年中国烟草(公司)生产、买卖及相关法规知识竞赛题库与答案
- 2024年中级注册安全工程师之安全生产法及相关法律知识基础试题库和答案
- 心理咨询师模拟练习题含答案
- 消毒液配比及物品消毒专项测试题附答案(保教人员)
- 2025年统计师之中级统计相关知识考试题库(含答案)
- 2025广东社区《网格员》模拟试题
- 广东省惠州市《综合知识和能力素质》公务员考试真题含答案
- GB/T 9797-2022金属及其他无机覆盖层镍、镍+铬、铜+镍和铜+镍+铬电镀层
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- GB/T 12750-2006半导体器件集成电路第11部分:半导体集成电路分规范(不包括混合电路)
- 《乒乓裁判规则规程》考试题库(附答案)
- 依托自主化装备建设分布式能源三联供项目
- 老年肌肉衰减综合征(肌少症)课件
- 山西省持有《危险废物经营许可证》单位一览表
- PCB全制程培训教材
- 烟草配送车辆GPS管理方案
- 中图法分类号与中图分类法查询
评论
0/150
提交评论