Spring Web Flow 入门demo(一)简单页面跳转 附源码


Spring Web Flow (SWF)是Spring Framework的一个脱离模块。这个模块是Spring Web应用开发模块栈的一部分,Spring Web包含Spring MVC。

Spring Web Flow的目标是成为管理Web应用页面流程的最佳方案。当你的应用需要复杂的导航控制,例如向导,在一个比较大的事务过程中去指导用户经过一连串的步骤的时候,SWF将会是一个功能强大的控制器。

 

下面我们还是从一个简单的demo开始了解它:

 

这个例子是结合Springmvc来实现,项目结构:


Spring Web Flow 入门demo(一)简单页面跳转 附源码_第1张图片


Web.xml配置:



  CartApp




  CartServlet
  
  org.springframework.web.servlet.DispatcherServlet
  
  
    contextConfigLocation 
     
	/WEB-INF/config/web-application-config.xml 
	 
   
  1


	
		CartServlet
		/spring/*
	
 
    
    index.jsp
  

对应的SpringMVC的配置文件:web-application-config.xml




	
	
	
	
	
	
	
	


其中引入的两个配置文件:webmvc-config.xml




    
    
    
       
	
		
		
		
		
		
		
	
	
	
	
		
		
		
			 /shopping.do=flowController 
		
		 
			
			
		 
	
	
	
		
	

对于UrlFilenameViewController类,此处理解为由于我们并不是通过访问controller来返回页面的形式,那么我们如何可以访问Web-INF下的保护类资源呢,就是通过这个类的作用来实现。此处的理解有什么偏差还请各位提出宝贵意见!

 

webflow-config.xml:




    
    
    
    
    
	
	
	
	
	
	
	
		
	
		
		
	
	
	
	
	
	
	
	
		
	

使用的流程文件:shopping.xml




 
	
	
	
		
		
	
	
		
		
	
	
		
		
	
	
	


对应的页面:

 

index.jsp






Cart Application


	

Hello!


View Cart  


viewCart.jsp



	

View Cart

Submit


viewOrder.jsp



	

Order

Confirm


orderConfirmed.jsp



	

Order Confirmed

Return to index

这几个页面都使用了变量 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 的请求,要解决以下几个问题:

  1. 需要在某个 HandlerMapping 中配置负责处理 flow 请求的 handler (或 controller )--配置controller(flowController)
  2. 该handler (或 controller )要负责启动指定的 flow--controller负责启动flow(flowExecutor)
  3. flow 执行过程中以及执行完成后所涉及的视图应呈现给客户端--配置解析返回视图方式(viewResolvers)

 

所有这些配置的目的无非是两个:一是要让客户端的请求转变成flow 的执行,二是要让 flow 执行过程中、或执行结束后得到的视图能返还给客户端。

 

 源码下载




你可能感兴趣的:(JAVA,Spring,Web,Flow)