在4.2.3小节中曾经使用URLRequest加载了一个外部的图片。在前一节中,创建XML对象时也可以直接加载外部的数据。同样,开发人员也可以使用ActionScript 3.0加载指定位置的数据。与4.2.3小节中使用flash.display.Loader不同,进行数据加载使用全新的数据加载类。ActionScript 3.0改进了ActionScript 2.0中的数据加载方式,使用了新的数据加载对象URLRequest和URLLoader。这两个类搭配使用,进行服务端数据加载。
URLRequest用于发出请求。URLRequest是通过制定资源的位置或者数据处理的页面发出请求。URLLoader用于加载URLRequest请求结果的内容。具体步骤如下所示。
(1)在Flex Builder中新建一个项目,命名为“URLConnector”。打开URLConnector.mxml文件修改代码如下所示。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" click="getContent()">
<mx:Script>
<![CDATA[
//导入要使用的包
import mx.controls.Alert;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.*;
//定义发送请求
function getContent():void
{
//声明一个URLRequest指定请求数据的位置
var flexRequest:URLRequest=new URLRequest("http://localhost:8080/JspDisplay/Hello.jsp");
//定义URLLoader对象加载数据
var flexload:URLLoader=new URLLoader();
//加载请求的数据
flexload.load(flexRequest);
//添加一个事件监听器,监听加载的状况
flexload.addEventListener(Event.COMPLETE, dataLoaded);
}
//定义一个函数监听加载数据完毕事件
function dataLoaded(e:Event):void
{
//通过对话框显示加载的数据
Alert.show(e.target.data); }
]]>
</mx:Script>
</mx:Application>
在上面的代码中,URLRequest对象访问的内容是一个JSP页面。所以,需要建立一个相应基于Java的Web项目。基于URLRequest的URLLoder类进行load方法调用的时候,进行的是异步的数据加载。所以要添加一个事件进行对数据加载成功实践的监听。
(2)在开发环境中创建一个Java的Web项目,命名为“JspDisplay”。创建一个JSP文件命名为“Hello.jsp”。打开Hello.jsp文件,修改代码如下所示。
<%@ page language="java" pageEncoding="UTF-8"%>
<%String HelloStr="HelloJava";%>
<%=HelloStr%>
然后将创建的项目部署到Tomcat应用服务器上。启动Tomcat应用服务器。打开浏览器,在地址栏输入http://localhost:8080/JspDisplay/Hello.jsp,如图4.14所示。
图4.14 访问Hello.jsp效果
这里,使用JSP作为服务端页面输出技术。读者也可以使用ASP或PHP等Web页面技术作为服务端页面输出,效果如图4.14所示即可。
注意:关于JSP的开发以及Tomcat应用服务器的使用,读者可以参考Java Web开发相关的书籍。
(3)运行URLConnector应用,如图所示。单击舞台,效果如图所示。
HelloJava”。停留一段时间是表明Flex应用正通过URLRequest向服务端发出请求,并等待数据加载完毕。
单击舞台后,会停留一段时间,然后弹出对话框。对话框显示“
通过URLRequest与URLLoader的方式还可以向服务器端发送参数,可以使用POST和GET方法。修改上面例子中代码,向服务端发送数据。如下步骤所示。
(1)在上面的例子中修改URLConnector.mxml如下代码所示。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" click="getContent()">
<mx:Script>
<![CDATA[
//导入要使用的包
import mx.controls.Alert;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.*;
//定义发送请求
function getContent():void
{
//声明一个URLRequest指定请求数据的位置
var flexRequest:URLRequest=new
URLRequest("http://localhost:8080/JspDisplay/Hello.jsp");
//定义发出数据的类型格式
flexRequest.contentType="text/html";
//定义发出数据的内容
flexRequest.data="UserName=Flex";
//定义发出数据的方法
flexRequest.method=URLRequestMethod.GET;
//定义URLLoader对象加载数据
var flexload:URLLoader=new URLLoader();
//加载请求的数据
flexload.load(flexRequest);
//添加一个事件监听器,监听加载的状况
flexload.addEventListener(Event.COMPLETE, dataLoaded);
}
//定义一个函数监听加载数据完毕事件
function dataLoaded(e:Event):void
{
//输出加载的数据
Alert.show(e.target.data);
}
]]>
</mx:Script>
</mx:Application>
上面的代码中,增加了URLRequest的contentType、data和method。在这里指定contentType为text/html格式发出请求。发出的数据data为“UserName=Flex”,以参数值和参数值成对的发出。发送参数的方法method为GET。
(2)修改上一个例子里面的Hello.jsp文件如下代码所示。
<%@ page language="java" pageEncoding="UTF-8"%>
<%String UserName=(String)request.getParameter("UserName");%>
<%String HelloStr="Hello"+UserName;%>
<%=HelloStr%>
在这段代码中,接收了客户端传入的UserName参数,并且显示了出其具体的值Flex。
(3)保存修改过的代码,启动Tomcat服务器。运行URLConnector应用,单击舞台,效果如图所示。
通过运行效果可以看出,通过向URLRequest中设定数据“UserName=Flex”,可以将数据发送到服务端。并且通过服务端进行处理,再发回给客户端。
URLRequest对象与URLLoader对象组合在一起使用方式,与AJAX中XMLHTTP对象使用的方式很相像。但ActionScript 3.0中,提供了更丰富的数据库通信的方式。在后面的章节中,可以看到与Request/Response方式完全不同的数据交互方式。