一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

spring+hibernate整合

 yfm10 2010-03-21
spring+hibernate整合(2009-06-04 19:41:59)

spring2.5+hibernate3.3

所需jar文件
hibernate核心安裝包下的
hibernate3.jar
lib\required\*.jar
lib\optional\ehcache-1.2.2.jar   //二級(jí)緩存
hibernate注解安裝包下的
lib\test\slf4j-log4j12.jar

spring安裝包下的
dist\spring.jar
dist\modules\spring-webmvc-struts.jar   整合stuts時(shí)用到
lib\jakarta-commons\commons-logging.jar  commons-dbcp.jar、commons-pool.jar(hibernate要用到數(shù)據(jù)庫(kù)連接池,采用此數(shù)據(jù)源,導(dǎo)入這兩個(gè)jar)
lib\aspectj\aspectjweaver.jar、aspectjrt.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\log4j\log4j-1.2.15.jar

struts
下載struts-1.3.8-lib.zip,需要使用到解壓目錄下的所有jar,
把jstl-1.0.2.jar和standard-1.0.2.jar更換為1.1版本。
spring中已經(jīng)存在一個(gè)antlr-2.7.6.jar,所以把struts中的antlr-2.7.2.jar刪除,
避免jar沖突

數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar

------------------------------------------
把sessionFacory交給spring管理
在xml文件 中加入
<!-- 配置sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> //用spring包裝的sessionFactory來(lái)管理session
<property name="dataSource" ref="dataSource"/> //配置數(shù)據(jù)源,引用前面已配置好的數(shù)據(jù)源
<property name="mappingResources">
<list>
<value>cn/itcast/bean/Person.hbm.xml</value>//orm映射配置文件,可配置多個(gè)
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto = update
hibernate.show_sql = false
hibernate.format_sql = false
</value>
</property>
</bean>

<!--  配置事務(wù)管理,使用spring提供的針對(duì)hibernate的事務(wù)管理器-->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置事務(wù)采用的聲明方式,這里使用注解方式..這里要配置一下事務(wù)管理器,采用前面配置好的事務(wù)管理器-->
<tx:annotation-driven transaction-manager="txManager"/>

-------------------------------------------------------------
實(shí)例化spring容器
通過(guò)配置web.xml的listener
<!--指定spring的配置文件,默認(rèn)從web目錄尋找配置文件,可以通過(guò)spring提供的classpath前綴指定從類路徑下尋找-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<!-- 對(duì)spring容器進(jìn)行實(shí)例化-->
<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

-------------------------------------------
集成struts1.3,加載struts1.3/lib下的所有.jar,與spring重復(fù)的那個(gè)不要,如前所述

在Action中要調(diào)用 spring中實(shí)例bean,因此要先得到spring容器
如果action沒(méi)有交給spring管理時(shí),通過(guò)下面語(yǔ)句獲取spring容器實(shí)例
WebApplicationContext ctx=WebApplicatinContextUtils.getWebApplicationContext(this.getServlet().getServletContext());

spring容器實(shí)例呢,是通過(guò)web.xml中的listener初始化而來(lái)的,放到了application作用范圍,存到了servletContext中

//////
把a(bǔ)ction交給spring管理后,可以使用依賴注入在action中注入業(yè)務(wù)層的bean。確保action的path屬性值與bean的名稱相同。
<action path="/person/list" ..>
</action>

spring配置
<bean name="/person/list" class="cn.itcast.web.action.PersonAction"/>

在struts配置文件中添加進(jìn)spring的請(qǐng)求控制器,該請(qǐng)求控制器會(huì)先根據(jù)action的path屬性值到spring容器中
尋找跟該屬性值同名的bean。如果尋找到即使用該bean處理用戶請(qǐng)求
<controller>
<set-property property="processorClass">
------------------------------------------------------------
配置hibernate的二級(jí)緩存
<!--設(shè)置是否起用二級(jí)緩存-->
hibernate.cache.use_second_level_cache=true
<!--設(shè)置是否起用查詢緩存,因查詢緩存使用效率并不高,一般不用開(kāi)啟-->
hibernate.cache.use_query_cache=false
<!--設(shè)置緩存產(chǎn)品的驅(qū)動(dòng)類,采用EhCacheProvider產(chǎn)品要用到lib\optional\ehcache-1.2.3.jar-->
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider

//////////////
使用EhCache,要配置其ehcache.xml文件(放在類路徑下)
<ehcache>
<diskStore path="D:\cache"/>
<defaultCache maxElementsInMemory="1000" etemal="false" overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="180"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="60"/>

<!--針對(duì)cn.itcast.bean.Person這個(gè)區(qū)域名設(shè)置,區(qū)域名對(duì)應(yīng)與Person.hbm.xml中的區(qū)域名設(shè)置相同-->
<cache name="cn.itcast.bean.Person" maxElementsInMemory="100" eternal="false"
overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/>
</ehcache>
path 設(shè)置緩存在硬盤(pán)上的路徑
defaultCache 節(jié)點(diǎn)為缺省的緩存策略
maxElementsInMemory內(nèi)存中最大允許存在的對(duì)象數(shù)量
eternal設(shè)置緩存中的對(duì)象是否永遠(yuǎn)不過(guò)期
overflowToDisk是否把溢出的對(duì)象存放到硬盤(pán)上
timeToIdleSeconds 指定緩存對(duì)象空閑多長(zhǎng)時(shí)間就過(guò)期,過(guò)期的對(duì)象會(huì)被清除掉
timeToLiveSeconds 指定緩存對(duì)象總的存活時(shí)間
diskPersistent 當(dāng)jvm結(jié)束時(shí)是否持久化對(duì)象
diskExpiryThreadIntervalSeconds 指定專門(mén)用于清除過(guò)期對(duì)象的監(jiān)聽(tīng)線程的輪詢時(shí)間
///////////////////
在Person.hbm.xml中配置緩存策略
<cache usage="read-write" region="cn.itcast.bean.Person"/>
usage設(shè)置緩存策略,read-write是讀寫(xiě)策略,當(dāng)并發(fā)訪問(wèn)時(shí),一個(gè)在寫(xiě)的時(shí)候,另一個(gè)只能讀
region緩存區(qū)域名,在區(qū)域里存放緩存對(duì)象,定義為實(shí)體類的全稱

/////////////////
設(shè)置了緩存之后,當(dāng)它第一次獲取到記錄后,第二次再去獲取這條記錄,它會(huì)從內(nèi)存里獲取,而不是從數(shù)據(jù)庫(kù)獲取

-----------------------------------------------------------------------------------------------------------------

 


spring解決struts1.3亂碼問(wèn)題
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>

</filter>

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

-------------------------------------------
使用spring解決hibernate因session關(guān)閉導(dǎo)致的延遲加載例外問(wèn)題
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

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

-----------------------------------------------------------------
spring2.5+JPA+struts1.3整合

 

這里JPA實(shí)現(xiàn)采用hibernate

hibernate核心包(8個(gè)文件)
hibernate3.jar
lib\bytecode\cglib\hibernate-cglib-repack-2.1_3.jar
lib\required\*.jar

hibernate注解包(3個(gè)文件) hibernate-annotations-3.4.0.GA
hibernate-annotations.jar
lib\ejb3-persistence.jar、hibernate-commons-annotations.jar

hibernate針對(duì)JPA實(shí)現(xiàn)包(3個(gè)文件) hibernate-entitymanager-3.4.0.GA
hibernate-entitymanager.jar
lib\test\log4j.jar、slf4j-log4j12.jar


+++++++++++++++++++++
spring安裝包下的
dist\spring.jar
dist\modules\spring-webmvc-struts.jar   整合stuts時(shí)用到
lib\jakarta-commons\commons-logging.jar  commons-dbcp.jar、commons-pool.jar(hibernate要用到數(shù)據(jù)庫(kù)連接池,采用此數(shù)據(jù)源,導(dǎo)入這兩個(gè)jar)
lib\aspectj\aspectjweaver.jar、aspectjrt.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\log4j\log4j-1.2.15.jar

 

+++++++++++++++++++++++++
struts1.3同上

在web.xml文件中添加

<servlet>
<servlet-name>struts</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name> <!-- 指定struts配置文件所在路徑 -->
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>

</servlet>

<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

 

++++++++++++++++++++++++++++++++++++++++++

將struts-config.xml拷貝到WEB-INF目錄下

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts./dtds/struts-config_1_3.dtd">
<struts-config>

<controller><controller>  <!-- spring提供的,用于管理 structs請(qǐng)求的action,控制器根據(jù)當(dāng)前的action的path尋找bean,用bean對(duì)應(yīng)的action處理請(qǐng)求 -->
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller>  <!--配置spring控制器-->

</struts-config>

 


++++++++++++++++++++++++++++++++++++++++++++++++++++
spring解決struts1.3亂碼問(wèn)題
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>

</filter>

<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
+++++++++++++++++++++++++++

使用spring解決JPA因EntityManager關(guān)閉導(dǎo)致的延遲加載例外問(wèn)題
<filter>
<filter-name>SpringEntityManagerViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerViewFilter</filter-class>
</filter>

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

+++++++++++++++++++++++++++++++
應(yīng)注意的是:
struts1.3的Action都是單例模式,存在線程安全的問(wèn)題,因此可以在spring配置文件中
把涉及到線程安全的action配上scope="prototype"

 

--------------------------------------------------------------------------------------------------------------
spring2.5+hibernate3.3+struts2整合開(kāi)發(fā)

struts2
使用到struts2的lib目錄下所有不帶-plugin結(jié)尾的jar文件,antlr-2.7.2.jar也不要(spring已自帶)
但除了struts2-spring-plugin-2.0.11.1.jar例外

spring
同前面所講,但是不用加dist\modules\spring-webmvc-struts.jar  這個(gè)文件了

hibernate
同前面所講。

數(shù)據(jù)庫(kù)驅(qū)動(dòng).jar
++++++++++++++++++++++
web.xml配置
用來(lái)實(shí)例化spring容器,配置listener
引入struts2控制器 配置filter
使用spring解決JPA因EntityManager關(guān)閉導(dǎo)致的延遲加載例外問(wèn)題 配置filter

struts2.xml文件配置

<struts>
<!--指定web應(yīng)用的默認(rèn)編碼集,相當(dāng)于調(diào)用HttpServletRequest的setCharacterEncoding方法-->
<constant name="struts.i18n.encoding" value="utf-8"/>

<!--指定struts2處理的請(qǐng)求后綴,默認(rèn)為.action,如果要指定多個(gè)后綴,則多個(gè)后綴以英文的逗號(hào)(,)隔開(kāi)-->
<constant name="struts.action.extension" value="do"/>

<!--設(shè)置瀏覽器是否緩存靜態(tài)內(nèi)容,默認(rèn)值為true(生產(chǎn)環(huán)境下用),開(kāi)發(fā)階段最好關(guān)閉-->
<constant name="struts.seve.static.browserCache" value="false"/>

<!--當(dāng)struts的配置文件修改后,系統(tǒng)是否自動(dòng)重新加載該文件,默認(rèn)值為false(生產(chǎn)環(huán)境下用),開(kāi)發(fā)階段最好設(shè)為true-->
<constant name="struts.configuration.xml.reload" value="true"/>

<!--開(kāi)發(fā)模式下使用,這樣可以打印更詳細(xì)的錯(cuò)誤信息-->
<constant name="struts.devMode" value="true">

<!--默認(rèn)的視圖主題-->
<constant name="struts.ui.theme" value="simple"/>

<!--與spring集成,由spring生成action實(shí)例-->
<constant name="struts.objectFactory" value="spring"/>

<package name="person" namespace="/person" extends="struts-default">
<global-results>
<result name="message">/WEB-INF/page/message.jsp</result>
</global-results>
<action name="action_*" class="personList" method="{1}">
<result name="list">/WEB-INF/page/persons.jsp</result>
<result name="add">/WEBINF/page/add_person.jsp</result>
</action>
</package>
</struts>

這里的personList是對(duì)應(yīng)spring配置beans.xml里的bean配置
<bean id="personList" class="com.feihu.action.PersonAction">

++++++++++++++++++
請(qǐng)求的執(zhí)行過(guò)程是,客戶發(fā)送request請(qǐng)求,經(jīng)總控制器進(jìn)入strust2
找到請(qǐng)求對(duì)應(yīng)的class一看,是引用的spring里的對(duì)應(yīng)的bean,于是轉(zhuǎn)
到spring容器找到相應(yīng)的Action實(shí)例,進(jìn)行處理.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产视频福利一区二区| 一区二区三区日本高清| 国产精品制服丝袜美腿丝袜| 免费一级欧美大片免费看| 东京热一二三区在线免| 亚洲清纯一区二区三区| 国产麻豆视频一二三区| 青青操在线视频精品视频| 粉嫩一区二区三区粉嫩视频| 中文字幕日韩欧美亚洲午夜| 日本精品中文字幕人妻| 国产成人精品国内自产拍| 中文字幕乱码亚洲三区| 日韩性生活视频免费在线观看 | 美女黄色三级深夜福利| 久久精品一区二区少妇| 国产伦精品一一区二区三区高清版| 欧美人与动牲交a精品| 亚洲欧美中文字幕精品| 国产精品十八禁亚洲黄污免费观看| 五月婷婷亚洲综合一区| 亚洲午夜av一区二区| 久久精品国产99精品最新| 日韩偷拍精品一区二区三区| 亚洲国产av在线视频| 亚洲视频在线观看免费中文字幕| 99久久免费看国产精品| 99久久精品国产麻豆| 91亚洲人人在字幕国产| 九九热视频网在线观看| 国产精品美女午夜福利| 中文字幕欧美精品人妻一区| 成人精品一区二区三区综合 | 小黄片大全欧美一区二区| 丝袜诱惑一区二区三区| 91欧美日韩精品在线| 日韩成人中文字幕在线一区| 国产主播精品福利午夜二区| 国产在线一区中文字幕| 99精品国产自在现线观看| 日本高清一道一二三区四五区|