传智播客——SSH集成

Spring的内容较多,原计划两天完成的任务被迫延迟一天,希望大家见谅,今天学习的内容是Spring,StrutsHibernate框架的整合。

1.       getCurrentSession()openSession()的区别:

1)  采用getCurrentSession()创建的session会绑定到当前线程中,而openSession()创建的session则不会

2)  采用getCurrentSession()创建的sessioncommitrollback时会自动关闭,而采用openSession()创建的session必须手动关闭

2.       使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

1)  如果使用的是本地事务(jdbc事务)

<property name="hibernate.current_session_context_class">thread</property>

2) 如果使用的是全局事务(jta事务)

<property name="hibernate.current_session_context_class">jta</property>

3.       SpringHibernate集成(声明式服务):

1)  事务的传播特性:

.   PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启

.   PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

.   PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

.   PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

.   PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

.   PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常

.   PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

2)声明式事务配置

. 配置SessionFactory

. 配置事务管理器

. 事务的传播特性

. 哪些类哪些方法使用事务

2)  编写业务逻辑方法

. 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate Hibernate Session的轻量级封装

. 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的

. 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理

. 关于事务边界的设置,通常设置到业务层,不要添加到Dao

4.       SpringStruts的集成

1)  原理:在Action中取得BeanFactory对象,然后通过BeanFactory获取业务逻辑对象

2)  具体操作步骤:

方案一:

. springstruts依赖库配置

. strutsAction中调用如下代码取得BeanFactory

BeanFactory factory=WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());

. 通过BeanFactory取得业务对象,调用业务逻辑方法

方案二:

. springstruts依赖库配置

. 因为Action需要调用业务逻辑方法,所以需要在Action中提供setter方法,让spring将业务逻辑对象注入过来

. struts-config.xml文件中配置Action<action>标签中的type属性需要修改为org.springframework.web.struts.DelegatingActionProxyDelegatingActionProxy是一个Action,主要作用是取得BeanFactory,然后根据<action>中的path属性值到IoC容器中取得本次请求对应的Action

. spring配置文件中需要定义strutsAction,如:

<bean name="/login" class="cn.itcast.usermgr.actions.LoginAction" scope="prototype">

              <property name="userManager" ref="userManager"/>

</bean>

* 必须使用name属性,name属性值必须和struts-config.xml文件中<action>标签的path属性值一致

* 必须注入业务逻辑对象

* 建议将scope设置为prototype,这样就避免了struts Action的线程安全问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值