HttpSession方法在Flex Remote Object中的使用

开发 后端
本文向大家简单介绍一下Flex Remote Object中直接使用HttpSession的方法,Flex Remote Object可以是POJO,JavaBean或是EJB。

本文和大家重点讨论一下Flex Remote Object中直接使用HttpSession的方法,在面向服务的架构中(Service Oriented Architecture),我们可以用Remote Object来作为Service Facade,利用应用服务器提供的persistent service来储存状态信息。

Flex Remote Object中直接使用HttpSession的方法

问题的背景

Flex Remote Object可以是POJO,JavaBean或是EJB。在面向服务的架构中(Service Oriented Architecture),我们可以用Remote Object来作为Service Facade,利用应用服务器提供的persistent service来储存状态信息。

Flex既可以提供stateful或stateless的remote object, 另外还有session servlet让mxml获取/和储存session中的内容。这一切听上去都很***,但是有一个问题,Flex Remote Object本身是无法获得任何有关Running Context的信息,也就是说,你无法从你的 Remote Object 中获得 HttpSession, HttpRequest 和 ServletContext。 所谓的 Flex Session servlet只是让MXML获得session的内容,而不是直接让Remote Object获得session。

Remote Object为什么需要获得HttpRequest, HttpSession?
既然Flex提供了stateful的remote object为什么还要让remote object获得Running Context呢?问题在于Flex中的stateful是基于应用服务器的http session,而且你无法控制AMFGateway建立remote object的过程。打个简单的比方,我们知道一般的应用服务器中,session的时限只有20分钟,而在很多系统的登陆过程中却有选择保持登陆几个月的选项。

其具体实现上就是利用cookie来储存id和password hash,通过控制cookie的存活时间来实现的。而在服务器端,一旦session过期了,则可以从cookie中获得id和password hash重新登陆一遍,从而达到自动认证用户的目的。

如果你的Flex Remote Object无法获得 HttpServletRequest, HttpSession,你就无法实现上述的情况。另外,对于小型的应用来说,直接在Remote object中获得servlet context并利用它来储存/获得共享的资源,可以大大降低开发的复杂程度。

解决方案

要让Flex Remote Object获得HttpSession,HttpRequest和ServletContext并不是一件容易的事情。这里提供了我的一种方法,供大家参考。希望能抛砖引玉,让大家提出更好,更有效的方案。
这个方法的基本思路是利用JAVA提供的 ThreadLocal Object。当服务器接收到一个HTTP请求后,这个请求的整个处理过程是运行在同一个线程中的。
每个HTTP请求的处理会都运行在各自独立的线程中。而在Flex中,所有AMF Remote Object 的请求都需要通过 AMF Gateway Servlet,而Remote Object 的建立和调用恰恰就是运行在这个HTTP请求的线程中。

有了这个原则,我们就可以建立一个Context Object,每当请求建立的时候,就可以把这个请求放入 Context 的 ThreadLocal 中,而当 Remote Object 被AMF Gateway Servlet调用的时候,就可以通过访问 Context 的ThreadLoca l来获得其所对应的那个请求。

而截获发送到AMF Gateway的请求则可以通过Servlet Filter来实现。废话不说了,看代码吧! 
1. 添加以下内容到WEB-INF/web.xml中
 

  1. <filter> 
  2. <filter-name>AMFSessionFilter </filter-name> 
  3. <filter-class>com.netop.forum.servlets.AMFSessionFilter </filter-class> 
  4. <filter> 
  5.  
  6. <filter-mapping> 
  7. <filter-name>AMFSessionFilter </filter-name> 
  8. <servlet-name>AMFGatewayServlet </servlet-name> 
  9. <filter-mapping>   
  10.  

 2. 如何在Flex Remote Object中使用AMFContext

  1. class YouRemoteService  
  2. {  
  3. public void serviceMethod()  
  4. {  
  5. AMFContext context = AMFContext.getCurrentContext();  
  6. HttpSession = context.getSession();  
  7. ServletContext = context.getServletContext();  
  8.  
  9. HttpServletRequest request = context.getRequest();  
  10. HttpServletResponse response = context.getResponse();  
  11.  
  12. context.setSessionAttribute("attr","value");  
  13. context.setContextAttribute("attr","value");  
  14.  
  15. }  
  16. }  
  17.  

【编辑推荐】

  1. 解析Flex4的十大变化
  2. Flex3到Flex4的转变新特性值得关注
  3. 解析对AdobeFlex的十大误解
  4. FlexBuilder3.0与Eclipse3.4的***结合
  5. 学习Flex时必须要知道的10件事情

 
 

责任编辑:佚名 来源: csdn.net
相关推荐

2011-08-17 09:27:55

FlexJava

2010-07-27 13:05:12

Flex

2010-08-09 15:41:13

Flex字体

2010-08-06 13:22:48

FlexCSS

2010-08-09 10:21:56

XMLFlex

2010-08-09 15:30:00

Flex字体

2010-07-30 10:53:53

Flex数据绑定

2022-09-08 09:42:26

JavaScripMapObject

2010-08-13 09:05:09

Flex4Halo

2010-03-10 11:11:16

Python编程

2010-08-13 16:00:43

FlexCairngorm框架

2020-02-28 09:00:00

ObjectC#编程语言

2009-06-29 17:57:30

ApplicationJSP

2010-08-11 13:28:46

Flex行为

2010-08-06 13:37:28

Flex[Bindab

2010-08-06 14:52:35

FlexCSS层叠样式表

2010-03-10 19:18:10

Python scri

2010-03-15 15:30:35

Python模块

2009-11-23 19:52:55

ibmdwFlex

2010-08-09 15:52:28

点赞
收藏

51CTO技术栈公众号