资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
SpringWebFlow2.0入门本教程分析了SpringWebFlow2.0的技术要点,并且通过创建一个示例应用程序,展示了SpringWebFlow2.0的基本知识。开始之前关于本教程本教程通过一个简化的购物车应用,介绍了如何使用SpringWebFlow2.0来构建Web应用程序。本教程以讲解实例为主,为了读者更好地理解SpringWebFlow,也有部分理论的解释。先决条件本教程要求读者具备JavaWeb应用的基本知识、熟悉SpringFramework的应用。系统要求运行本教程中的示例,需要下列工具:JDK1.6.0+SpringFramework2.5.4+及其依赖项SpringWebFlow2.0.2Tomcat6.0.0+(为支持EL,Tomcat须6.0及以上版本)eclipse3.2.2+SpringWebFlow2.0新特性SpringWebFlow是Spring的一个子项目,其最主要的目的是解决跨越多个请求的、用户与服务器之间的、有状态交互问题。最新版本为2.0,相比于1.x版的SpringWebFlow,有以下几个值得注意的新特性。与SpringMVC深度整合SpringWebFlow1.x是个自成体系的框架,可与SpringWebMVC、Struts、JSF等Web框架整合。最新的SpringWebFlow2.0则明确声明是基于SpringWebMVC的一个扩展。提供了处理Ajax事件的能力Ajax事件的处理与WebFlow事件的处理相一致,在处理完成后,flow即可刷新客户端相关界面代码。通过将JSF层层包装,最终可在SpringFramework和SpringWetFlow中使用JSF的各种组件。与SpringSecurity(原AcegiSecurity)整合只需将某个flow声明为“secured”,即可利用SpringSecurity来确定当前用户是否有权限运行flow、激发事件等等。更简洁的配置官方的数据说同一个flow,2.0版的配置比1.x版的配置少50%的XML代码。重用更方便SpringWebFlow2.0提供了flow的继承,重用即有的flow代码更加容易。本教程的说明本教程主要讨论WebFlow模块的使用,对其他的特性没有涉及。购物车用例要了解SpringWebFlow是什么东西,最好的办法莫过于查看示例,图1展示了一个简化的购物车的流程。图1购物车示例(查看购物征)生成订单显示订单)确认显示确认信息图1所示流程用SpringWebFlow2.0的配置文件表示如下:清单1用SpringWebFlow语义表达购物车流程清单1省略了许多技术细节,展示的只是一个业务的流程,主要是为了让大家对SpringWebFlow的语义有个初始的印象。从清单1中,应注意到一个很重要的特征SpringWebFlow语义与ServletAPI无关。更确切地讲,SpringWebFlow语义关注的是业务的流程,并未与Sun公司的Web规范紧密结合,这种描述是更高层次的抽象,差不多是在建模的角度来描述业务流程。不过,SpringWebFlow也并非只有抽象,现在还没有哪一种工具或语言可以将一个模型直接转换成相应的应用程序。SpringWebFlow更像是抽象建模和技术细节的混血儿,相比于湮没在繁多的控制器和视图中的WebMVC应用来讲,SpringWebFlow提供了如清单1所描述的更高层次的抽象,但同时它也整合了像UnifiedEL这样的工具来控制技术上的细节。SpringWebFlow的基本元素Flow可看作是客户端与服务器的一次对话(conversation)。Flow的完成要由分多个步骤来实现,在SpringWebFlow的语义中,步骤指的就是state。SpringWebFlow提供了五种state,分别是ActionState、ViewState、SubflowState、DecisionState、EndState,这些state可用于定义flow执行过程中的各个步骤。除了EndState外,其他state都可以转换到别的state,一般通过在state中定义transition来实现到其他state的转换,转换的发生一般由事件(event)来触发。什么情况下可以使用SpringWebFlow?前面讲了,SpringWebFlow提供了描述业务流程的抽象能力,但对一种Web开发技术而言,仅有这些是不够的。同时,SpringWebFlow是不是能够取代其他WebMVC技术?或者在任何情况下都应优先使用SpringWebFlow?要回答这些问题,先来看一下SpringWebFlow所着力解决的技术问题。Web应用程序的三种范围JavaServlet规范为Web应用程序中用到的各种对象规定了三种范围scope),分别是request范围、session范围和application范围。request范围中的对象是跟客户的请求绑定在一起的,每次请求结束都会销毁对象,而新的请求过来时又会重新创建对象。request范围适合存放数据量较大的临时数据。session范围中的对象是跟会话(session)绑定在一起的,每次会话结束会销毁这些对象,而新的会话中又会重新创建。HTTP协议本身是无状态的,服务器和客户端要实现会话的管理,只能借助于一些辅助的手段,如在协议的数据包中加一些隐藏的记号,等等。session范围适合存放本次会话需要保留的数据。application范围的对象是跟应用程序本身绑定在一起,从ServletAPI的角度来讲,就是存放在ServletContext中的对象,它们随着Servlet的启动而创建,Servlet关闭时才会销毁。application范围适合存放那些与应用程序全局相关的数据。现实开发中最令人头痛的莫过于session范围,JavaServlet规范指明可在web.xml中按如下方式配置session的有效时间为100分钟:清单2web.xml中session的配置100然而,现实中的session范围更像是“鸡肋”,把大量数据放入session会导致严重的效率问题,在分布式的环境中处理session范围更是一不小心就会出错,但抛弃session又会给开发带来许多不便。request范围虽说能存放量大的数据,但有效范围有限。摆在开发者面前的很多用例都要求一种比request范围要长,但又比session范围要短的这么一种有效范围。SpringWebFlow的解决方案针对JavaServlet规范中的这个缺陷,SpringWebFlow2.0中提供了以下两种范围:flow范围。此范围内的对象在flow开始时创建,flow结束时销毁,在flow定义文件中可通过“flowScope”变量名来访问。conversation范围。此范围内的对象与flow范围对象基本相似,唯一不同在于conversation范围内的对象所在的flow如果调用了其他subflow,那么在subflow中也可访问该对象。由于flow是由开发人员自己定义的,可根据业务的需求自由改变,flow范围和conversation范围的使用也就突破了JavaServlet规范中session范围和request范围的局限,真正做到了自由定制。并非所有情形都适用SpringWebFlow表1何时使用SpringWebFlow解决方案SpringMVCControllerSpringMVCSimpleFormControllerSpringMVCAbstractWizardFormControllerSpringWebFlow可以看出,SpringWebFlow所着力解决的问题即是客户端与服务器的对话(conversation)问题,这个范围比request要长,而比session要短。为实现conversation范围(即flow范围),需要付出效率上的代价,因此,并非所有Web应用都适合使用SpringWebFlow。SethLadd等人所著ExpertSpringMVCandWebFlow书,对何时使用SpringWebFlow,列出了如下表格。何时使用某个单独的、只需较少业务逻辑就可创建的页面,同时该页面不是flow的一部分某个只涉及表单提交的页面,如一个搜索框由一系列导航页面组成的业务过程任何比较复杂的、有状态的、需要在多个页面之间跳转的业务过程SpringWebFlow的其他特点WebFlow作为一个单独的概念被提出来,也可算是SpringWebFlow的一大亮点。目前大多数WebMVC匡架都把重点放在各种controller和形形色色的view技术上面,对Web应用流程本身的关注是不够的,WebFlow的提出就提供了一层抽象,设计者就可以从WebFlow抽象层面来进行设计、开发。当然,WebFlow不能理解为只是Web页面间的跳转流程,定义SpringWebFlow的语义并非只限于页面之间的跳转,而可以是Web应用中的各种行为。由此,用例的模型建构好以后,就可直接从该模型转换到相应的WebFlow,开发人员的设计变得更加直观、有效。另外,在SpringWebFlow中重用WebFlow是比较容易的。在定义flowstate时可通过继承某个已有的flow或state,来避免重复定义。同时,一个flow可以调用其它flow,就跟一般程序语言中在某个函数内部调用其它函数一样方便。配置SpringWebMVCSpringWebFlow2.0就是SpringWebMVC的一个扩展,如果粗略一些来讲,所谓flow就相当于SpringWebMVC中一种特殊的controller,这种controller可通过XML文件加以配置,因此在使用SpringWebFlow2.0前须先对SpringWebMVC进行配置,步骤如下:创建Web应用的目录结构在/WEB-INF/lib下导入相关类库在Web应用部署描述符文件web.xml中声明DispatcherServlet并指定配置文件添加DispatcherServlet映射创建web-application-config.xml文件仓U建webmvc-config.xml文件仓U建index.jsp创建Web应用的目录结构本示例应用将采用eclipseDynamicWebProject向导默认生成的目录结构,在WEB-INF目录下添加config和flows子目录,其中config子目录用来存放各种配置文件,flows子目录下存放SpringWebFlow的定义文件。最后目录如图2所示:图2目录结构MCartApp
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号