Struts 2+hibernate 3+Spring 2の統合方法

5838 ワード

Struts+hibernate+Springの統合方法について説明します.
要約:Struts、Springとhibernateの統合を紹介します.みんなが中から役に立ちますように.
1、工程でスプリングサポートを導入し、導入したJarパッケージは以下の通りです.
◆Spring 2.0 Core Libries
◆Spring 2.0 ORM/DAO/Hbernate 3 Libries
◆Spring 2.0 AOP Libries
◆Spring 2.0 Web Libries
2、SpringプロファイルにdataSourceとSession Factoryを配置し、hibernate構成をSpring構成と統合する(hibernane.cfg.xmlファイルを削除することができる).
3、データベースソースを導入するために使うJarバッグ、例えばDBCP用のJARバッグ(commons-pool.jar);
4、すべてのDAOのhibernateを修正して実現します.SpringでHibernate DAOSPport類を提供しているので、データベースの操作を簡単にすることができます.すべてのDAO類を使ってこのクラスから継承します.
5、DAOを注入に依存する方式でBizに注入し、Bizを注入に依存する方式でアクションに注入し、Spring配置ファイルで対応する配置をする.
6、SpringとStrutsを一体化する:
1)springプロファイル構成アクション:Bizをアクションに注入する;
2)Strutsの配置ファイルを修正する:アクションのtype属性を、org.spring frame ebook.web.struts.DelegatingAction Proxyに修正する.
3)web.xmlファイルには、モニターとウェブアプリケーションの初期化パラメータを設定します.
 
 <!--              ,   beanFactory   --> 
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml /WEB-INF/applicationContext-beans.xml
</param-value> 
</context-param>

<!-- Spring beanFactory, Context ,
        ,   IOC    bean --> 
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class> 
</listener>
 
7、応用中の中国語の文字化け問題を解決するために、自分でフィルタ類を開発しなくてもいいです.Springは私達に一つを提供してくれました.配置だけでいいです.
 

        <!--   Spring              --> 
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.Charact
[color=brown][/color]erEncodingFilter</filter-class> 
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 

 

8、为了解决hibernate延迟加载的问题,使用Spring中提供的过滤器来解决,它能够让Session
在请求解释完成之后再关闭,配置方式如下:

 

<!--   hibernate         ,      Session           --> 
<filter>
<filter-name>hibernate session manager filter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.
OpenSessionInViewFilter</filter-class> 
</filter>

<filter-mapping>
<filter-name>hibernate session manager filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 

 

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控制: