最近在Flash與Jsp通訊的時候,會發現Flash不能與JSP相互發資訊。真是一件很鬱悶的事情,把官方文檔看了一下,發現了一個簡單解決辦法。官方提供的第一種辦法是,使用者管理控制。這種全域的解決方案,可以解決Flash與Jsp通訊的一個問題。
解決的辦法如下:
第一步
請在系統裡面找到這個路徑目錄:
C:/WINDOWS/system32/Macromed/Flash/FlashPlayerTrust
FlashPlayerTrust這個檔案夾是一個信任地區。
我們可以見到幾個尾碼的檔案,xxx.cfg的檔案。為了能夠解決Flash與jSp的通訊問題,我在這個目錄下建立一個名為dev的文本:
第二步:
建立dev.txt的文本,然後寫上Flash的檔案所在目錄,我把這個目錄放在I盤的Test檔案夾裡面,然後修改尾碼變成了cfg檔案
dev.cfg檔案
檔案的所在目錄:
準備完後,開始測試我們的檔案:
準備一個JSP檔案,如下,準備接受用戶端返回來的兩個資訊
<%@ page language="java" pageEncoding="UTF-8"<br />%><%String username=request.getParameter("username");<br />String userpwd=request.getParameter("userpwd");<br />out.println("msg="+username);<br />%></p><p>
準備用戶端:簡單的測試一下。
package<br />{<br />import flash.net.URLLoader;<br />import flash.net.URLRequest;<br />import flash.events.*;<br />import flash.net.URLVariables;<br />import flash.net.URLLoaderDataFormat;<br />import flash.net.*;<br />public class Connect extends EventDispatcher<br />{<br />//串連的網址<br />public static const myurl:String="http://localhost:8080/flash2/receive.jsp";<br />public function Connect()<br />{</p><p>}<br />public function sendMessage(para:URLVariables,myurl:String):void<br />{//設定發送資料的變數 </p><p>//設定發送資料的方式<br />var request:URLRequest=new URLRequest();<br />request.url=myurl;<br />request.method=URLRequestMethod.POST;//發送的方式 post<br />request.data=para;</p><p>//發送資料<br />var loader:URLLoader=new URLLoader();<br />loader.dataFormat=URLLoaderDataFormat.VARIABLES;//發送資料的格式<br />loader.addEventListener(Event.COMPLETE,completeHandler);<br />loader.addEventListener(IOErrorEvent.IO_ERROR ,IoHandler);<br />loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,SecurityHandler);<br />loader.load(request);<br />}<br />private function completeHandler(event:Event):void<br />{<br />var loader:URLLoader=URLLoader(event.target);<br />trace(loader.data);<br />trace(loader.data.msg);<br />}<br />private function IoHandler(event:IOErrorEvent):void<br />{<br />trace("wrong");<br />}<br />private function SecurityHandler(event:SecurityErrorEvent):void<br />{<br />trace("wrong2");<br />}<br />}<br />}
package<br />{<br />import flash.display.Sprite;<br />import flash.events.*;<br />import flash.text.*;<br />import flash.display.SimpleButton;<br />import fl.controls.Button;<br />import flash.net.*;<br />public class main extends Sprite<br />{<br />private var con:Connect;<br />private var username:TextField;<br />private var pwd:TextField;<br />public function main()<br />{<br />con=new Connect();</p><p>init();<br />}</p><p>private function init():void<br />{</p><p>username=new TextField();<br />addChild(username);<br />username.width=200;<br />username.height=20;<br />username.x=stage.stageWidth/2;<br />username.y=stage.stageHeight/2;<br />username.type = TextFieldType.INPUT;//輸入方式<br />username.border = true;//邊框<br />username.background = true;</p><p>pwd=new TextField();<br />addChild(pwd);<br />pwd.width=200;<br />pwd.height=20;<br />pwd.x=stage.stageWidth/2;<br />pwd.y=stage.stageHeight/2+22;<br />pwd.type = TextFieldType.INPUT;//輸入方式<br />pwd.border = true;//邊框<br />pwd.background = true;</p><p>var btn:Button=new Button();<br />addChild(btn);<br />btn.width=40;<br />btn.height=20;<br />btn.label="Send";<br />btn.x=stage.stageWidth/2;<br />btn.y=stage.stageHeight/2+50;<br />btn.addEventListener(MouseEvent.CLICK,SendHander);</p><p>}<br />private function SendHander(e:MouseEvent):void<br />{<br />if (username.text!="" && pwd.text!="")<br />{<br />trace("send ok");<br />var para:URLVariables=new URLVariables();<br />para.username=username.text;<br />para.userpwd=pwd.text;<br />con.sendMessage(para,Connect.myurl);<br />} else<br />{<br />trace("不能發送空資訊");<br />}<br />}<br />}<br />}
這樣就可以簡單發送一下資訊了,由於程式還是可以完善這裡懶惰一下,主要說明的是那個安全配置的問題
在程式裡面,我們要小心
public static const myurl:String="http://localhost:8080/flash2/receive.jsp";
我們的swf檔案 不在tomcat目錄下,只要在其他盤裡面。在本地測試的時候,可以在
C:/WINDOWS/system32/Macromed/Flash/FlashPlayerTrust
添加swf檔案的所在目錄,這樣簡單的問題就可以解決。現在可以通訊了。
注意:防火牆的引發的問題,有時候會攔截訊息,因此關閉測試就沒有事情了。當然這僅僅是一種特殊的情況