1、1 翻译文稿 1、 Spring 的 web MVC 构架模式 Juergen Hoeller 1.介绍: Spring 应用构架 当你第一次看到 Spring 的时候,你一定会说 :哦不,又一种 web 构架 .这篇文章将告诉你 Spring 明显区别于其他轻量级 application framework, 它将专注于 web 的支持,与 struts 和 webwork 有着明显的区别。 在和 struts 和 webwork 的对比上 ,Spring 是一个服务于所有层面的application framework:提供了 bean 的 配置基础, AOP 的支持, JDBC 的提取框
2、架,抽象事务支持,等等。它有一个非常显著的特点:在某个层面上如果你不需要 Spring 的支持,你就可以不使用 String 的 class,只使用它的某一部分的功能。 从它的设计理念,你可以看到 String 帮助你实现了真正的逻辑层和 web层的分离:例如。一个校验应用将不用依靠 controllers,就可以实现。这样的目标是 更好的重用和易测:过分依靠不必要的容器和框架将不能实现这一点。 当然 ,Spring 的自己的 web 支持和通常框架模式的细致完整 .然而, Spring替换 struts,webwork 或者其他的 web 方案非常的容易 .对于 Spring 的 web 支
3、持或者不同的地方, Spring 允许你在 web 容器里面建立一个中间层,在测试环境或者标准独立的应用里面来设置重用你的商务逻辑 .还有在 J2EE 环境里面,你的商务逻辑不必依靠容器提供的服务,像 JTA ,EJB 的支持 .良好的构架的 web 应用可以运行在任何容器上,如, Tomcat 或者 Resin. 值得注意的是, Spring 不是和已经存在的解决方案进行竞争 . 我们鼓励结合标准的技术,如, Servlet, JSP, JTA, JNDI, JDBC, and JDO, 和非常匹配的工具,如, Hibernate, Velocity, Log4J, and Cauchos
4、Hessian/Burlap.这个框架的的设计思想是在你的应用需要改良的时候,你将会做一些技术的选择 :例如 ,如果你需要分布式事务处理,你可能需要用 Spring 的 Jta TransactionManager 来实现 JTA 服务 .或者,用DataSourceTransactionManager or HibernateTransactionManager 来实现美妙完美的 单个数据库交换。 2. Web MVC:Spring web 框架的设计思想 2 Spring 框架通过配置操作 mappings,展示 resolution,本地化和模版集成围绕着分派请求操作的 servlet
5、- DispatcherServlet 设计的 .缺省的操作是一个非常简单的控制接口 , 他只提供了 ModelAndView handleRequest(request,response)方法 .这将用于一个应用的控制 ,但是 ,如果你想包含多个层次的控制, AbstractController, AbstractCommandController, MultiActionController, SimpleFormController, AbstractWizardFormController 将帮助你完成 .应用控制将代表那些子系统 .注意,你可以选择一个适当的基类 :如果你没有 web
6、 form,你就不必用FormController.这就是和 Struts 最大的不同 . 你可以通过命令或者 form 对象来操作任何对象 :这不需要接口工具或者一个基础类的驱动 .Spring 的数据邦定是非常的灵活的 .举例来说 ,它描述了具有在应用范围内 的校验错误的输入机制 ,但不是系统错误 .所以在你的 form 对象里面你不必复制你的业务对象的 string属性 ,只操作出错的子任务 ,或者适当地转换 string.换句话说 ,它通常可以很好的直接邦定你的业务对象 . 这也是和 struts 围绕请求基础类 Action 和 ActionForm (每个 action 操作类型
7、) 建立主要的不同之一 . 对比WebWork,Sping 更多的区别在于对象角色 :Sping 支持控制器的感念 ,一个操作命令或者 form对象 ,和得到数据传递给视图的模式 .这个模式通常包含命令和 form对象 ,但有时 也包含任意的参考数据 .换句话说 ,一个 WebWork Action联合所有这些角色到一个单独的对象 .WebWork 允许你用已经存在的业务对象作为你 form 的一部分 ,但是只生成各自 Action 的 bean 属性 . 最后 ,操作请求的 Action 实例在一个视图里面获得付值和 form population. 然而 ,参考数据也需要作为Action
8、的属性被模拟 . 一个类里面有太多的角色是值得讨论的 . 关于视图 :Spring 的视图方案非常的灵活 . 一个控制器执行可以通过 response 返回ModelAndView 对象 null,就可以直接写到一个视图 .在通常的状况下 ,一个ModelAndView 实例结合了 一个 view 和一个 model Map,包含了 bean name 和 通讯对象 (像命令或者 form,参考数据等等 ). View 名称是非常高端的的配置,不是通过 bean name, 一个 properties 文件就是通过你自己的 ViewResolver.这个抽象的 model Map 允许你在视图
9、层面完成提取 ,没有任何的争辩 JSP/Velocity3 或者其他 ,每一种都可以直接完整使用 .这个 model Map 还可以 简单得得到适当的格式化数据的转换 ,像 JSP 请求属性或者 Velocity 模版模式 . 3.集成 :用 Spring 一个不同 web 框架 许多开发团队将为他们已有的项目或者新的项目已经获得的期限和工具进行投资 .这里没有像 Struts 那样大量的图书和工具,但是同样我们有大量的拥有Spring 开发技巧的开发人员 .然而 ,如果你愿意生活在 Struts 的构架瑕疵中的话,他将是你在 web 层开发不错的选择 .当然,其他应用也是一样 . 如果你不想
10、用 Spring 的 web MVC ,但是想借用 Spring 嫁接其他的解决方案 ,你可 以非常简单地通过 Spring 继承你自己的 web 框架 .你可以非常简单地通过ContextLoaderListener 启动一个 Spring root application context, 并且 ,通过 Struts 或者 WebWork 的 action 利用 ServletContext 属性 (或者 Spring 的 helper 方法 )存取它 . 值得注意的是 , 这里没有任何的 plugins被调用 ,因此没有专门的集成 :来自 web 层的视图 , 你可以简单的将 Sprin
11、g 作为一个管理application context 实例入口点的类库 . 所有你注册 bean和 Spring服务都可以在不需要 Spring 的 web MVC 的情况下都可以被你轻松掌握 .Spring 不是和Struts ,WebWork 这些应用进行竞争 ,它将作为一个纯 web 框架应用于 很多领域 ,因为它不需要配置数据存储和事务操作 .所以 ,你可以利用 Spring 提供的中间层和数据存储层来丰富你的应用 ,甚至 ,你想用 JDBC或者 Hibernate进行事务抽象 . 4.特点核对列表 如果聚焦于 web 支持 ,Spring 的一些显著特点是 : 清楚地角色分离 :c
12、ontroller , validator , command object , form object , model object,和 DispatcherServlet , handler mapping vs view resolver, 等等 强大而且直接的框架和作为 JavaBeans 的应用配置 ,包括简单的参照和应用内容 ,例如 ,从web 控制器到业务对象和数据校验 . 适应性 ,外挂 :无论什么样的控制器你都需要得到代替 Action/ActionForm 所做的每件事情的方案 (简单 ,命令 ,form,范例 ,多重 action,或者定制一个 ) 重用业务逻辑代码 ,不需要复制 :你可以用已经有的业务逻辑对象作为命令或则 form对象代替反射特定的 ActionForm子类 . 可订制的邦定和数据校验 :作为应用级的输入机制的错误校验 ,固定日期和数字邦定 ,例如 ,通过手动检查和转换业务对象来替换单个的 string。 可订制的操作 ,可订