在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方式完全不同的數據交互方式。