posts - 7,  comments - 58,  trackbacks - 0


          Spring與Struts集成開發(fā)

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

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

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

          清楚Struts和Spring在系統(tǒng)結(jié)構(gòu)中分別充當?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) {//當容器實例化此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>
          舉個簡單的例子說明一下相關配置信息:
          假定有ExampleAction,ExampleBean,ExampleService這幾個類,它們工作流程是:
          用戶請求ExampleAction,ExampleAction調(diào)用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進行業(yè)務處理。標了紅色的"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時,就執(zhí)行這代理,代理會在Spring應用上下文中找到真正的Action,然后交給它處理用戶的請求。而真正用于處理用戶請求的Action的配置放在了Spring的配置文件中。這樣,Struts中的Action以及其依賴關系就可以用Spring容器來管理,比如將業(yè)務邏輯對象注入到Action中,供其使用。簡單片段<bean name="/exampleAction" class="org.myproj.struts.actions.ExampleAction">
          ....
          </bean>
          說明:用name屬性而不是用id來標識這個Bean,Spring不允許ID中出現(xiàn)"/",而name可以;"name"屬性值要和struts-config.xml文件中相應<action>元素中的path屬性值相同(<action path="/exampleAction"),這樣Action代理才能找到相應的Action來處理請求。

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


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

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

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


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

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          收藏夾

          博客好友

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阜南县| 仁化县| 临邑县| 高阳县| 北票市| 大足县| 克山县| 原平市| 洱源县| 建湖县| 远安县| 固始县| 东莞市| 谷城县| 汉川市| 怀远县| 无锡市| 灵石县| 抚顺市| 武川县| 宁海县| 大兴区| 太白县| 紫阳县| 福鼎市| 桐乡市| 贵阳市| 衡阳县| 康平县| 射洪县| 根河市| 婺源县| 克拉玛依市| 嘉黎县| 丰镇市| 葫芦岛市| 双江| 多伦县| 饶河县| 贵阳市| 阿坝县|