posts - 7,  comments - 58,  trackbacks - 0


          Spring與Struts集成開發(fā)

          最近喜歡將所學(xué)的東西理順一下,且發(fā)現(xiàn)寫blog可以達(dá)成這目的。
          那就來整理一下我對Spring與Struts集成開發(fā)的一些想法。

          首先確認(rèn)系統(tǒng)的結(jié)構(gòu)為三層的B/S模式結(jié)構(gòu),如下圖:

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

          清楚Struts和Spring在系統(tǒng)結(jié)構(gòu)中分別充當(dāng)?shù)慕巧螅酉聛硪懻摚?span style="color: #000000">如何實現(xiàn)集成
          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) {//當(dāng)容器實例化此Action時被容器調(diào)用
                     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>
          舉個簡單的例子說明一下相關(guān)配置信息:
          假定有ExampleAction,ExampleBean,ExampleService這幾個類,它們工作流程是:
          用戶請求ExampleAction,ExampleAction調(diào)用ExampleService的接口方法對ExampleBean進(jìn)行相關(guān)的操作。
          1、applicationContext.xml中配置相關(guān)的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)方法獲得相應(yīng)的bean進(jìn)行業(yè)務(wù)處理。標(biāo)了紅色的"beanKey"就是applicationContext.xml中<bean>元素定義的bean id,如:webApplicationContext.getBean("exampleBeanService")。@

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

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


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

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

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


          網(wǎng)站導(dǎo)航:
           
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          收藏夾

          博客好友

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 米脂县| 麻江县| 姚安县| 黄骅市| 汝阳县| 临邑县| 和静县| 民乐县| 偏关县| 郓城县| 大邑县| 靖边县| 宣威市| 深水埗区| 青田县| 洪泽县| 汉沽区| 寻甸| 通渭县| 田东县| 增城市| 当阳市| 营口市| 两当县| 中方县| 松江区| 宁南县| 进贤县| 马公市| 义马市| 容城县| 吉水县| 汕尾市| 布尔津县| 宁明县| 宕昌县| 怀安县| 罗源县| 漳平市| 邓州市| 青阳县|