posts - 7,  comments - 58,  trackbacks - 0


          Spring與Struts集成開發

          最近喜歡將所學的東西理順一下,且發現寫blog可以達成這目的。
          那就來整理一下我對Spring與Struts集成開發的一些想法。

          首先確認系統的結構為三層的B/S模式結構,如下圖:

          在圖中看出,Spring和Struts集成開發中,Spring在業務邏輯層被使用(集成)。因為Spring框架的依賴注入,AOP及可聲明的事務管理方面的技術優勢,使得用Spring來管理業務實體,實體之間的依賴關系,業務邏輯服務接口變得簡單且可配置。至此我們要清楚:Spring和Struts集成開發中,Spring在業務邏輯層被使用(集成)。

          清楚Struts和Spring在系統結構中分別充當的角色后,接下來要討論:如何實現集成
          1、使用Spring的ActionSurpert類集成Struts。
          org.springframework.web.struts.ActionSurpert是一個繼承org.apache.struts.action.Action的類,簡要代碼如下:
          public abstract class ActionSurpert extends Action {
               private WebApplicationContext webApplicationContext;
               public void setServlet(ActionServlet actionServlet) {//當容器實例化此Action時被容器調用
                     surper.setServlet(actionServlet);
                     if(actionServlet != null) {
                        this.webApplicationContext = initWebApplicationContext(actionServlet);//獲取webApplicationContext
                         //........
                     }else{
                       //.......
                     }           
               } 
               
               //通過getXXX()方法獲取   webApplicationContext 對象
               protected final WebApplictionContext getWebApplicationContext() {
                      return this.webApplicationContext;
              }
          }
          通過上述代碼可以看出,所有繼承了ActionSupport類的Action將可以通過WebApplicationContext對象的getBean(beanKey)方法獲得Spring配置文件中定義的各種Bean。
          WebApplicationContext要由Web Server來加載,有兩種方法:
          1、通過org.springframework.web.struts.ContextLoaderPlugIn加載,ContextLoaderPlugIn是個插件,需要在Struts配置文件中配置。
          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
             <set-property property = "contextConfigLocation" value="/WEB-INF/applicationContext.xml"></set-property>
          </plug-in>
          2、在web.xml文件中加載
          <context-param>
            <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/applicationContext.xml</param-value>
          </context-param>
          <servlet>
           <servlet-name>context</servlet-name>
          <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-name>
          <load-on-startup>1</load-on-startup>
          </servlet>
          舉個簡單的例子說明一下相關配置信息:
          假定有ExampleAction,ExampleBean,ExampleService這幾個類,它們工作流程是:
          用戶請求ExampleAction,ExampleAction調用ExampleService的接口方法對ExampleBean進行相關的操作。
          1、applicationContext.xml中配置相關的bean信息
          <beans>
          <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName">
             <value>com.mysql.jdbc.Driver</value>
            </property>
            <property name="url">
             <value>jdbc:mysql://localhost:3306/ssh?useUnicode=true&amp;characterEncoding=UTF-8</value>
            </property>
            <property name="username">
             <value>root</value>
            </property>
            <property name="password">
             <value>root</value>
            </property>
           </bean>
          <bean id="exampleBean" class="org.mypackge.beans.ExampleBean"/>
          <bean id="exampleBeanService" class="org.mypackge.services.ExampleService"/>@
          </beans>
          通過這樣配置后,在ExampleAction中可以用getWebApplicationContext() 獲得webApplicationContext對象,然后通過
          webApplicationContext的getBean(beanKey)方法獲得相應的bean進行業務處理。標了紅色的"beanKey"就是applicationContext.xml中<bean>元素定義的bean id,如:webApplicationContext.getBean("exampleBeanService")。@

          當然,ExampleAction還要在stuts-config.xml配置文件中配置,這里不作介紹。
          2、使用Spring的Action代理集成Struts
          這種集成方式的核心思想是,將Struts的配置文件中的所有Action的type屬性設為org.springframwork.web.struts.DelegationActionProxy。當用戶請求Action時,就執行這代理,代理會在Spring應用上下文中找到真正的Action,然后交給它處理用戶的請求。而真正用于處理用戶請求的Action的配置放在了Spring的配置文件中。這樣,Struts中的Action以及其依賴關系就可以用Spring容器來管理,比如將業務邏輯對象注入到Action中,供其使用。簡單片段<bean name="/exampleAction" class="org.myproj.struts.actions.ExampleAction">
          ....
          </bean>
          說明:用name屬性而不是用id來標識這個Bean,Spring不允許ID中出現"/",而name可以;"name"屬性值要和struts-config.xml文件中相應<action>元素中的path屬性值相同(<action path="/exampleAction"),這樣Action代理才能找到相應的Action來處理請求。

          歡迎討論,提出寶貴意見。


          posted on 2008-03-01 11:08 Sonny Li 閱讀(831) 評論(2)  編輯  收藏 所屬分類: 框架相關

          FeedBack:
          # re: Spring與Struts集成開發[未登錄]
          2008-03-03 11:23 | Paul Lin
          不錯不錯,很好很強大  回復  更多評論
            
          # re: Spring與Struts集成開發
          2008-05-09 22:36 |
          有前途。。很努力哦。。頂。。  回復  更多評論
            

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


          網站導航:
           
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          收藏夾

          博客好友

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南昌县| 武平县| 辉南县| 太仆寺旗| 平罗县| 冷水江市| 芮城县| 绥江县| 新兴县| 桂平市| 基隆市| 道孚县| 朝阳县| 延安市| 枣庄市| 壶关县| 清水县| 泌阳县| 肃宁县| 长泰县| 南阳市| 新野县| 乡宁县| 灵璧县| 芒康县| 确山县| 武冈市| 蓬莱市| 炎陵县| 肇东市| 万年县| 无锡市| 抚宁县| 吉林市| 曲沃县| 凤庆县| 威海市| 中阳县| 临桂县| 满城县| 南昌市|