`

Flash Scope

阅读更多

项目中遇到了一个潜在的问题,大致就是说,在一个流程的两个或某几个环节中,需要短暂地存储一部分对象(如果不存储,就需要在这几个环节中多次调用同一个外部接口,这被认为是不够合理的实现)。

而这部分对象的存储:

(1)如果用request,太小,毕竟一次提交以后就丢失了,如果需要往后传递,可能需要借助一些页面参数传值等丑陋或是不易控制的方法;

(2)如果用session,太大,我不需要在整个用户会话生命周期内使用,而且如果同个用户并行地操作两个流程,期间会互相影响到。

 

其实在Rails/Grails里面就已经包含了一个机制,它将对象短暂地放置在session中,request-response连续的两个环节后再清除掉这个短暂保存的对象,就叫是Flash Scope。

它的原理很简单,内部定义了两个Map,将保存在里面的数据,在两个Map里面来回转移,这样就保证在下一次请求到来时,只需要将其中一个Map的数据转移到另外一个Map中,而清除掉一个Map。这样就保证一次在重定向时,该作用域下依然保存数据。而在第二次的请求时,如果没有新的数据加进来,原来的数据将会被清空。

这里有一个简单的例子:http://yongtree.javaeye.com/blog/629572

 

看起来好像结束了,不过,把思路扩展一下:

(1)这样的做法可以支持若干次的request-response,一串这样的requset-response就可以成为一条工作流。

(2)上面的做法解决了对象在对个环节中传递的问题,那么,怎样解决在同个用户并行地操作两个流程时,会互相影响到的问题?

 

我想其实也不难,只需要稍稍扩展一下,如果这样的问题确实需要解决,那就在存入这个短命对象到Map时,使用的key需要包含一个唯一序列x,而这个x最易想到的就是以系统当前时间为参数,让这个x作为hidden参数的形式经由页面传递,从而保证了一整条工作流中行为的独立性。

 

我画一个简单的时序图来说明:



 

 

文章系本人原创,转载请注明作者和出处

  • 大小: 62.5 KB
分享到:
评论

相关推荐

    JSF 如何傳遞物件 在不同頁面 不同controller in request scope1

    本文将详细介绍如何在不使用Session Scope的情况下,通过Flash Scope在A页面和B页面之间的不同控制器(A_Controller和B_Controller)传递对象。 首先,了解几个基本概念: 1. Request Scope:在用户单次请求内有效...

    struts应用连接数据库

    由于标签为"flash",这里可能是指Struts2中的Flash Scope。Flash Scope是一种临时的存储区域,用于在一次转发或重定向后仍然保留数据。在用户验证成功后,可以将一些消息(如成功登录信息)放入Flash Scope,在接...

    J2EE API 6

    JSF 2.0引入了更多的UI组件,支持 Facelets 视图技术,提供了全双工的Flash Scope,以及Ajax增强,使用户界面更加动态和交互。 5. **Java Servlet 3.0** 这个版本的Servlet规范带来了异步处理能力,允许在后台...

    spring web flow reference 2.4.0

    - **Spring MVC Flash Scope集成**:增强了与Spring MVC框架的集成,允许在Web Flow和Spring MVC之间共享临时数据。 - **部分JSR-303 Bean验证**:实现了对JSR-303 Bean验证规范的部分支持,提高了数据验证的能力。 ...

    J-Scope V7.66安装文件,自带jlink,安装该包会装上J-Scope V7.66和jlink

    总之,J-Scope V7.66和jFlash-V7.66是嵌入式系统开发中不可或缺的工具,它们为开发者提供了强大的调试和编程能力,有助于优化代码,提高产品性能,缩短开发周期。熟悉并掌握这两个工具的使用,对于提升工作效率和...

    Compact Flash Spec 4.1.pdf

    Scope - **Elements of this Specification**: 本章列举了规范中涉及的关键组成部分,包括物理特性、电气接口、元格式(Metaformat)、软件接口和适配器等方面。 - **Card Physical**: 讲述了CF存储卡的物理设计...

    red5与flash聊天代码

    public void invoke(IServiceInvoker invoker, IScope scope, IConnection conn, Object[] params) { if ("chat".equals(params[0])) { ClientBroadcastStream stream = (ClientBroadcastStream) conn....

    flash red5开发

    6. **Scope 和 Room 管理**: Scope 和 Room 是 Red5 中的概念,用于管理和组织客户端连接,实现用户分组、聊天室等功能。 7. **视频播放程序**: 书中会展示如何开发视频播放程序,涵盖从视频获取、播放控制到错误...

    angular-flash-message:角度Flash讯息

    角度闪光消息角度Flash讯息Angular Flash消息支持在AngularJS应用上显示Flash消息。 目前,我们不包含样式,因为... controller ( 'YourController' , function ( $scope , $flash ) { $scope . save = function ( ) {

    flash-message

    controller ( "Test" , [ '$scope' , 'flashMessage' , function ( $scope , flashMessage ) { flashMessage . success ( { message : "Success message" , seconds : 10 } ) ; } ] ) ; 该模块使用以下方法导出...

    Red5_Flash服务器研究.pdf

    ### Red5 Flash 服务器关键技术与应用 #### 一、引言 随着富互联网应用(RIA)的兴起,Flash/Flex技术因其强大的表现力、广泛的插件支持以及跨浏览器能力而备受开发人员青睐。在此背景下,对Flash服务器的研究显得...

    oracle手工创建步骤

    alter system set db_recovery_file_dest='D:\oracle\product\10.1.0\oradata\book\flash_recovery_area' scope=spfile; alter system set db_recovery_file_dest_size=1G scope=spfile; alter system set log_...

    Linux Scope -JTAG(目标系统调试器)

    LinuxScope不仅充分利用了BDI2000的功能,还扩展了其能力,使用户能够对多种类型的普通flash和strata flash存储设备进行编程,这对于固件更新和系统配置至关重要。 由于LinuxScope构建于Eclipse框架之上,开发者...

    豪华首页调用Flash自动变换效果(附源代码)

    [color=Navy]文档说明《关于首页调用经典随即Flash.(模拟Adobe官方网站)》 1.大尺寸flash调用方法 请将FMA文件夹上传至网站更目录 在您的网站首页调用/FMA/FMA.swf XML存放目录/FMA/swf/homepage/fma/en_us/...

    TFFS文件系统详解(Transaction Flash FileSystem (TFFS) Description)

    1.1 Scope ................................................................................................................... 4 1.2 Background ............................................................

    ORA-00257报错处理

    这意味着Oracle数据库无法找到或访问指定的恢复区域(Flash Recovery Area,FRA),这可能是由于恢复区域的空间不足、权限问题或其他配置错误导致的。 #### 处理ORA-00257报错的方法 处理ORA-00257错误的关键在于...

    spi dev用户态测试说明

    1. spi_dev 用户态测试的目的和 scope 2. 如何在 Linux 内核配置中启用 spi_dev 3. 如何绑定 spi_dev 到 SPI 控制器 4. 如何在 sysfs 中创建设备节点 5. 使用 spi_dev 设备驱动程序访问 Infineon SPI NOR flash 设备...

    angular-ra-flash:AngularJS模块

    app.controller('MyCtrl', function($scope, flash) { // 创建一个成功消息 flash.success('操作成功!'); // 或者创建一个警告消息 flash.warning('请注意,这是一条警告信息'); }); ``` **4. 视图渲染** ...

    flashback闪回技术

    - 设置Flash Recovery Area的大小和位置,对于RAC环境,Flash Recovery Area必须位于共享存储中。数据库必须处于归档模式。 - SQL命令示例: ```sql ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH...

Global site tag (gtag.js) - Google Analytics