自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HttpSession方法在Flex Remote Object中的使用

開發(fā) 后端
本文向大家簡單介紹一下Flex Remote Object中直接使用HttpSession的方法,Flex Remote Object可以是POJO,JavaBean或是EJB。

本文和大家重點討論一下Flex Remote Object中直接使用HttpSession的方法,在面向服務的架構中(Service Oriented Architecture),我們可以用Remote Object來作為Service Facade,利用應用服務器提供的persistent service來儲存狀態(tài)信息。

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

問題的背景

Flex Remote Object可以是POJO,JavaBean或是EJB。在面向服務的架構中(Service Oriented Architecture),我們可以用Remote Object來作為Service Facade,利用應用服務器提供的persistent service來儲存狀態(tài)信息。

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并利用它來儲存/獲得共享的資源,可以大大降低開發(fā)的復雜程度。

解決方案

要讓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來獲得其所對應的那個請求。

而截獲發(fā)送到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-06 13:22:48

FlexCSS

2010-08-09 10:21:56

XMLFlex

2010-08-09 15:41:13

Flex字體

2010-08-09 15:30:00

Flex字體

2010-08-13 09:05:09

Flex4Halo

2010-07-30 10:53:53

Flex數據綁定

2022-09-08 09:42:26

JavaScripMapObject

2020-02-28 09:00:00

ObjectC#編程語言

2010-08-13 16:00:43

FlexCairngorm框架

2010-03-10 11:11:16

Python編程

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層疊樣式表

2019-05-23 10:11:39

Python編程語言singledispa

2010-08-02 14:04:29

Flex4教程

2010-03-15 15:30:35

Python模塊

2010-03-10 19:18:10

Python scri
點贊
收藏

51CTO技術棧公眾號