Board logo

标题: Spring Web Flow 2.0 入门(2) [打印本页]

作者: look_w    时间: 2018-8-5 12:51     标题: Spring Web Flow 2.0 入门(2)

什么情况下可以使用 Spring Web Flow?前面讲了, Spring Web Flow 提供了描述业务流程的抽象能力,但对一种 Web 开发技术而言,仅有这些是不够的。同时, Spring Web Flow 是不是能够取代其他 Web MVC 技术?或者在任何情况下都应优先使用 Spring Web Flow ?要回答这些问题,先来看一下 Spring Web Flow 所着力解决的技术问题。
Web 应用程序的三种范围Java Servlet 规范为 Web 应用程序中用到的各种对象规定了三种范围( scope ),分别是 request 范围、 session 范围和 application 范围。
现实开发中最令人头痛的莫过于 session 范围, Java Servlet 规范指明可在 web.xml 中按如下方式配置 session 的有效时间为100分钟:
清单 2 web.xml 中 session 的配置
1
2
3
<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 中提供了以下两种范围:
subflow 定义被其他 flow 所调用的 flow 即可称为 subflow。

由于 flow 是由开发人员自己定义的,可根据业务的需求自由改变, flow 范围和 conversation 范围的使用也就突破了 Java Servlet 规范中 session 范围和 request 范围的局限,真正做到了自由定制。
并非所有情形都适用 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://bbs.eccn.com/) Powered by Discuz! 7.0.0