當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

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

          <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參數定義了要載入Spring上下文的配置文件,這里采用了通配符的方式,也可以通過逗號符來分隔多個文件。
          以上第二段XML定義了一個監聽器,它適用于Servlet2.3及其以上版本,這個監聽器會隨著WebApp的啟動而啟動,并加載contextConfigLocation參數中定義好的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中的相應配置為:

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

          由上面的XML知道,如果我們取得名為checkSoleContractNameAction的bean,Spring將通過反射調用一個com.heyang.module.contract.action.CheckSoleContractNameAction類的實例,并將一個名為contractService的bean注入進去,當然CheckSoleContractNameAction需要擁有此屬性并具備對應的setter/getter。

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

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

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

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

          這樣,從前臺Struts2的控制器到后臺數據庫,S2SH整個鏈條就被串起來了。

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 扬中市| 稻城县| 闸北区| 石楼县| 万荣县| 浦县| 罗山县| 德保县| 无为县| 昆明市| 新和县| 浮山县| 大庆市| 犍为县| 永福县| 汝城县| 万山特区| 平顺县| 郁南县| 遂溪县| 广东省| 莆田市| 景德镇市| 郎溪县| 岚皋县| 雷波县| 吉林市| 潼关县| 电白县| 和田市| 安溪县| 马边| 璧山县| 永丰县| 兰州市| 开鲁县| 大丰市| 东兰县| 翁源县| 雅安市| 理塘县|