歡迎您光臨本站 註冊首頁

淺談Struts Hibernate Spring的整合方法

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

1、在工程中導入spring支持,導入的Jar包有:

◆ Spring 2.0 Core Libraries

◆Spring 2.0 ORM/DAO/Hibernate3 Libraries

◆ Spring 2.0 AOP Libraries

◆ Spring 2.0 Web Libraries

2、在Spring配置文件中配置dataSource和SessionFactory,將hibernate配置與Spring配置整合在一起(可以刪除hibernate.cfg.xml文件);

3、導入資料庫源所要使用的Jar包,如:DBCP所用的JAR包(commons-pool.jar);

4、修改所有DAO的hibernate實現,因為Spring中提供了一個HibernateDAOSupport類,可以簡化資料庫的操作.使用所有DAO類都繼承自該類;

5、將DAO採用依賴注入的方式注入到Biz中,再將Biz採用依賴注入的方式注入到Action中,在Spring配置文件中做相應配置;

6、將Spring與Struts集成:

1)在spring配置文件配置Action:將Biz注入到Action中;

2)修改Struts的配置文件:將Action的type屬性修改為:org.springframework.web.struts.DelegatingActionProxy;

3)在web.xml文件中配置JianTingQi以及web應用的初始化參數:

     

7、為了解決應用中的中文亂碼問題,我們可以不用自己開發過濾器類,Spring為我們提供了一個,只需要配置一下即可:

   

8、為了解決hibernate延遲載入的問題,使用Spring中提供的過濾器來解決,它能夠讓Session
在請求解釋完成之後再關閉,配置方式如下:

   

9、因為OpenSessionInViewFilter在getSession的時候,會把獲取回來的session的flush mode 設為FlushMode.NEVER.故進行insert、 update和delete操作時會產生異常:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 因此需要採用spring的事務聲明,使方法受transaction控制:

<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 配置Advice(事務的傳播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>

<!-- 配置事務管理器應用的範圍 -->
<aop:config>
<aop:pointcut id="affectMethods" expression="execution(* edu.accp.dao.hibImpl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods"/>
</aop:config>

10、 部署應用程序,啟動伺服器,如果發現異常: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V 這是由於整合時Jar包的衝突引起的.應將"Web應用程序/WEB-INF/lib/asm-2.2.3.jar"刪除即可.


[火星人 ] 淺談Struts Hibernate Spring的整合方法已經有780次圍觀

http://coctec.com/docs/java/show-post-62071.html