當(dāng)柳上原的風(fēng)吹向天際的時(shí)候...

          真正的快樂來源于創(chuàng)造

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

          第一部分:Web.Xml中ContextLoaderListener的相關(guān)配置
          在工程目錄下的\WebContent\WEB-INF\web.xml中,我們可以發(fā)現(xiàn)以下配置:

          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/applicationContext-*.xml</param-value>
          </context-param>

           

          <listener>
          <listener-class>
          org.springframework.web.context.ContextLoaderListener
          </listener-class>
          </listener>

          以上第一段XML中,contextConfigLocation參數(shù)定義了要載入Spring上下文的配置文件,這里采用了通配符的方式,也可以通過逗號(hào)符來分隔多個(gè)文件。
          以上第二段XML定義了一個(gè)監(jiān)聽器,它適用于Servlet2.3及其以上版本,這個(gè)監(jiān)聽器會(huì)隨著WebApp的啟動(dòng)而啟動(dòng),并加載contextConfigLocation參數(shù)中定義好的Spring配置文件。若是在Servlet2.3以下版本中,則需要定義org.springframework.web.context.ContextLoaderServlet來載入配置文件。

          第二部分:Action Bean的配置
          接下來我們需要將Struts2的Action交給Spring管理,以com.heyang.module.contract.action. CheckSoleContractNameAction類為例,它在Spring配置文件\WebContent\WEB-INF\applicationContext-action.xml中的相應(yīng)配置為:

          <bean id="checkSoleContractNameAction"   class="com.heyang.module.contract.action.CheckSoleContractNameAction" singleton="false">
                  
          <property name="contractService">
                      
          <ref bean="contractService"/>
                  
          </property>
          </bean>

          由上面的XML知道,如果我們?nèi)〉妹麨閏heckSoleContractNameAction的bean,Spring將通過反射調(diào)用一個(gè)com.heyang.module.contract.action.CheckSoleContractNameAction類的實(shí)例,并將一個(gè)名為contractService的bean注入進(jìn)去,當(dāng)然CheckSoleContractNameAction需要擁有此屬性并具備對(duì)應(yīng)的setter/getter。

          第三部分:在Struts配置文件中將url映射到Spring上下文中的bean
          這種方式是通過指定<action>的class屬性為Spring配置文件中相應(yīng)bean的id值來做到的,再以CheckSoleContractNameAction為例,它在Struts2配置文件WebContent\WEB-INF\struts-cfg\contract\struts.xml中的相應(yīng)設(shè)置為:
          <action name="checkSoleContractName" class="checkSoleContractNameAction" method="execute"/>
          這樣,當(dāng)頁(yè)面中url有對(duì)應(yīng)用上下文/contract/checkSoleContractName.action?...
          時(shí),com.heyang.module.contract.action.CheckSoleContractNameAction類的execute方法將會(huì)來處理用戶的請(qǐng)求。注意,這段url中,應(yīng)用上下文是WebApp Context,contract是action所在包的名稱空間,checkSoleContractName則是action的name。

          至此,Struts2和Spring的整合配置講述完畢。

          第四部分:Struts2與Spring的整合原理
          在\WebContent\WEB-INF\lib\下存在一個(gè)struts2-spring-plugin-2.0.9.jar,這個(gè)插件包的作用是通過覆蓋(override)Struts2的ObjectFactory來增強(qiáng)核心框架對(duì)象的創(chuàng)建。當(dāng)Struts2需要根據(jù)配置文件創(chuàng)建一個(gè)Action的時(shí)候,它會(huì)用Struts2配置文件中的class屬性去和Spring配置文件中的id屬性進(jìn)行關(guān)聯(lián),如果能找到,則由Spring創(chuàng)建;否則由Struts 2框架自身創(chuàng)建。這個(gè)功能是通過插件提供的兩個(gè)攔截器實(shí)現(xiàn)的,默認(rèn)情況下框架使用的自動(dòng)裝配策略是name,也就是說框架會(huì)去Spring中尋找與Action屬性名字相同的bean,可選的裝配策略還有:type、auto、constructor等。

          第五部分:Spring與Hibernate的整合
          通常來說,每個(gè)負(fù)責(zé)具體請(qǐng)求的Action都會(huì)被注入一個(gè)或多個(gè)Service bean(參見applicationContext-action.xml),而每個(gè)Service Bean都會(huì)被注入一個(gè)DAO bean(參見applicationContext-dao.xml),而每個(gè)dao bean都被被注入一個(gè)hibernateTemplate來與數(shù)據(jù)庫(kù)交互(參見applicationContext-dao.xml),而在applicationContext-db.xml中,說明了hibernateTemplate的由來,它最終會(huì)找到一個(gè)datasource從而找到數(shù)據(jù)庫(kù)。

          這樣,從前臺(tái)Struts2的控制器到后臺(tái)數(shù)據(jù)庫(kù),S2SH整個(gè)鏈條就被串起來了。

          posted on 2011-03-13 23:41 何楊 閱讀(613) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 信丰县| 平昌县| 贵州省| 景泰县| 阿图什市| 商城县| 台前县| 巧家县| 昌江| 红安县| 青龙| 呼伦贝尔市| 呼图壁县| 太湖县| 黔南| 兰溪市| 嘉禾县| 凉城县| 靖宇县| 和政县| 平山县| 中江县| 阜城县| 新密市| 乌兰浩特市| 芮城县| 正镶白旗| 海阳市| 延津县| 兴国县| 老河口市| 汝州市| 屯昌县| 临泉县| 洪洞县| 时尚| 西宁市| 连山| 中超| 武邑县| 昌黎县|