`

Flex4之与后台服务器通信方式:URLRequest+URLLoader【JAVA方式】

阅读更多

URLRequest是ActionScript和服务端通信的最基本方式(只需要Java后台的Servlet)

要实现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的具体代码

<?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:Declarations>
		<!--
			本程序使用URLRequest和URLLoader来通信。这里只用到Java的Servlet而已
			-->	
		</fx:Declarations>
		<fx:Script>
			<![CDATA[
				import mx.controls.Alert;
				import mx.rpc.events.FaultEvent;
				import mx.rpc.events.ResultEvent;
				import mx.utils.URLUtil;
				
				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/FlexWeb/TestServlet";  
					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).data
					//Alert.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>
		
		<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>

 Java代码:

package com.cx.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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);
	}	
}
 
分享到:
评论

相关推荐

    AS3 中使用 URLRequest 和 URLLoader 与服务器交互

    AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 ...

    AS3中使用URLRequest和URLLoader 与服务器交互

    AS3 中使用 URLRequest 和 URLLoader 与服务器交互

    ActionScript 3.0 与网络通信

    ActionScript 3.0 与网络通信 1. flash.net.*包 2. 在ActionScript 3.0中,使用URLLoader和URLRequest类来加载外部文件。 加载成功的文件可使用特定类来访问数据,具体使用何类,取决于加载数据的数据类型。 1&gt; ...

    Flash+Flex+Air移动开发入门经典 pdf

    《flash+flex+air移动开发入门经典——适用于android、ios和blackberry》 第1章 flash、flex和air简介 1 1.1 adobe flash 1 1.2 actionscript 3.0 2 1.2.1 ecmascript 2 1.2.2 关键概念 3 1.3 flex框架 11 ...

    AS3读取XML

    简单的读取XML:加载部分var myXML:XML = new XML(); var XML_URL:String = "dat.xml";...var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL);

    flex通过URL获取request参数

    通过网页地址URL的参数传递。 例如:http://localhost:8080/text.mxml?myName=good&myValue=goods 在mxml里面获取到good同goods

    As3访问http和webService的类,HttpRequest

    var Request:URLRequest = new URLRequest(url); Request.method=method; Request.data = vars; trace(vars); loader = new URLLoader(Request); callBack = _returnMethod; loader....

    Flex 编程技巧

    Flex 编程小技巧 1. 复制内容到剪贴板 1. System.setClipboard(strContent); 2. 复制一个 ArrayCollection 1. //dummy solution( well, it works ) 2. var bar:ArrayCollection = new ArrayCollection(); 3. for ...

    Flash结合PHP实现文件上传功能.rar

     upload.fla 文件中第一帧第代码第14行:urlRequest.url = "http://localhost/phpFlash/upload.php";  此路径改为您的本地环境配置路径,注意,路径一定要以http开头。    2.上传目录  upload.php 文件中第...

    PHP利用Flash文件上传图片(附FLA源文件).rar

     upload.fla 文件中第一帧第代码第14行:urlRequest.url = "http://localhost/phpFlash/upload.php";  此路径改为您的本地环境配置路径,注意,路径一定要以http开头。  2.上传目录  upload.php 文件中第二行...

    Flex 常用实现小功能的语句

    我做flex项目时收集的,与大家共享,共同进步。(如:页面重载: navigateToURL(new URLRequest("javascript:location.reload();"),"_self") 关闭浏览器:navigateToURL(new URLRequest("javascript:window.close()"),...

    Alley:基本的“ URLSessionDataTask”微包装器,用于与HTTP(S)Web服务进行通信,并具有内置的自动请求重试功能

    胡同基本的URLSessionDataTask微包装器,用于与HTTP(S)Web服务进行通信。 它是作为框架构建的,但是它很小,我建议您直接将Alley文件夹直接复制到您的项目中。为什么在大多数情况下,您需要从互联网上获取信息时,...

    AS3.0歌词同步频谱原码

    var timeN:Number = (((Number(timeS.substr(1,2)) * 60) + Number(timeS.substr(4,5))) * 1000); var object:Object = new Object ; object.timer = timeN; object.lrc = lyrics; ...

    flash as3 加载外部mp3

    //文本提示:动态文本框 ts_txt //"非你莫属.mp3 和fla在同一目录,如果不在同一目录要使用完整的绝对路径。 var s:Sound = new Sound() var req:URLRequest=new URLRequest("非你莫属.mp3")

    AS3.0+XML列表一曲一图音乐播放器

    var urlLoader:flash.net.URLLoader; var loc1:*; this.playlistFacade = com.flash.mp3player.playlist.PlaylistFacade.GetInstance(); this.playerFacade = ...

    经典频谱文件

    import flash.net.URLRequest; import flash.utils.ByteArray; import flash.text.TextField; public class SoundMixer_computeSpectrum extends Sprite { public function SoundMixer_computeSpectrum() { ...

    NetworkEye:NetworkEye是一个网络监视器,自动捕获各种请求发送的请求和响应信息

    就像上帝睁开眼睛书与原理我写了一本书 ,每章记录了实现细节的过程功能以及探索的方式。对不起,英文朋友,这本书是中国人写的。例子要运行示例项目,请克隆存储库,然后首先从Example目录运行pod install 。用法...

    CS6打开歌词同步频谱播放器源码

    var menuItem4:ContextMenuItem = new ContextMenuItem("Flash官方最新播放插件升级程序下载更新播放插件",true); myContextMenu.customItems.push(menuItem1); myContextMenu.customItems.push(menuItem2)...

    PHP+ Flash的文件上传程序(有Fla文件)

     upload.fla 文件中第一帧第代码第14行:urlRequest.url = "localhost/phpFlash/upload.php";  此路径改为您的本地环境配置路径,注意,路径一定要以http开头。    2.上传目录  upload.php 文件中第二行,$...

Global site tag (gtag.js) - Google Analytics