快速业务通道

Spring Web Flow 2.0入门 - 什么情况下可以使用Spring Web Flow? - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

Spring Web Flow 2.0入门 - 什么情况下可以使用Spring Web Flow?

时间:2011-02-01 IBM 吕焱飞

前面讲了,Spring Web Flow 提供了描述业务流程的抽象能力,但对一种 Web 开发技术而言,仅有这些是不够的。同时,Spring Web Flow 是不是能够取代其他 Web MVC 技术?或者在任何情况下都应优先使用 Spring Web Flow ?要回答这些问题,先来看一下 Spring Web Flow 所着力解决的技术问题。

Web 应用程序的三种范围

Java Servlet 规范为 Web 应用程序中用到的各种对象规定了三种范围( scope ),分别是 request 范围、 session 范围和 application 范围。

request 范围中的对象是跟客户的请求绑定在一起的,每次请求结束都会销毁对象,而新的请求过来时又会重新创建对象。 request 范围适合存放数据量较大的临时数据。

session 范围中的对象是跟会话( session )绑定在一起的,每次会话结束会销毁这些对象,而新的会话中又会重新创建。 HTTP 协议本身是无状态的,服务器和客户端要实现会话的管理,只能借助于一些辅助的手段,如在协议的数据包中加一些隐藏的记号,等等。 session 范围适合存放本次会话需要保留的数据。

application 范围的对象是跟应用程序本身绑定在一起,从 Servlet API 的角度来讲,就是存放在 ServletContext 中的对象,它们随着 Servlet 的启动而创建,Servlet 关闭时才会销毁。 application 范围适合存放那些与应用程序全局相关的数据。

现实开发中最令人头痛的莫过于 session 范围,Java Servlet 规范指明可在 web.xml 中按如下方式配置 session 的有效时间为100分钟:

清单 2 web.xml 中 session 的配置

<session-config> <session-timeout>100</session-timeout> </session-config>

然而,现实中的 session 范围更像是“鸡肋”,把大量数据放入 session 会导致严重的效率问题,在分布式的环境中处理 session 范围更是一不小心就会出错,但抛弃 session 又会给开发带来许多不便。 request 范围虽说能存放量大的数据,但有效范围有限。摆在开发者面前的很多用例都要求一种比 request 范围要长,但又比 session 范围要短的这么一种有效范围。

Spring Web Flow 的解决方案

针对 Java Servlet 规范中的这个缺陷,Spring Web Flow 2.0 中提供了以下两种范围:

flow 范围。此范围内的对象在 flow 开始时创建,flow 结束时销毁,在 flow 定义文件中可通过“ flowScope ”变量名来访问。

conversation 范围。此范围内的对象与 flow 范围对象基本相似,唯一不同在于 conversation 范围内的对象所在的 flow 如果调用了其他 subflow ,那么在 subflow 中也可访问该对象。

备注:subflow 定义:被其他 flow 所调用的 flow 即可称为 subflow。

由于 flow 是由开发人员自己定义的,可根据业务的需求自由改变,flow 范围和 conversation 范围的使用也就突破了 Java Servlet 规范中 session 范围和 request 范围的局限,真正做到了自由定制。

Spring Web Flow 2.0入门 - 什么情况下可以使用Spring Web Flow?(2)

时间:2011-02-01 IBM 吕焱飞

并非所有情形都适用 Spring Web Flow

可以看出,Spring Web Flow 所着力解决的问题即是客户端与服务器的对话( conversation )问题,这个范围比 request 要长,而比 session 要短。为实现 conversation 范围(即 flow 范围),需要付出效率上的代价,因此,并非所有 Web 应用都适合使用 Spring Web Flow 。 Seth Ladd 等人所著 Expert Spring MVC and Web Flow 一书,对何时使用Spring Web Flow,列出了如下表格。

表 1 何时使用 Spring Web Flow

解决方案 何时使用
Spring MVC Controller 某个单独的、只需较少业务逻辑就可创建的页面,同时该页面不是 flow 的一部分
Spring MVC SimpleFormController 某个只涉及表单提交的页面,如一个搜索框
Spring MVC AbstractWizardFormController 由一系列导航页面组成的业务过程
Spring Web Flow 任何比较复杂的、有状态的、需要在多个页面之间跳转的业务过程

Spring Web Flow 的其他特点

Web Flow 作为一个单独的概念被提出来,也可算是 Spring Web Flow 的一大亮点。目前大多数 Web MVC 框架都把重点把在各种 controller 和形形色色的 view 技术上面,对 Web 应用流程本身的关注是不够的,Web Flow 的提出就提供了一层抽象,设计者就可以从 Web Flow 抽象层面来进行设计、开发。当然,Web Flow 不能理解为只是 Web 页面间的跳转流程,定义 Spring Web Flow 的语义并非只限于页面之间的跳转,而可以是 Web 应用中的各种行为。由此,用例的模型建构好以后,就可直接从该模型转换到相应的 Web Flow,开发人员的设计变得更加直观、有效。

另外,在 Spring Web Flow 中重用 Web Flow 是比较容易的。在定义 flow 、 state 时可通过继承某个已有的 flow 或 state ,来避免重复定义。同时,一个 flow 可以调用其它 flow ,就跟一般程序语言中在某个函数内部调用其它函数一样方便。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号