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(); } }
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/