熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

如何有效的集成Spring和Struts

2013-11-23 20:07:03  來源: Java開源技術 

  本文想通過一個簡單的實例闡述如何集成Spring和Struts

  Struts和Spring

  Struts 代表了MVC第二類架構的實現在Struts中最重要的組件是ActionServlet Action和 ActionForm 子類ActionServlet 代表controller他基於配置文件接受請求和 把這些請求轉發到相應的ActionForm和Action子類 ActionForm把用戶輸入的數據傳送到Action Action調用商務層組件完成必要的操作最後提交到viewActionServlet使用一個配置文件(strutsconfigxml)加載Action子類的定義用以接受用戶請求基於請求URL controller 找到一個action定義去接受這個請求 Struts構件處理用戶請求 檢查配置文件 完成相應的動作

  Spring是一種輕量級的容器它使得使用一個外部XML配置文件非常容易綁定對象每個對象能夠通過列出JavaBean屬性得到一個依賴對象的指針通過綁定XML配置文件使剩下的工作更加簡單依賴注入(DI)是非常強大的功能Spring支持可插拔的事務管理器提供事物管理方式更多的選擇 它集成了持久性的架構同時也提供了一個統一的exception 分類Spring也提供面向方面(AOP)編程的簡單機制

  Struts和Spring的集成

  將Struts應用集成到Spring框架可以采用多種方法首先Spring明顯地被設計用於解決JEE的現實問題如復雜性性能低下可測試性及其他;第二Spring框架包括一個AOP實現讓你可以使用面向方面的程序設計技術;第三 Spring 框架可以能夠非常容易地管理和協調Struts;和Struts類似 Spring也包含MVC 實現兩個架構都有優缺點Struts是MVC最重要的架構很多開發團隊學會了依靠Struts在規定時限內開發出高質量的軟件因此開發團隊寧願集成Spring的功能也不願意轉到Spring MVC;好消息是Spring的結構允許你集成Struts Web 框架基於Spring的業務層和持久層我們的方法是應用Spring中的ActionSupport類去集成Struts

  加載應用的context

  首先我們需要使用Spring中的ContextLoaderPlugin為Struts ActionServlet去裝載Spring應用的上下文簡單在strutsconfigxml 文件中增加plugin如下()所示

         < ?xml version= encoding=ISO ?>

  < !DOCTYPE strutsconfig PUBLIC

  //Apache Software Foundation//DTD Struts Configuration //EN

  config__dtd>

  < strutsconfig>

  < formbeans>

  < formbean name=searchForm

  type=orgapachestrutsvalidatorDynaValidatorForm>

  < formproperty name=cardno type=javalangString/>

  < /formbean>

  < /formbeans>

  < globalforwards type=orgapachestrutsactionActionForward>

  < forward name=welcome path=/welcomedo/>

  < forward name=searchEntry path=/searchEntrydo/>

  < forward name=searchSubmit path=/searchSubmitdo/>

  < /globalforwards>

  < actionmappings>

  < action path=/welcome forward=/WEBINF/pages//>

  < action path=/searchEntry forward=/WEBINF/pages/searchjsp/>

  < action path=/searchSubmit

  type= tekCreditcardactionsSearchSubmit

  input=/searchEntrydo

  validate=true

  name=searchForm>

  < forward name=success path=/WEBINF/pages/detailjsp/>

  < forward name=failure path=/WEBINF/pages/searchjsp/>

  < /action>

  < /actionmappings>

  < messageresources parameter=ApplicationResources/>

  < plugin className=orgapachestrutsvalidatorValidatorPlugIn>

  < setproperty property=pathnames value=/WEBINF/validatorrulesxml/WEBINF/validationxml/>

  < /plugin>

  < plugin className=orgspringframeworkwebstrutsContextLoaderPlugIn> ()

  < setproperty property=contextConfigLocation value=/WEBINF/beansxml/>

  < /plugin>

  < /strutsconfig>

  使用Spring的ActionSupport類

  要用Spring去集成Struts創建一個Spring 上下文是必須要做的 orgspringframeworkwebstrutsActionSupport 類提供一個 getWebApplicationContext() 方法非常容易地獲得Spring上下文全部你需要去做的是從Spring的ActionSupport 代替Struts 中的Action類去延伸你的action如下所示

         package tekCreditcardactions;

  import javaioIOException;

  import javaxservletServletException;

  import javaxservlethttpHttpServletRequest;

  import javaxservlethttpHttpServletResponse;

  import orgapachestrutsactionActionError;

  import orgapachestrutsactionActionErrors;

  import orgapachestrutsactionActionForm;

  import orgapachestrutsactionActionForward;

  import orgapachestrutsactionActionMapping;

  import orgapachestrutsactionDynaActionForm;

  import orgntextApplicationContext;

  import orgspringframeworkwebstrutsActionSupport;

  import com infotekCreditcardbeansCreditcard;

  import com infotekCreditcardbusinessCreditcardService;

  public class SearchSubmit extends ActionSupport { |()

  public ActionForward execute(ActionMapping mappingActionForm form

  HttpServletRequest requestHttpServletResponse response)

  throws IOException ServletException {

  DynaActionForm searchForm = (DynaActionForm) form;

  String isbn = (String) searchFormget(cardno);

  //the old fashion way

  //CreditcardService creditcardService = new CreditcardServiceImpl();

  ApplicationContext ctx = getWebApplicationContext(); |()

  CreditcardService creditcardService =

  (CreditcardService ) ctxgetBean(creditcardService); |()

  CreditCard creditard = CreditCardServiceread(cardnotrim());

  if (null == creditard) {

  ActionErrors errors = new ActionErrors();

  errorsadd(ActionErrorsGLOBAL_ERRORnew ActionError (messagenotfound));

  saveErrors(request errors);

  return mappingfindForward(failure) ;

  }

  requestsetAttribute(creditcard creditcard);

  return mappingfindForward(success);

  }

  }

  在()中我們 通過延伸Spring ActionSupport 類而不是Struts Action 類創建了一個action;在()中我們使用getWebApplicationContext()方法獲得一個ApplicationContext;為了獲得商務服務 在()中我們使用ApplicationContext去查找Spring bean;這個技術非常容易理解不幸的是它把Struts的action和Spring framework綁定了如果你想替換Spring你不得不重寫代碼而且Struts的action不在Spring的控制之下 遺憾的是這種方法無法獲得Spring AOP的好處

  結論

  本文我們嘗試使用Spring的ActionSupportContextLoaderPlugIn去集成Struts這是一種最高效的和最簡單的方式另外還可用Spring中的代理子類去代理Struts中的RequestProcessor和代理Struts的actions


From:http://tw.wingwit.com/Article/program/Java/ky/201311/27958.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.