flex+servlet+json 实例

xiaoxiao2026-03-20  7

一.flex+servlet+json: json:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 二.配置环境 1.flex builder 3 2.myeclipse 6.5 3.tomcat 6.0 三.具体步骤: 新建一个flex project项目,名称随便 在目录src下新建一个application,名称为my_servlet_json 在目录下的libs中导入 http://code.google.com/p/as3corelib/ 下的as3corelib-.92.1.zip 中的 as3corelib.swc 1.flex端代码: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import com.adobe.serialization.json.JSON; import flash.events.*; import flash.net.*; public function runMe():void{ //定义URLLoder实例 var loader:URLLoader=new URLLoader(); //封装loader使其有监听程序 configureListeners(loader); //定义表头,可以不要 var header1:URLRequestHeader=new URLRequestHeader("pragma", "no-cache"); //定义URLRequest,定义传送方法,表头,以及请求的地址 var requester:URLRequest=new URLRequest(); requester.requestHeaders.push(header1); //定义为POST方式,那么servlet中你就在doPost中写方法 requester.method=URLRequestMethod.POST; loader.dataFormat=URLLoaderDataFormat.TEXT; //根据自己的路径修改 requester.url="http://127.0.0.1:11112/Flex-json/servlet/MessageServlet"; //初始一个动态类 var obj:Object=new Object(); obj.value1="bob"; obj.value2="sandy"; //使用URLVariables传送给URLRequest的data var variables:URLVariables=new URLVariables(); //将动态类编码为JSON类 variables.myObject=JSON.encode(obj); requester.data=variables; //传送出去 loader.load(requester); } //定义激发事件,以及输出 private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); } private function completeHandler(event:Event):void { try { var tempLoader:URLLoader = URLLoader(event.target); var obj:Object = JSON.decode(tempLoader.data); trace("completeHandler: " + tempLoader.data); trace(obj.value1); trace(obj.value2); } catch (error:Error) { trace("completeHandler: " + error.toString()); } } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function httpStatusHandler(event:HTTPStatusEvent):void { trace("httpStatusHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } ]]> </mx:Script> <mx:Button x="19" y="10" label="Run Me" id="btnRunMe" click="runMe()" enabled="true"/> </mx:Application> 2.在WEB-INFO下的lib文件夹下导入http://code.google.com/p/json-simple/ 的 json_simple-1.1.jar servlet端:在doPost中定义即可: response.setContentType("text/html"); PrintWriter out = response.getWriter(); JSONObject jsonObject=new JSONObject(); try{ String strJSON=null; JSONObject myObject=null; if(request.getParameter("myObject")!=null){ strJSON = request.getParameter("myObject"); Object obj = JSONValue.parse(strJSON); myObject = (JSONObject)obj; String value1 = myObject.get("value1").toString(); String value2 = myObject.get("value2").toString(); jsonObject.put("value1", "Hello: " + value1); jsonObject.put("value2", "Hello: " + value2); }else{ jsonObject.put("ERROR", "Invalid JSON"); } } finally{ out.print(jsonObject); out.flush(); out.close(); } 3.发布程序,运行TOMCAT 4.运行FLEX程序。 5.输出结果: [SWF] E:\鏂版瓕2\FLEX3\Lesson9\CommDemo1\bin-debug\My_Servlet_Json.swf - 568,920 bytes after decompression openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2] progressHandler loaded:47 total: 47 httpStatusHandler: [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0] completeHandler: {"value1":"Hello: bob","value2":"Hello: sandy"} Hello: bob Hello: sandy 6.最后要注意SWF的访问域问题,这个可以上网自己查一下
转载请注明原文地址: https://www.6miu.com/read-5046199.html

最新回复(0)