ssh第4章第二讲.docx
- 文档编号:28607625
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:17
- 大小:64.44KB
ssh第4章第二讲.docx
《ssh第4章第二讲.docx》由会员分享,可在线阅读,更多相关《ssh第4章第二讲.docx(17页珍藏版)》请在冰豆网上搜索。
ssh第4章第二讲
重庆正大软件职业技术学院教案(项目类)
授课对象
系别
软件系
本次课学时
4学时
年级班次
大二
章节题目
第4章ssh框架整合
目的要求(含技能要求)
理解Spring的事务管理
掌握Spring框架对于O/RMapping工具Hibernate的整合方式
本节重点
掌握Spring框架对于O/RMapping工具Hibernate的整合方式
本节难点
理解Spring的事务管理
教学方法
项目教学法
教学用具
机房、屏幕广播
问题引入
通过用户注册案例,从而引出本次课程。
难点与重点讲解方法
引导、分析、讲解、实作演示
本次课小结
课程小结
教后礼记
讨论、思考题、作业(含实训作业)
完成本次课的课堂任务
填写实验报告
任务介绍(5分钟)
利用Spring框架的中间层数据访问技术将4.1节中完成的功能改造成为使用Struts+Spring+Hibernate架构实现
任务解析(50-60分钟)
1.加入工程所需jar包
2.spring与struts的整合
3.spring本身的改进
4.sping与hibernate的整合
详细步骤
1.加入工程所需jar包
请参考任务计划的相关内容引入所需的jar文件在工程指定目录中。
2.spring与struts的整合
首先,在struts配置文件中加入以下语句(只需一次):
其次,修改struts.xml,将其action里的class改写为beans.xml里对应的bean的名称或id,其关键代码如下:
--注册模块整合后-->
相应地,在spring配置文件beans.xml中增加一个bean,关键代码如下:
3.spring本身的改进
首先,在类RegisterAction、RegisterServiceImpl中,去掉如下冗余代码:
ApplicationContextact=newClassPathXmlApplicationContext("beans.xml");
接口接口对象=(接口)act.getBean(“spring中bean的id");
RegisterServiceImpl类修改后的关键代码如下:
publicclassRegisterServiceImplimplementsRegisterService{
RegisterDaoregisterdao;
publicbooleanexecute(Useruser){
returnregisterdao.execute(user);
}
//以下省略成员变量的get/set方法
}
然后,在spring配置文件中id为registerAction的bean中嵌入property子元素,参考代码:
--配置从视图层到控制层的实现类-->
相应地,在spring配置文件中id为register的bean中嵌入property子元素,参考代码:
--配置从控制层到服务层的实现类-->
4.sping与hibernate的整合
首先,在spring中配置一个创建sessionFactory的bean,关键代码:
hibernate.cfg.xml
该代码一个工程中只需配置一次。
然后,改进使用hibernate连接访问数据库的代码。
全部去掉在数据访问层的RegisterDaoImpl类中相关数据库操作代码并继承HibernateDaoSupport类,使用HibernateDaoSupport类的相关方法完成数据库系列操作,修改后的参考代码如下:
publicclassRegisterDaoImplextendsHibernateDaoSupportimplementsRegisterDao{
publicbooleanexecute(Useruser){
//进行入库操作
booleanret=true;
try{
this.getHibernateTemplate().save(user);
}catch(HibernateExceptione){
e.printStackTrace();
ret=false;
}
returnret;
}
}
其次,对注入sessionFactory的配置。
在id="registerdao"的bean中增加property子元素来配置用到sessionFactory的实现类:
--配置从服务层到数据处理层的实现类-->
再次,使用Spring容器创建事务,在spring配置文件中加入:
注:
该配置在同一个工程中只需配置一次。
最后,配置谁可以使用事务,在spring配置文件中加入两段话:
--第一段话:
配置哪些方法需要事务管理-->
adviceid="txAdvice"transaction-manager="transactionManager"> attributes> methodname="add*"propagation="REQUIRED"/> methodname="find*"propagation="REQUIRED"/> methodname="update*"propagation="REQUIRED"/> methodname="delete*"propagation="REQUIRED"/> methodname="*"read-only="true"/> attributes> advice> --第二段话: 配置哪些类需要事务管理--> config> pointcutid="allServiceMethod"expression="execution(*com.zdsoft.dao.*.*(..))"/> advisorpointcut-ref="allServiceMethod"advice-ref="txAdvice"/> config> 注: 该配置在同一个工程中只需配置一次。 根据任务提出问题(45-55分钟) ●如何将三个框架整合? 问题解析(45-55分钟) 1.如何将三个框架整合? 我们以例子4.2-1来说明。 【例子4.2-1】用户信息增加,制作用户注册界面,录入用户id和用户名之后提交到数据库中,提交成功显示成功页面,提交失败显示失败页面。 要求使用ssh整合框架实现。 .如图4.2-1a、4.2-1b、4.2-1c所示分别表示操作页面、成功页面、失败页面页面。 图4.2-1a操作页面 图4.2-1b成功页面 图4.2-1c失败页面 步骤0: 整合前的代码编写。 编写前台页面。 操作页面userinfo.jsp参考代码: formname="f1"method="post"action="userinfoadd"> textfieldname="userinfo.id"> textfield> textfieldname="userinfo.name"/> form> 成功页面userinfo_succ.jsp参考代码:用户注册
*用户id: *用 户 名: 注册成功:
点击
失败页面userinfo_err.jsp参考代码:
操作失败~
请点击 history.back();">返回重新操作! 编写持久(domain)层。 编写用户实体类Userinfo,参考代码: publicclassUserinfo{ privateStringid; privateStringname; /**以下省略成员属性的get/set方法*/ } 编写实体类映射文件Userinfo.hbm.xml,参考代码: length="20"> length="50"not-null="true"/> 将实体类映射文件Userinfo.hbm.xml注册到hibernate全局配置文件中,参考代码: 编写action层。 编写业务控制类UserinfoAction,关键代码如下: publicclassUserinfoAction{ Userinfouserinfo; UserinfoServiceuserinfoService; publicStringexecute(){ //增加 booleanret; ApplicationContextact=newClassPathXmlApplicationContext("beans.xml"); //获得服务对象 userinfoService=(UserinfoService)act.getBean("userinfoService"); ret=userinfoService.addUserinfo(userinfo); if(ret){ return"success"; }else{ return"error"; } } //以下省略成员变量的get/set方法 } 编写struts配置文件,增加一个action,参考代码: 编写spring配置文件,配置action层到service层所需的实现类的bean,参考代码: --配置从控制层到服务层的实现类--> 编写service层。 编写接口UserinfoService,关键代码: publicinterfaceUserinfoService{ publicbooleanaddUserinfo(Userinfouserinfo); } 编写接口UserinfoService的实现类UserinfoServiceImpl,关键代码: publicclassUserinfoServiceImplimplementsUserinfoService{ UserinfoDaouserinfoDao; publicbooleanaddUserinfo(Userinfouserinfo){ ApplicationContextact=newClassPathXmlApplicationContext("beans.xml"); //获得服务对象 userinfoDao=(UserinfoDao)act.getBean("userinfoDao"); returnuserinfoDao.addUserinfo(userinfo); } //以下省略get/set方法 } 编写spring配置文件,配置service层到dao层所需的实现类bean,参考代码: --配置从服务层到数据处理层的实现类--> 编写dao层。 编写接口UserinfoDao,参考代码: publicinterfaceUserinfoDao{ publicbooleanaddUserinfo(Userinfouserinfo); } 编写接口实现类,参考代码: publicclassUserinfoDaoImplimplementsUserinfoDao{ SessionFactorysessionFactory; publicbooleanaddUserinfo(Userinfouserinfo){ SessionFactorysessionFactory=newAnnotationConfiguration().configure().buildSessionFactory(); try{ Sessionsession=sessionFactory.getCurrentSession(); session.persist(userinfo); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } } 步骤1: struts与spring框架整合 首先,在struts配置文件中加入以下语句(只需一次): 说明: struts中的Action创建交给spring完成。 其次,修改struts配置文件中action的class属性配置,代码语法: 本例关键代码: 最后,对应修改spring配置文件,增加一个bean,代码语法: 本例关键代码: 步骤2: 改进spring框架单独使用中的冗余代码 在需要依赖注入的地方(action层调用service接口、service层调用dao层接口)存在类似如下代码: ApplicationContextact=newClassPathXmlApplicationContext("beans.xml"); 接口接口对象=(接口)act.getBean(“spring中bean的id"); 现在改进: 在与struts框架整合后,现在可以删除。 删除代码的代价: 需要在spring中进行配置。 在配置action层实现类的bean中: 嵌入property子元素,语法为: 目的: 注入bean对象后,根据需要,给对象中的成员变量也注入对象,本例代码: --配置从视图层到控制层的实现类--> 其中property元素的name属性值userinfoService是UserinfoAction类中需要注入的成员变量,同理可得: 在配置服务层的实现类的bean中增加property子元素来配置用到dao层接口的实现类的关键代码: --配置从控制层到服务层的实现类--> 其中property节点的name属性值userinfoDao是UserinfoServiceImpl类中需要注入的成员变量。 步骤3: Spring与hibernate框架整合。 首先,在spring中配置一个创建sessionFactory的bean,关键代码: hibernate.cfg.xml 配置目的: 在Spring中集成hibernate,通过spring加载hibernate配置并使用LocalSessionFactoryBean创建sessionFactory。 代码说明: bean的id名字可以随便取,约定俗成为sessionFactory;classpath: hibernate.cfg.xml是hibernate全局配置文件的地址; 本例是使用非注解方式生成sessionFactory,若是注解方式,则class属性中LocalSessionFactoryBean要改为AnnotationSessionFactoryBean,让UserinfoDaoImpl类继承HibernateDaoSupport类。 然后,改进使用hibernate连接访问数据库的代码。 全部去掉在数据访问层的UserinfoDaoImpl类中相关数据库操作代码如下: SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory(); Sessionsession=sessionFactory.openSession(); session.beginTransaction(); session.persist(user); session.getTransaction().commit(); session.clo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ssh 第二