posts - 33, comments - 46, trackbacks - 0, articles - 2

          集成struts+spring的新思路

          Posted on 2007-01-11 17:27 在路上... 閱讀(2212) 評(píng)論(7)  編輯  收藏 所屬分類(lèi): JAVA相關(guān)

          網(wǎng)上有好多種struts+spring的集成思路,例如 http://dev.csdn.net/author/hql638/35679289a9a94e4f97e999508df064db.html
          這篇文章就介紹得很詳細(xì),介紹了下面三種方法:

          使用 Spring 的 ActionSupport 類(lèi)整合 Structs
          使用 Spring 的 DelegatingRequestProcessor 覆蓋 Struts 的 RequestProcessor
          將 Struts Action 管理委托給 Spring 框架
          其實(shí)在使用spring+struts時(shí),我們往往就是想使用Ioc的特性,減少業(yè)務(wù)邏輯組件之間的依賴(lài)關(guān)系,通過(guò)高度靈活的XML配置提高業(yè)務(wù)的靈活性和擴(kuò)展性。步驟如下:
          首先依舊加入spring的context plugin到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的DispatchAction,提供一個(gè)方法可以直接獲取Spring的WebApplicationContext對(duì)象。

          package ?com.cngd.dataview.action;?

          import ?org.apache.struts.actions.DispatchAction;
          import ?org.springframework.web.context.WebApplicationContext;
          import ?org.springframework.web.struts.DelegatingActionUtils;?

          /** ? */ /**
          ?*?Date:?2007-1-11?16:57:48
          ?*
          ?*?
          @author ?midea0978
          ?*?
          @version ?1.0
          ?
          */

          public ? class ?CommDispatchAction? extends ?DispatchAction? {
          ????
          protected ?WebApplicationContext?getAppContext()? {
          ????????WebApplicationContext?context?
          = ?DelegatingActionUtils.findRequiredWebApplicationContext( this .getServlet(),? null );
          ????????
          return ?context;
          ????}

          }
          ?


          然后自己的action可以直接從CommDispatchAction繼承通過(guò)this.getAppContext();獲取WebApplicationContext,這樣對(duì)原有的
          struts程序架構(gòu)體系幾乎沒(méi)有太大的變化,同時(shí)可以引入spring的Ioc特性到現(xiàn)有系統(tǒng)中,這個(gè)與ActionSupport 中的
          getWebApplicationContext()方法類(lèi)似了,但是可以不必拘泥于在兩者之間轉(zhuǎn)來(lái)轉(zhuǎn)去的。

          package ?com.cngd.dataview.action;?

          import ?com.spring.bo.WeatherService;
          import ?org.apache.log4j.Logger;
          import ?org.apache.struts.action.ActionForm;
          import ?org.apache.struts.action.ActionForward;
          import ?org.apache.struts.action.ActionMapping;
          import ?org.springframework.jdbc.core.JdbcTemplate;
          import ?org.springframework.jdbc.datasource.DriverManagerDataSource;
          import ?org.springframework.web.context.WebApplicationContext;?

          import ?javax.servlet.http.HttpServletRequest;
          import ?javax.servlet.http.HttpServletResponse;?

          /** ? */ /**
          ?*?Date:?2007-1-11?16:19:15
          ?*
          ?*?
          @author ?midea0978
          ?*?
          @version ?1.0
          ?
          */

          public ? class ?DataViewAction? extends ?CommDispatchAction? {
          ????
          static ?Logger?logger? = ?Logger.getLogger(DataViewAction. class .getName());?

          ????
          /** ? */ /**
          ?????*?
          @param ?actionMapping
          ?????*?
          @param ?actionForm
          ?????*?
          @param ?request
          ?????*?
          @param ?response
          ?????*?
          @return
          ?????*?
          @throws ?Exception
          ?????
          */

          ????
          public ?ActionForward?genReport(ActionMapping?actionMapping,?ActionForm?actionForm,?HttpServletRequest?request,?HttpServletResponse?response)
          ????????????
          throws ?Exception? {
          ????????String?yymm?
          = ?request.getParameter( " yymm " );
          ????????String?opname?
          = ?request.getParameter( " opname " );
          ????????logger.info(
          " 參數(shù): " ? + ?yymm? + ? " , " ? + ?opname);
          ????????WebApplicationContext?ctx?
          = ? this .getAppContext();
          ????????WeatherService?srv?
          = ?(WeatherService)?ctx.getBean( " weatherServiceBean " );
          ????????srv.showWeather();
          ????????DriverManagerDataSource?ds?
          = ?(DriverManagerDataSource)?ctx.getBean( " datasource " );
          ????????JdbcTemplate?jt?
          = ? new ?JdbcTemplate(ds);
          ????????String?sql?
          = ? " select?count(*)?from?tab " ;
          ????????
          int ?rows? = ?jt.queryForInt(sql);
          ????????System.out.println(rows);
          ????????
          return ?actionMapping.findForward( " viewresult " );
          ????}
          ?


          }
          ?

          Feedback

          # re: 集成struts+spring的新思路  回復(fù)  更多評(píng)論   

          2007-01-12 09:04 by jackhlp
          這樣集成的話(huà),具體的每一個(gè)Action都與Spring耦合在一起了,因?yàn)槟憷^承DispatchAction的類(lèi)里面返回的是一個(gè)WebApplicationContext。

          # re: 集成struts+spring的新思路  回復(fù)  更多評(píng)論   

          2007-01-13 21:53 by Christ Chang
          這個(gè)也算新思路?????????

          # re: 集成struts+spring的新思路  回復(fù)  更多評(píng)論   

          2007-01-13 22:47 by 千山鳥(niǎo)飛絕
          同意一樓的說(shuō)法,你這樣做,并沒(méi)有很好的利用spring的輕耦合的特點(diǎn)。
          IOC的目的之一也就是降低耦合。

          所以不覺(jué)得你這樣做有多好。

          # re: 集成struts+spring的新思路[未登錄](méi)  回復(fù)  更多評(píng)論   

          2007-01-22 14:02 by hiswing
          不管怎么說(shuō),還是值得鼓勵(lì)的。

          # re: 集成struts+spring的新思路  回復(fù)  更多評(píng)論   

          2007-01-27 19:02 by 別出風(fēng)頭了你
          其實(shí)這是模仿webwork和springMVC的一種和手段,目的就是為了,讓action中service不需要任何方式,只需要getter和setter的方式就可以得到,其實(shí)這也是為病入膏肓的struts1,一種補(bǔ)救,
          其實(shí)如果有必要的話(huà),你可以嘗試使用struts2,基于webwork的技術(shù),完全整合如spring,不需要任何東西,其實(shí)struts2的好處,不僅僅這么點(diǎn),具體的需要你自己領(lǐng)悟了。

          # re: 集成struts+spring的新思路  回復(fù)  更多評(píng)論   

          2007-01-28 12:50 by 剛才整合兩種
          我也是你這么整合的,但好像他們說(shuō)這樣不好。具體我也不知道。。郁悶呀。那大家提供一個(gè)好的方法來(lái)整合咯。。我要 學(xué)習(xí)!

          # re: 集成struts+spring的新思路  回復(fù)  更多評(píng)論   

          2007-07-15 12:02 by sclsch
          如果你可繼承一個(gè)action,而不是dispatchaction,怎么辦?
          主站蜘蛛池模板: 隆子县| 泰州市| 那坡县| 滨州市| 土默特右旗| 瑞安市| 习水县| 盘山县| 永川市| 阜南县| 循化| 安龙县| 红桥区| 渝北区| 张家口市| 徐闻县| 手游| 望江县| 长宁县| 会昌县| 绥宁县| 晋宁县| 犍为县| 黔江区| 淄博市| 英德市| 麻江县| 宁国市| 华池县| 广南县| 蒙城县| 彭阳县| 叙永县| 滨州市| 墨竹工卡县| 桂林市| 浑源县| 上林县| 通渭县| 玉门市| 罗山县|