项目中遇到了一个潜在的问题,大致就是说,在一个流程的两个或某几个环节中,需要短暂地存储一部分对象(如果不存储,就需要在这几个环节中多次调用同一个外部接口,这被认为是不够合理的实现)。
而这部分对象的存储:
(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
分享到:
相关推荐
本文将详细介绍如何在不使用Session Scope的情况下,通过Flash Scope在A页面和B页面之间的不同控制器(A_Controller和B_Controller)传递对象。 首先,了解几个基本概念: 1. Request Scope:在用户单次请求内有效...
由于标签为"flash",这里可能是指Struts2中的Flash Scope。Flash Scope是一种临时的存储区域,用于在一次转发或重定向后仍然保留数据。在用户验证成功后,可以将一些消息(如成功登录信息)放入Flash Scope,在接...
JSF 2.0引入了更多的UI组件,支持 Facelets 视图技术,提供了全双工的Flash Scope,以及Ajax增强,使用户界面更加动态和交互。 5. **Java Servlet 3.0** 这个版本的Servlet规范带来了异步处理能力,允许在后台...
- **Spring MVC Flash Scope集成**:增强了与Spring MVC框架的集成,允许在Web Flow和Spring MVC之间共享临时数据。 - **部分JSR-303 Bean验证**:实现了对JSR-303 Bean验证规范的部分支持,提高了数据验证的能力。 ...
总之,J-Scope V7.66和jFlash-V7.66是嵌入式系统开发中不可或缺的工具,它们为开发者提供了强大的调试和编程能力,有助于优化代码,提高产品性能,缩短开发周期。熟悉并掌握这两个工具的使用,对于提升工作效率和...
Scope - **Elements of this Specification**: 本章列举了规范中涉及的关键组成部分,包括物理特性、电气接口、元格式(Metaformat)、软件接口和适配器等方面。 - **Card Physical**: 讲述了CF存储卡的物理设计...
public void invoke(IServiceInvoker invoker, IScope scope, IConnection conn, Object[] params) { if ("chat".equals(params[0])) { ClientBroadcastStream stream = (ClientBroadcastStream) conn....
6. **Scope 和 Room 管理**: Scope 和 Room 是 Red5 中的概念,用于管理和组织客户端连接,实现用户分组、聊天室等功能。 7. **视频播放程序**: 书中会展示如何开发视频播放程序,涵盖从视频获取、播放控制到错误...
角度闪光消息角度Flash讯息Angular Flash消息支持在AngularJS应用上显示Flash消息。 目前,我们不包含样式,因为... controller ( 'YourController' , function ( $scope , $flash ) { $scope . save = function ( ) {
controller ( "Test" , [ '$scope' , 'flashMessage' , function ( $scope , flashMessage ) { flashMessage . success ( { message : "Success message" , seconds : 10 } ) ; } ] ) ; 该模块使用以下方法导出...
### Red5 Flash 服务器关键技术与应用 #### 一、引言 随着富互联网应用(RIA)的兴起,Flash/Flex技术因其强大的表现力、广泛的插件支持以及跨浏览器能力而备受开发人员青睐。在此背景下,对Flash服务器的研究显得...
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_...
LinuxScope不仅充分利用了BDI2000的功能,还扩展了其能力,使用户能够对多种类型的普通flash和strata flash存储设备进行编程,这对于固件更新和系统配置至关重要。 由于LinuxScope构建于Eclipse框架之上,开发者...
[color=Navy]文档说明《关于首页调用经典随即Flash.(模拟Adobe官方网站)》 1.大尺寸flash调用方法 请将FMA文件夹上传至网站更目录 在您的网站首页调用/FMA/FMA.swf XML存放目录/FMA/swf/homepage/fma/en_us/...
1.1 Scope ................................................................................................................... 4 1.2 Background ............................................................
这意味着Oracle数据库无法找到或访问指定的恢复区域(Flash Recovery Area,FRA),这可能是由于恢复区域的空间不足、权限问题或其他配置错误导致的。 #### 处理ORA-00257报错的方法 处理ORA-00257错误的关键在于...
1. spi_dev 用户态测试的目的和 scope 2. 如何在 Linux 内核配置中启用 spi_dev 3. 如何绑定 spi_dev 到 SPI 控制器 4. 如何在 sysfs 中创建设备节点 5. 使用 spi_dev 设备驱动程序访问 Infineon SPI NOR flash 设备...
app.controller('MyCtrl', function($scope, flash) { // 创建一个成功消息 flash.success('操作成功!'); // 或者创建一个警告消息 flash.warning('请注意,这是一条警告信息'); }); ``` **4. 视图渲染** ...
- 设置Flash Recovery Area的大小和位置,对于RAC环境,Flash Recovery Area必须位于共享存储中。数据库必须处于归档模式。 - SQL命令示例: ```sql ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH...