`
love552200
  • 浏览: 7947 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

flex+servlet+json 实例

阅读更多
一.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的访问域问题,这个可以上网自己查一下
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics