天天看點

Struts2+hibernate3+Spring2的整合方法

摘要:本文将介紹Struts,Spring與hibernate的內建。希望大家能從中受用。

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檔案中配置監聽器以及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 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"删除即可。