笔记36 Spring Web Flow——配置
Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序。Spring Web Flow是Spring MVC的扩展,它支持开发基于流程的应用程 序。它将流程的定义与实现流程行为的类和视图分离开来。在介绍Spring Web Flow的时候,我们将暂时放下Spittr样例并使用生成披萨订单的新Web应用程序。我们会使用Spring Web Flow来定义订 单流程。
一、在Spring中配置Web Flow
Spring Web Flow是构建于Spring MVC基础之上的。这意味着所有的流 程请求都需要首先经过Spring MVC的DispatcherServlet。我们 需要在Spring应用上下文中配置一些bean来处理流程请求并执行流 程。
现在,还不支持在Java中配置Spring Web Flow,所以我们别无选择, 只能在XML中对其进行配置。有一些bean会使用Spring Web Flow的 Spring配置文件命名空间来进行声明。因此,我们需要在上下文定义 XML文件中添加这个命名空间声明:

1.1 装配流程执行器
正如其名字所示,流程执行器(flow executor)驱动流程的执行。当 用户进入一个流程时,流程执行器会为用户创建并启动一个流程执行 实例。当流程暂停的时候(如为用户展示视图时),流程执行器会在 用户执行操作后恢复流程。 在Spring中,<flow:flow-executor>元素会创建一个流程执行 器:

尽管流程执行器负责创建和执行流程,但它并不负责加载流程定义。 这个责任落在了流程注册表(flow registry)身上,接下来我们会创建 它。
1.2 配置流程注册表
流程注册表(flow registry)的工作是加载流程定义并让流程执行器 能够使用它们。我们可以在Spring中使用<flow:flow-registry> 配置流程注册表,如下所示:

在这里的声明中,流程注册表会在“/WEB-INF/flows”目录下查找流程 定义,这是通过base-path属性指明的。依据<flow:flowlocation-pattern>元素的值,任何文件名以“-flow.xml”结尾的 XML文件都将视为流程定义。
所有的流程都是通过其ID来进行引用的。这里我们使用了 <flow:flow-location-pattern>元素,流程的ID就是相对于 base-path的路径——或者双星号所代表的路径。下图展示了示例 中的流程ID是如何计算的。

1.3 处理流程请求
DispatcherServlet一般将请求分发给 控制器。但是对于流程而言,我们需要一个FlowHandlerMapping 来帮助DispatcherServlet将流程请求发送给Spring Web Flow。 在Spring应用上下文中,FlowHandlerMapping的配置如下:

FlowHandlerMapping装配了流程注册表的引用,这 样它就能知道如何将请求的URL匹配到流程上。然而,FlowHandlerMapping的工作仅仅是将流程请求定向到 Spring Web Flow上,响应请求的 是FlowHandlerAdapter。FlowHandlerAdapter等同于Spring MVC的控制器,它会响应发送的流程请求并对其进行处 理。FlowHandlerAdapter可以像下面这样装配成一个Spring bean,如下所示:

这个处理适配器是DispatcherServlet和Spring Web Flow之间的 桥梁。它会处理流程请求并管理基于这些请求的流程。在这里,它装 配了流程执行器的引用,而后者是为所处理的请求执行流程的。
笔记36 Spring Web Flow——配置的更多相关文章
- Spring实战第八章学习笔记————使用Spring Web Flow
Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...
- 笔记42 Spring Web Flow——Demo(2)
转自:https://www.cnblogs.com/lyj-gyq/p/9117339.html 为了更好的理解披萨订购应用,再做一个小的Demo. 一.Spring Web Flow 2.0新特性 ...
- 笔记43 Spring Web Flow——订购披萨应用详解
一.项目的目录结构 二.订购流程总体设计 三.订购流程的详细设计 1.定义基本流程pizza-flow.xml <?xml version="1.0" encoding=&q ...
- 笔记41 Spring Web Flow——Demo
订购披萨的应用整体比较比较复杂,现拿出其中一个简化版的流程:即用户访问首页,然后输入电话号(假定未注册)后跳转到注册页面,注册完成后跳转到配送区域检查页面,最后再跳转回首页.通过这个简单的Demo用来 ...
- 笔记39 Spring Web Flow——订单流程(收集顾客信息)
如果你曾经订购过披萨,你可能会知道流程.他们首先会询问你的电 话号码.电话号码除了能够让送货司机在找不到你家的时候打电话给 你,还可以作为你在这个披萨店的标识.如果你是回头客,他们可以 使用这个电话号 ...
- 笔记38 Spring Web Flow——订单流程(定义基本流程)
做一个在线的披萨订购应用 实际上,订购披萨的过程可以很好地定义在一个流程中.我们首先从 构建一个高层次的流程开始,它定义了订购披萨的整体过程.接下 来,我们会将这个流程拆分成子流程,这些子流程在较低的 ...
- 笔记37 Spring Web Flow——流程的组件
在Spring Web Flow中,流程是由三个主要元素定义的:状态.转移和 流程数据. 一.状态 Spring Web Flow定义了五种不同类型的状态.通过选择Spring Web Flow的状态 ...
- 笔记40 Spring Web Flow——订单流程(构建订单)
二.订单子流程 在识别完顾客之后,主流程的下一件事情就是确定他们想要什么类型 的披萨.订单子流程就是用于提示用户创建披萨并将其放入订单中 的,如下图所示. showOrder状态位于订单子流程的中心位 ...
- 第8章—使用Spring Web Flow—Spring Web Flow的配置
Spring中配置Web Flow Spring Web Flow 是 Spring 的一个子项目,其最主要的目的是解决跨越多个请求的.用户与服务器之间的.有状态交互问题,比较适合任何比较复杂的.有状 ...
随机推荐
- spring 注入bean的两种方式
我们都知道,使用spring框架时,不用再使用new来实例化对象了,直接可以通过spring容器来注入即可. 而注入bean有两种方式: 一种是通过XML来配置的,分别有属性注入.构造函数注入和工厂方 ...
- JavaScript中的对象-创建对象的7种模式
文章来源:http://blog.csdn.net/u014346301/article/details/52204967 ECMA-262把对象定义为:”无需属性的集合,其属性可以包含基本值.对象或 ...
- 暴力穷举zip、rar压缩文件的密码
生成密码的方式类似与时钟,末尾遍历完了第k位所有的字符,就让第k位的前一位到下一位字符,第k位回到第0个字符. 对python还不太熟悉,效率比较低,但是能破解简单的密码. import zipfil ...
- 算法竞赛模板 动态规划之背包DP
① 01背包 有n件物品和一个容量为v的背包.第i件物品的价值是c[i],体积是w[i].求解将哪些物品装入背包可使价值总和最大. 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. ...
- 使用postman请求响应Invalid CORS request
响应结果 解决方法: 下载之后解压,在Chrome浏览器,打开扩展 chrome://extensions/ 点击“加载已解压的扩展程序”添加我们解压的包,或者直接拖拽.之后我们就可以看到Postma ...
- bzoj 2561
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2561 考虑做mst的时候,什么时候这条边不在这棵mst上呢? 就是比他小的权值的边讲这条边的 ...
- Linux 常用的一些操作
1.查看linux中某个端口是否被占用 1> 使用lsof lsof -i:端口号 查看该端口是否被占用 2> 使用netstat netstat -antpu |grep 80 ...
- HBase自定义MapReduce
HBase表数据的转移 在Hadoop阶段,我们编写的MR任务分别进程了Mapper和Reducer两个类,而在HBase中我们需要继承的是TableMapper和TableReducer两个类. 目 ...
- 剑指offer——数组中出现次数超过一半的数字(c++)
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- 排序算法(三)堆排序及有界堆排序Java实现及分析
1.堆排序基数排序适用于大小有界的东西,除了他之外,还有一种你可能遇到的其它专用排序算法:有界堆排序.如果你在处理非常大的数据集,你想要得到前 10 个或者前k个元素,其中k远小于n,它是很有用的. ...