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

Flex Remote Object中直接使用HttpSession的方法是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

雙遼網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,雙遼網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為雙遼上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的雙遼做網(wǎng)站的公司定做!

我們可以用Remote Object來(lái)作為Service Facade,利用應(yīng)用服務(wù)器提供的persistent service來(lái)儲(chǔ)存狀態(tài)信息。

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

問(wèn)題的背景

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

Flex既可以提供stateful或stateless的remote object, 另外還有session servlet讓mxml獲取/和儲(chǔ)存session中的內(nèi)容。這一切聽(tīng)上去都很***,但是有一個(gè)問(wèn)題,F(xiàn)lex Remote Object本身是無(wú)法獲得任何有關(guān)Running Context的信息,也就是說(shuō),你無(wú)法從你的 Remote Object 中獲得 HttpSession, HttpRequest 和 ServletContext。 所謂的 Flex Session servlet只是讓MXML獲得session的內(nèi)容,而不是直接讓Remote Object獲得session。

Remote Object為什么需要獲得HttpRequest, HttpSession?
既然Flex提供了stateful的remote object為什么還要讓remote object獲得Running Context呢?問(wèn)題在于Flex中的stateful是基于應(yīng)用服務(wù)器的http session,而且你無(wú)法控制AMFGateway建立remote object的過(guò)程。打個(gè)簡(jiǎn)單的比方,我們知道一般的應(yīng)用服務(wù)器中,session的時(shí)限只有20分鐘,而在很多系統(tǒng)的登陸過(guò)程中卻有選擇保持登陸幾個(gè)月的選項(xiàng)。

其具體實(shí)現(xiàn)上就是利用cookie來(lái)儲(chǔ)存id和password hash,通過(guò)控制cookie的存活時(shí)間來(lái)實(shí)現(xiàn)的。而在服務(wù)器端,一旦session過(guò)期了,則可以從cookie中獲得id和password hash重新登陸一遍,從而達(dá)到自動(dòng)認(rèn)證用戶的目的。

如果你的Flex Remote Object無(wú)法獲得 HttpServletRequest, HttpSession,你就無(wú)法實(shí)現(xiàn)上述的情況。另外,對(duì)于小型的應(yīng)用來(lái)說(shuō),直接在Remote object中獲得servlet context并利用它來(lái)儲(chǔ)存/獲得共享的資源,可以大大降低開(kāi)發(fā)的復(fù)雜程度。

解決方案

要讓Flex Remote Object獲得HttpSession,HttpRequest和ServletContext并不是一件容易的事情。這里提供了我的一種方法,供大家參考。希望能拋磚引玉,讓大家提出更好,更有效的方案。
這個(gè)方法的基本思路是利用JAVA提供的 ThreadLocal Object。當(dāng)服務(wù)器接收到一個(gè)HTTP請(qǐng)求后,這個(gè)請(qǐng)求的整個(gè)處理過(guò)程是運(yùn)行在同一個(gè)線程中的。
每個(gè)HTTP請(qǐng)求的處理會(huì)都運(yùn)行在各自獨(dú)立的線程中。而在Flex中,所有AMF Remote Object 的請(qǐng)求都需要通過(guò) AMF Gateway Servlet,而Remote Object 的建立和調(diào)用恰恰就是運(yùn)行在這個(gè)HTTP請(qǐng)求的線程中。

有了這個(gè)原則,我們就可以建立一個(gè)Context Object,每當(dāng)請(qǐng)求建立的時(shí)候,就可以把這個(gè)請(qǐng)求放入 Context 的 ThreadLocal 中,而當(dāng) Remote Object 被AMF Gateway Servlet調(diào)用的時(shí)候,就可以通過(guò)訪問(wèn) Context 的ThreadLoca l來(lái)獲得其所對(duì)應(yīng)的那個(gè)請(qǐng)求。

而截獲發(fā)送到AMF Gateway的請(qǐng)求則可以通過(guò)Servlet Filter來(lái)實(shí)現(xiàn)。廢話不說(shuō)了,看代碼吧! 
1. 添加以下內(nèi)容到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");   }  }

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

當(dāng)前標(biāo)題:FlexRemoteObject中直接使用HttpSession的方法是怎樣的
地址分享:http://muchs.cn/article36/ihshpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、手機(jī)網(wǎng)站建設(shè)、用戶體驗(yàn)、、服務(wù)器托管網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化