Flex4之与后台服务器通信方式:URLRequest+URLLoader【JAVA方式】
這次說的URLRequest是ActionScript和服務端通信的最基本方式
要實現ActionScript與服務端交互, 首先必須知道以下幾個類: URLRequest類 記錄請求服務端的URL信息, 給URLLoader進行發送操作. ?? URLVariables類 保存向服務端請求所需的參數, 一般用于POST方式傳輸,GET方式傳輸不需要使用. URLRequestMethod類 該類只有兩個靜態常量值, 一個是POST, 一個是GET, 可以把它當作是一個枚舉類型, 用于指定URL請求時使用POST方式或是GET方式. URLLoader類 真正與服務端打交道的類, 通過load方法把一個Reuqest發送給服務端, 在load之前必須給該對象添加一個Complete事件的監聽器,接收服務器返回的信息. 傳輸過程中有可能產生IO錯誤, 有必要時可以為該對象添加IOError監聽器.
?
例子: var request: URLRequest = new URLRequest("http://localhost");
//默認為URLRequestMethod.GET, 若使用GET方式可以不指定 request.method = URLRequestMethod.POST;
//創建一個參數變量對象,用于保存所有向服務發送的參數數據, GET方式可以不使用 var vars: URLVariables = new URLVariables (); vars["varName"] = varValue; //把參數鍵,值對放到vars對象中. vars["var2Name"] = var2Value; request.data = vars;? //把參數對象放進Request對象中作為參數
// 通過request對象創建一個loader, var loader: URLLoader = new URLLoader(request);
?
?
事件及返回值的處理
loader.addEventListener( //給loader對象添加完成時的監聽器. Event.COMPLETE, function(e: Event):void? //臨時定義一個監聽器 { ? //服務端返回的數據是保存在loader的data里,通過以下語句可以得到 ? trace(URLLoader(e.target).data );//在監聽器里處理服務端返回的數據 ? //complete ? // process the data; } );
loader.addEventListener( //IOError監聽器 IOErrorEvent.IO_ERROR, //臨時監聽器,IO錯誤的處理在該函數中處理 function(e: IOErrorEvent): void {/* process the err;*/} ); loader.load(request);//把request對象發送到服務端.當請求完成,則會自動觸發COMPLETE事件
下面寫一個具體的代碼示例
mxml的具體代碼
?
<span style="font-size: medium;"><?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"><fx:Script><![CDATA[import mx.controls.Alert;import mx.rpc.events.FaultEvent;import mx.rpc.events.ResultEvent;import mx.utils.URLUtil;protected function myFlex_resultHandler(event:ResultEvent):void{var name:String=event.result as String;Alert.show(name);}// protected function btnSend_clickHandler(event:MouseEvent):void // { // // myFlex.sayHello(txtName.text); // }protected function button1_clickHandler(event:MouseEvent):void{var v:URLVariables = new URLVariables("name=jacky&age=35&address=HongKong China"); /* 也可以是這種方式var vars: URLVariables = new URLVariables ();vars["varName"] = varValue; //把參數鍵,值對放到vars對象中.vars["var2Name"] = var2Value; */ var r:URLRequest = new URLRequest(); r.url = "http://localhost:8080/Flex4BlazeDSWeb/test.do"; r.method = URLRequestMethod.POST; r.data = v; var l:URLLoader = new URLLoader(); l.load(r); l.addEventListener(Event.COMPLETE,txtCompleteHandler); //注冊請求完成后 響應獲取數據事件方法 //labMsg.alpha = 1; }private function txtCompleteHandler(e:Event):void { var l:URLLoader = URLLoader(e.target); /* URLUtil的stringToObject方法解釋從字符串返回對象。字符串包含 name=value 對,它們成為返回對象的動態屬性。這些屬性對由指定的 separator 分隔。該方法可轉換數字、布爾值、數組(由“[]”定義)以及子類(由“{}”定義)。默認情況下,%XX 格式的 URL 模式將轉換為相應的字符串字符。 例如: var s:String = "name=Alex;age=21";var o:Object = URLUtil.stringToObject(s, ";", true); 返回對象:{ name: "Alex", age: 21 }。*///直接獲取返回值內容: URLLoader(e.target).dataAlert.show(l.data);var o:Object = URLUtil.stringToObject(l.data,";",true); //使用URLUtil對將數據進行反序列化以方便使用 txtName.text = o.name; txtAge.text = o.age; txtAddress.text = o.address; //labMsg.alpha = 0; } ]]></fx:Script><fx:Declarations><!--請把不可視的組件元素例如服務的,值對象的放在聲明里面 Place non-visual elements (e.g., services, value objects) here <s:RemoteObject id="myFlex" destination="mytest" result="myFlex_resultHandler(event)" />--></fx:Declarations><s:Panel x="77" y="35" width="198" height="231" title="www.accptecg.com flex4"><s:TextInput x="47" y="102" id="txtAddress"/><s:TextInput x="47" y="72" id="txtAge"/><s:TextInput x="47" y="37" id="txtName"/><!--<s:Button x="168" y="38" label="發送" id="btnSend" click="btnSend_clickHandler(event)"/>--><s:Button x="47" y="154" label="按鈕" click="button1_clickHandler(event)"/><s:Label x="0" y="47" text="Name"/><s:Label x="4" y="81" text="Age" height="13"/><s:Label x="4" y="115" text="Address" height="13"/></s:Panel> </s:Application> </span>?
處理程序為
Java代碼 <span style="font-size: medium;">public class TestServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//獲取URLResuest請求回的參數 返回數據用;分隔以方便Flex對數據進行序列化 String rs =new String("name="+request.getParameter("name")+";age="+request.getParameter("age")+";address="+request.getParameter("address"));System.out.println(request.getParameter("name"));response.setContentType("text/plain");System.out.println(rs);response.getWriter().write(rs);//request.getRequestDispatcher("/index.jsp").forward(request, response);}}</span>
好了,這次的URLRequest方式就到此為止了
轉載于:https://www.cnblogs.com/regalys168/p/3626874.html
總結
以上是生活随笔為你收集整理的Flex4之与后台服务器通信方式:URLRequest+URLLoader【JAVA方式】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring线程并发处理(ThreadL
- 下一篇: Python异常处理实例