心的方向

          新的征途......
          posts - 75,comments - 19,trackbacks - 0

          Spring與Struts如何整合

          轉自:http://lihaiyan.javaeye.com/blog/127812
          為了在Struts中加載Spring context,需要在struts-config.xml文件中加入如下部分:
          <struts-config>
            <plug-in
                   className="org.springframework.web.struts.ContextLoaderPlugIn">
               <set-property property="contextConfigLocation"
                   value="/WEB-INF/applicationContext.xml" />
            </plug-in>
          </struts-config>
          第一種方法:
              通過Struts的plug-in在Struts和Spring之間提供了良好的結合點。通過plug-in我們實現了Spring context的加載,不過僅僅加載Spring context并沒有什么實際的意義,還應該經過配置將Struts的Action交給Spring容器進行管理。
          <action-mappings>
            <action path="/login"
                       type="org.springframework.web.struts.DelegatingActionProxy"
                       name="loginForm">
                <forward name="success" path="/main.jsp" />
                <forward name="failure" path="/login.jsp" />
          </action>
              在form bean這個節點上與傳統的Struts配置沒有什么區別,而在Action上面則發生了變化。在傳統的action節點上type屬性寫入action類的完整類名,而和Spring結合后在這點上是使用了Spring提供的DelegatingActionProxy
          作為action的type屬性,DelegatingActionProxy同樣是org.apache.struts.action.Action的一個子類,它將把調用請求轉交給真正的Action實現。通過這樣的方式,Spring獲得了Action實例的管理權,它將對Action進行調度,并為Struts提供所需的Action實例。這樣,就可以將Action看作是Spring的一個bean,它就可以享受Spring的所有服務,如依賴注入、實例管理、事務管理等。
              在applicationContext.xml中相應的配置如下的節點:
          <beans>
          .......
              <bean name="/login" class="net.xiaxin.action.LoginAction"
                                     singleton="false">
                  <property name="userDAO">
                     <ref bean="userDAOProxy" />
                  </property>
              </bean>
          </beans>
              最后這個bean的配置是關鍵,這個名為“/login”的bean與Struts中的
          <action path="/login" ……>
          ……
          </action>
          節點相對應,這樣,Spring Bean Name與Struts Action Path相關聯,當Struts加載對應的Action時,DelegatingActionProxy就根據傳入的path屬性,在Spring Context尋找對應bean,并將其實例返回給Struts。與此同時,還可以看到,"/login" bean 中包含了一個userDAO 引用,Spring 在運行期將根據配置為其提供userDAO 實例,以及圍繞userDAO 的事務管理服務。這樣一來,對于Struts 開發而言,我們既可以延續Struts 的開發流程,也可以享受Spring 提供的事務管
          理服務。而bean 的另外一個屬性singleton="false",指明了Action 的實例獲取方式為每次重新創建。這也解決了Struts中令人詬病的線程安全問題。
          第二種方法:

          為了在 struts-config.xml 文件中配置 DelegatingRequestProcessor,你需要重載 <controller> 元素的 “processorClass” 屬性。 下面的幾行應該放在 <action-mapping> 元素的后面。

          <controller>
          <set-property property="processorClass"
          value="http://www.zhmy.com/org.springframework.web.struts.DelegatingRequestProcessor"/>
          </controller>

          增加這些設置之后,不管你查詢任何類型的 Action,Sping都自動在它的context配置文件中尋找。 實際上,你甚至不需要指定類型。下面兩個代碼片斷都可以工作:

          <action path="/user" type="com.whatever.struts.UserAction"/>
          <action path="/user"/>

          如果你使用 Struts 的 modules 特性,你的 bean 命名必須含有 module 的前綴。 舉個例子,如果一個 Action 的定義為 <action path="/user"/>,而且它的 module 前綴為“admin”, 那么它應該對應名為 <bean name="/admin/user"/> 的 bean

             
          如果你在 Struts 應用中使用了 Tiles,你需要配置 <controller> 為 DelegatingTilesRequestProcessor

          如果第二種方法不行,再用第一種方法。   
           至此,SS組合已經將Struts MVC以及Spring中的Bean管理、事務管理融為一體。如
          果算上userDAO 中的Hibernate 部分,我們就獲得了一個全面、成熟、高效、自頂而下的
          Web 開發框架。

          來源:http://deathmask1980.spaces.live.com/blog/cns!8633c46371110374!118.entry


          posted on 2008-04-10 16:46 阿偉 閱讀(781) 評論(0)  編輯  收藏 所屬分類: 框架整合
          主站蜘蛛池模板: 诸城市| 韶山市| 澎湖县| 怀宁县| 共和县| 大同县| 桐庐县| 洪泽县| 九江市| 太湖县| 肇州县| 安庆市| 新巴尔虎左旗| 勃利县| 望都县| 武山县| 陕西省| 北流市| 南安市| 金秀| 衡山县| 前郭尔| 连江县| 长武县| 阿巴嘎旗| 永福县| 聂拉木县| 砀山县| 兰考县| 长顺县| 民勤县| 神池县| 芦溪县| 建瓯市| 东平县| 凌源市| 闻喜县| 水富县| 德昌县| 利辛县| 襄汾县|