InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Spring Web Flow 2.0.0.RC1发布了,增加了对Ajax、JSF和安全的集成

作者 Slobojan, Donald and Grelle 译者 宋玮 发布于 2008年4月23日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
Java ,
Web框架 ,
开放源代码
标签
Spring IDE ,
JSF ,
Grails ,
Spring Web Flow ,
Spring框架

InfoQ与Spring Web团队的Keith Donald和Jeremy Grelle就Web Flow 2.0.0.RC1的发布进行了交流,这是Web Flow下一个主要版本的第一个产品发布候选。Web Flow是对Spring MVC的一个扩展,用来在Web应用程序中实现流程

Web Flow 2.0中有什么新特性?

Web Flow 2中有很多重要的新特性,例如:

改良的Ajax

首先,Web Flow 2引入了Ajax事件处理能力。你只需像处理任何其它Web Flow事件一样来处理Ajax事件就可以了,在处理事件之后,你的流程可以请求刷新UI的特定片断或部分。你可以在我们的Spring Travel例子中看到对这种局部刷新的支持(当页面返回到查询结果表时,或者在UI上显示验证错误信息时都可以看到这种局部刷新)。

我们在对Ajax的支持上比较有意思的一点是,当客户端Javascript不可用时,我们进行了适当的处理。试着访问一下Spring Travel应用,并将Javascript关掉。这个应用程序依然能够工作。

因此我们的Ajax支持实际上包含了两个部分:Web Flow结合服务器端来检测可以使用Ajax的客户端并根据请求进行局部展现;客户端,用于提交Ajax请求并将响应片断与页面联系起来。我们所提供的客户端叫做“Spring Javascript”,这是Web Flow分发包中的新模块,建立在Dojo 1.1之上,对Ajax及改进增强等等提供了一个干净、一致的API。

与Spring MVC更深度集成

Spring MVC和Web Flow是互补的:Spring MVC是Web应用开发的基础平台,而Web Flow是一个Controller扩展,用来实现流程(也就是会话——conversations),它是跨多个请求的有状态的用户交互。

因此Web Flow 2加深了与流行的Spring MVC平台的集成。现在,在无状态Spring MVC @Controllers中调用Flows更加容易了,而且对于Flow的产出,现在也可以更方便地映射到Controller上。在充满“mvc”风味的Spring Travel参考应用中可以看到这一点,其中混合使用了@Controller和flow。在参考应用中,网站的“shop”或搜索部分使用的是无状态的@Controllers来实现的,提供了完整的可书签化(bookmarkability)能力,订房功能使用的是有状态的Web Flow,为每个窗口隔离了订房应用交易。配合得非常好。

重构并扩展了JSF集成

在Web Flow还是版本1的时候,你可能已经在“传统”JSF应用里使用了Web Flow,其中JSF的FacesServlet处于控制地位,Web Flow试图通过使用PhaseListener和NavigationHandler来找到自己合适的位置。这对我们来说是一项艰巨的集成任务,而且曝露了不少难以解决的微妙问题,比如异常处理、并发性、安全性、以及持久性上下文管理。

在Web Flow 2中,JSF和Spring Web之间的关系颠倒过来了。实际上,用控制反转来理解这一变化是最好的方式。现在,不是Spring去适应JSF了,而是JSF来适应Spring,在我们熟悉的Spring MVC DispatcherServlet内使用Spring MVC和Web Flow扩展点来实现这一点。基本上,我们吸收了JSF的长处,即它的UI组件模型,并把它作为一种表现层技术带入到Spring MVC和Web Flow Controller模型中。这一集成方法立竿见影的好处是你可以重用所有现存Spring MVC基础架构,包括:你的URL mappings、异常处理策略、Spring安全性策略,而且你可以结合JSF组件快速构建UI。这种方式可你让有机会使用所有当今可找到的JSF组件库,其使用方式对于有Web MVC概念背景的开发者来说非常自然。

人们可能会认为如果使用这么独特的集成方法,肯定会有些限制。但是到目前为止我们还没有发现。我们已经成功证明你可以在Spring Web环境下运行所有主流JSF组件库。另外,我们也建立了自己的称为“Spring Faces”的小组件库,其使用Spring Javascript提供了一套用于声明客户端校验和Ajax Facelet的标签。Spring Travel参考应用的faces flavor展示了这一组件库的实际使用。

Spring安全集成

Web Flow 2 引入了对flow的安全性支持。只需简单地注解一个flow、state或transition为“安全的”,SecurityFlowExecutionListener就会确保当前用户具备启动flow、进入step或发起event的权限。

更简单的流程定义语言

在Web Flow 2中你还将发现,用于定义flow的核心语言更加简单了。例如,对我们的Spring Travel参考应用来说,基于Web Flow 1的版本由大约200行流程相关的应用程序代码组成,这些代码分别位于6个不同的部件中。在最新的2.0.0 RC1版本中,其集成了更多功能,流程相关代码只有93行,分布在2个部件中,代码量减少了约50%,需维护的文件数减少了4个。你可以自己去比较一下版本1的中flow版本2中的等同配置

新的模块特性

我们也已将流程的概念扩展为一个“可重用、自包含的应用程序控制器模块”。现在,在默认情况下,一个流程和所有其所依赖的资源(如views、messages和helpers)被打包在一起。按领域职责组织代码是最佳实践,在Web Flow 2中我们正尽力简化其使用。你可以从这个例子中看到这一点:在booking目录里,流程用于支持国际化的views和message bundles被打包在一起。

这一版本的原则是什么?

我要说这一版本的主要原则就是易用。Web Flow 1 是一个拥有许多特性的成熟框架,但是 Web Flow 2 走得更远,它使用全面简化的流程定义语言使一些常见任务更加容易实现。集成是主旋律,我们提供了与JSF、Spring Security、Unified EL、Spring Javascript、以及Rich Faces最好的集成。正如前面所提及的,我们与Spring MVC的集成也已经做了改进,我认为,Web Flow 2 重申了Spring MVC作为Spring web应用基础平台的重要地位,在其基础上可以插入其它扩展功能。

从1.0迁移到2.0有什么值得期待的重要变化?

对流程定义语言的简化是人们可以期待的。为了帮助用户从1.0升级到2.0,我们在发行版中包含了一个WebFlowUpgrader工具,它可以自动把版本1的流程转换为新的版本2的语法。

至于完整的变化列表,我推荐所有1.0用户去查阅新的reference guide以及2.0的参考应用,参考应用展示了最佳实践。我们将保证我们的社区能尽可能愉快地升级到2.0。

Spring Web Flow有哪些支持工具?

Web Flow定义工具是基于XML的,因此,你所需的首要工具是一个好的、schema感知的XML编辑器。Web Flow一般将应用程序行为委派给了Java领域模型和服务层,因此你需要一个好的Java IDE。在此基础上,Spring IDE项目提供了一个极好的Eclipse插件,允许你可视化配置Spring Web应用,而且还包含一个图形化的Web Flow编辑器。Spring IDE团队现在正在专注于Web Flow 2配套软件的工作。Christian Dupuis,Spring IDE和最近宣布的SpringSource Tools Suite的领导人,已经计划在五月份推出一个新的Web Flow 2配套软件。

SpringSource Tool Suite为开发Spring Web应用提供了一个完整的集成开发环境,包括对flow的支持。我们的团队已经编撰了几个面向任务的教程和运行时错误分析,并作为该套件beta版的一部分一起发布,将来我们还要提供更多内容。还有,最近宣布的SpringSource Application Management Suite将在其即将发布的1.0.0.RC2中为Web Flow执行引擎提供运行时可视化能力。

Wdb Flow开发未来的焦点,2.1版本的目标是什么?

对于2.1我已经有许多计划。声明模型校验是一个时髦的话题,我们将在2.1版中包含它。2.0里,我们已经对回传(postback)提供了自动检测和调用模型校验器的支持,因此基础已经是现成的了。下一步是让校验约束能够针对模型进行声明,并且这些约束在客户端和服务器端都被强制要求。

我想你还能在2.1版本中看到我们使用脚本语言来定义控制流程的探索。构建在Web Flow 2引擎之上的Grails,已经展示了基于Groovy的流程定义语言是可行的,我们正在与Graeme一起合作,将其GroovyFlowBuilder合并回Web Flow。另外,我认为我们有机会将流程定义语言拓展到我所称的“站点定义语言”,这样你可以以声明的方式定义整个网站宏观结构,网站中的一些元素是流程。这一想法的灵感来自Jesse James Garrett的Visual Vocabulary,我认为在这一领域有很多有趣的工作可以去做。

我们也在努力确保现在发生在Web Flow 2中的革新内容能够在有意义的前提下回归到Spring框架本身。比如,我们正在谋求把所有Web Flow和Spring Faces的Ajax特性带给那些使用JSP和Tiles的已有Spring MVC应用程序开发者。

查看英文原文:Spring Web Flow 2.0.0.RC1 Released; Adds Ajax, JSF, and Security Integration

译者 宋玮 有多年软件开发经验,长期担任技术管理和项目管理工作,一直关心开源软件的发展动态以及软件过程和敏捷开发的实践探索。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。