BlazeDS的功能原理及配置实例

阅读更多

BlazeDS Test Drive里面示例了主要的功能:

  • HTTPService
  • Web Services
  • Remote-Object
  • Messaging

其实现是基于一个叫flex.messaging.MessageBroker的Servlet。各种消息通道的配置都存在于WEB-INF/flex/services-config.xml及其包含的3个XML文件中。下面简单介绍这四种不同的功能。

  • HTTPService:

向服务器发送HTTP请求,典型用途是获取服务器端的XML内容。服务器端可以采用任何技术:JSP、Servlet、ASP、PHP等,只要在请求的URL里面指定即可。这是个异步请求,服务器会返回resultfault事件,分别对应成功和失败。可以把返回的结果直接绑定到DataGrid上。利用useProxy属性和crossdomain.xml可以跨域访问,这是解决沙箱效应的方法之一。

另一种方法就是不用HTTPService,而是写一个JS或PHP脚本,用Ajax(XMLHTTP Object) 去访问跨域URL。(跑题了)

示例:在proxy-config.xml配置HTTPService要请求的URL地址,在程序中用“destination”映射关系来访问该URL,如示例中的“catalog”。将J返回的XML内容绑定到控件上。

 

  1. main.mxml  
  2.     <mx:HTTPService id="srv" destination="catalog" useProxy="true"/>  
  3.     <mx:DataGrid dataProvider="{srv.lastResult.catalog.product}" width="100%" height="100%"/>   
  4.     <mx:Button label="Get Data" click="srv.send()"/>  

 

 

 

  1.     
  2. WEB-INF/flex/proxy-config.xml  
  3.   <destination id="catalog">  
  4.     <properties>  
  5.             <url>/{context.root}/testdrive-httpservice/catalog.jspurl>  
  6.         properties>  
  7.     destination>  

 

 

  • WebService :

可以访问基于SOAP的web服务,其返回的对象自动被反序列化为ActionScript对象。数据绑定、沙箱问 题等与HTTPService相同。

示例:在proxy-config.xml配置WebService要请求的wsdl地址,在程序中用“destination”映射关系来访问该URL,如示例中的“ws-catalog”。将返回的对象绑定到控件上。

 

  1. main.mxml  
  2.     <mx:WebService id="srv" destination="ws-catalog" useProxy="true" showBusyCursor="true"/>  
  3.       
  4.     <mx:DataGrid dataProvider="{srv.getProducts.lastResult}" width="100%" height="100%">  
  5.         <mx:columns>  
  6.             <mx:DataGridColumn dataField="productId" headerText="Product Id"/>  
  7.             <mx:DataGridColumn dataField="name" headerText="Name"/>  
  8.             <mx:DataGridColumn dataField="price" headerText="Price"/>  
  9.         mx:columns>  
  10.     mx:DataGrid>  
  11.       
  12.     <mx:Button label="Get Data" click="srv.getProducts()"/>  

 

 

 

  1. proxy-config.xml  
  2.     <destination id="ws-catalog">  
  3.         <properties>  
  4.             <wsdl>http://livecycledata.org/services/ProductWS?wsdlwsdl>  
  5.             <soap>*soap>  
  6.         properties>  
  7.         <adapter ref="soap-proxy"/>  
  8.     destination>  

 

 

  • Remote-Object:

让用户可以直接访问服务器上的对象的方法,要被访问的对象是一个JAVA类,和Servlet、JSP差不多,但是远程请求的这部分被隐藏起来了。返回的JAVA对象被自动反序列化为Actionscript对象,如果不加以指定类型,就成为一个动态对象。远程访问也是异步的,resultfault事件,分别对应成功和失败。

示例:在remoting-config.xml配置远程对象的类名,在程序中用“destination”映射关系来访问该类的示例,如示例中的“product”。将返回的java.util.ArrayList对象绑定到控件上。

 

  1. main.mxml  
  2.     <mx:RemoteObject id="srv" destination="product"/>  
  3.       
  4.     <mx:DataGrid dataProvider="{srv.getProducts.lastResult}" width="100%" height="100%"/>   
  5.     <mx:Button label="Get Data" click="srv.getProducts()"/>     

 

 

 

  1. remoting-config.xml  
  2.     <destination id="product">  
  3.         <properties>  
  4.             <source>flex.samples.product.ProductServicesource>  
  5.         properties>  
  6.     destination>  

 

 

 

view plain copy to clipboard print ?
  1. package flex.samples.product;  
  2. import java.util.ArrayList;  
  3. public class ProductService {  
  4.         public List getProducts() {  
  5.            List list = new ArrayList();  
  6.            list.add(new Product(100"abc"));  
  7.            return list;  
  8.         }  
  9. }  
  10. public class Product implements Serializable {  
  11.         private int productId;  
  12.         private String name;  
  13.         public Product(int productId, String name)   {...}  
  14.     public int getProductId() {  
  15.         return productId;  
  16.     }  
  17.     public void setProductId(int productId) {  
  18.         this.productId = productId;  
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.     public void setName(String name) {  
  23.         this.name = name;  
  24.     }  
  25. }  

 

 

  • Messaging

消息本身包含消息头和消息体,消息头的格式是固定的,消息体的内容可以随意写。接触过状态机、分布式嵌入式系统编程的会很容易理解。

消息服务允许Flex客户端可以发布(Publish)和订阅(Subscribe)消息,相应的,客户端的被称为生产者(Producer)和消费者(Consumer),其实也就是发送和接受消息了。

当一个消息被发到已订阅的目的地(destination)时,就会触发一个客户端的message事件。发布的任何消息会发给所有订阅的人,即使是生产者自己。如果某一订阅方只想收到特定的消息,可以在订阅时使用selecor属性来指定过滤条件,只有符合条件的消息才会被服务器转发。如果想要服务器产生消息,可以产生一个flex.messaging.messages.AsyncMessage类的实例,用flex.messaging.MessageBroker发送出去。

示例:在服务器端发布消息。通过JSP或Servlet建立一个无限循环线程产生消息。在messaging-config.xml配置消息通道(channel),在程序中用“destination”映射关系来访问该通道,如示例中的“feed”。

 

 

 

 

 

 

  1.    
  2. WEB-INF/flex/messaging-config.xml  
  3.    <destination id="feed">  
  4.           
  5.   

 

 

你可能感兴趣的:(flex,blazeds)