public class GoogleSearchController implements Controller { private IGoogleSearchPort google; private String googleKey; public void setGoogle(IGoogleSearchPort google) { this.google = google; } public void setGoogleKey(String googleKey) { this.googleKey = googleKey; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String query = request.getParameter("query"); GoogleSearchResult result = // Google屬性定義忽略 // 使用Google業務對象 google.doGoogleSearch(this.googleKey, query,start, maxResults, filter, restrict, safeSearch, lr, ie, oe); return new ModelAndView("googleResults", "result", result); } }
這個代碼的原型IGoogleSearchPort是一個GLUE web 服務代理,由一個Spring FactoryBean返回。然而,Spring IoC將這個控制器從底層web 服務庫中隔離出來。也可以用一個簡單的Java 對象、測試樁、模擬對象或者用像下面要討論的EJB代理來實現這個接口。這個控制器沒有包含資源查找;除了支持它的web 交互的必要代碼外沒有別的東西了。
Spring也提供了對數據綁定、表單、向導和更復雜的工作流的支持。馬上要發表的這個系列文章中的一篇文章會詳細討論Spring MVC。
如果你的需求真的很復雜,你應該考慮Spring Web Flow,一個提供比傳統web MVC框架更高層次web 工作流抽象的強大的框架,它的架構師Keith Donald會在最近的TSS文章上討論它的。
一個不錯的Spring MVC框架的入門材料是Thomas Risberg的Spring MVC指南(http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step.html)。也可以看《Web MVC with the Spring Framework》 (http://www.springframework.org/docs/web_mvc.html)。
如果對你喜歡的MVC框架情有獨鐘,Spring的分層結構允許你使用MVC層以外的Spring的其他部分。我們有把Spring作為中間層管理和數據訪問但在web 層使用Struts、WebWork、Tapestry或JSF的用戶。
實現EJB
如果你選擇使用EJB,Spring可以令你從EJB實現和客戶端對EJB的訪問中獲益。將業務邏輯重構進EJB外觀后的POJO 中是一個被廣泛認同的最佳實踐。(和其它實踐相比,這使得對業務邏輯的單元測試更加容易,因為EJB極其依賴容器且很難獨立測試。)Spring為會話bean和消息驅動bean提供了好用的超類,通過自動加載包含在EJB Jar 文件中的基于一個XML文檔的BeanFactory來方便實現這點。
這意味著一個無狀態的會話EJB可以這樣來獲得并使用一個協作者:
import org.springframework.ejb.support.AbstractStatelessSessionBean; public class MyEJB extends AbstractStatelessSessionBean implements MyBusinessInterface { private MyPOJO myPOJO; protected void onEjbCreate() { this.myPOJO = getBeanFactory().getBean("myPOJO"); } public void myBusinessMethod() { this.myPOJO.invokeMethod(); } }
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/