FlexRemoteObject中直接使用HttpSession的方法是怎样的

Flex Remote Object中直接使用HttpSession的方法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

双辽网站建设公司创新互联建站,双辽网站设计制作,有大型网站制作公司丰富经验。已为双辽上千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的双辽做网站的公司定做!

我们可以用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中

 AMFSessionFilter  com.netop.forum.servlets.AMFSessionFilter     AMFSessionFilter  AMFGatewayServlet  

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

class YouRemoteService  {  public void serviceMethod()  {  AMFContext context = AMFContext.getCurrentContext();  HttpSession = context.getSession();  ServletContext = context.getServletContext();   HttpServletRequest request = context.getRequest();  HttpServletResponse response = context.getResponse();   context.setSessionAttribute("attr","value");  context.setContextAttribute("attr","value");   }  }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


本文题目:FlexRemoteObject中直接使用HttpSession的方法是怎样的
文章链接:http://pwwzsj.com/article/ihshpg.html