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

實例說明如何集成Spring和Struts

2013-11-23 20:04:59  來源: Java開源技術 

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

  Struts和Spring

  Struts 代表了MVC第二類架構的實現在Struts中最重要的組件是ActionServletAction和 ActionForm 子類ActionServlet 代表controller他基於配置文件接受請求和 把這些請求轉發到相應的ActionForm和Action子類 ActionForm把用戶輸入的數據傳送到ActionAction調用商務層組件完成必要的操作最後提交到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/27911.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.