Spring Web Flow 入门demo(一)简单页面跳转 附源码
Spring Web Flow (SWF)是Spring Framework的一个脱离模块。这个模块是Spring Web应用开发模块栈的一部分,Spring Web包含Spring MVC。
Spring Web Flow的目标是成为管理Web应用页面流程的最佳方案。当你的应用需要复杂的导航控制,例如向导,在一个比较大的事务过程中去指导用户经过一连串的步骤的时候,SWF将会是一个功能强大的控制器。
下面我们还是从一个简单的demo开始了解它:
这个例子是结合Springmvc来实现,项目结构:
Web.xml配置:
对应的SpringMVC的配置文件:web-application-config.xml
其中引入的两个配置文件:webmvc-config.xml
对于UrlFilenameViewController类,此处理解为由于我们并不是通过访问controller来返回页面的形式,那么我们如何可以访问Web-INF下的保护类资源呢,就是通过这个类的作用来实现。此处的理解有什么偏差还请各位提出宝贵意见!
webflow-config.xml:
使用的流程文件:shopping.xml
对应的页面:
index.jsp
viewCart.jsp
viewOrder.jsp
orderConfirmed.jsp
这几个页面都使用了变量 flowExecutionUrl ,表示 flow 执行到当前状态时的 URL 。 flowExecutionUrl 的值已经由 Spring Web Flow 2.0 框架的代码进行赋值,并放入相应的 model 中供 view 访问。 flowExecutionUrl 的值包含 flow 在执行过程中会为每一状态生成的唯一的 key ,因此不可用其他手段来获取。请求参数中 _eventId 的值与shoppting.xml中 transition 元素的 on 属性的值是对应的,在接收到_eventId参数后,相应transition会被执行。
测试使用方式:
访问地址:http://localhost:8080/CartApp3/spring/index.jsp
总的来说,为什么要配置这么多内容呢?原因如下:
SpringWeb Flow 如何与 Spring Web MVC 整合在一起?
客户端发送的请求,先会由 servlet 容器(Tomcat)接收, servlet容器会找到相应的应用程序(CartApp3),再根据 web.xml 的配置找到出符合映射条件的 servlet 来处理。Spring Web MVC 中处理请求的 servlet 是 DispatcherServlet ,如果请求的路径满足 DispatcherServlet的映射条件,则 DispatcherServlet 会找出 Spring IoC 容器中所有的 HandlerMapping ,根据这些HandlerMapping 中匹配最好的 handler (一般情况下都是 controller ,即控制器)来处理请求。当 Controller处理完毕,一般都会返回一个 view (视图)的名字,DispatcherServlet再根据这个view的名字找到相应的视图资源返回给客户端。
弄清楚Spring Web MVC 处理请求的流程后,基本上就可以明白要整合 Spring Web MVC 与 Spring Web Flow所需要的配置了。为了让客户端的请求变成执行某个 flow 的请求,要解决以下几个问题:
- 需要在某个 HandlerMapping 中配置负责处理 flow 请求的 handler (或 controller )--配置controller(flowController)
- 该handler (或 controller )要负责启动指定的 flow--该controller负责启动flow(flowExecutor)
- flow 执行过程中以及执行完成后所涉及的视图应呈现给客户端--配置解析返回视图方式(viewResolvers)
所有这些配置的目的无非是两个:一是要让客户端的请求转变成flow 的执行,二是要让 flow 执行过程中、或执行结束后得到的视图能返还给客户端。