中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-12 17:58:19 來源:億速云 閱讀:150 作者:柒染 欄目:編程語言

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中

<filter> <filter-name>AMFSessionFilter </filter-name> <filter-class>com.netop.forum.servlets.AMFSessionFilter </filter-class> <filter>  <filter-mapping> <filter-name>AMFSessionFilter </filter-name> <servlet-name>AMFGatewayServlet </servlet-name> <filter-mapping>

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");   }  }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

手游| 四子王旗| 汾西县| 红安县| 武功县| 布拖县| 新田县| 全南县| 福贡县| 深圳市| 兴宁市| 唐海县| 合山市| 武强县| 全南县| 旬阳县| 寿宁县| 江安县| 石柱| 界首市| 竹北市| 即墨市| 永德县| 丰镇市| 唐河县| 荥经县| 陆川县| 陆河县| 永城市| 青岛市| 五原县| 高雄市| 长顺县| 临邑县| 逊克县| 体育| 湾仔区| 唐河县| 银川市| 察雅县| 大名县|