加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex如何使用Blazeds与JAVA通信

发布时间:2020-12-15 01:10:05 所属栏目:百科 来源:网络整理
导读:上一次,我讲了如何新建一个包含Blazeds组件的工程 ( http://www.lightria.cn/index.php/archives/flexruheshiyongblazedsyujavatongxin1/ ) ,这一次我们讲如何如何使用Flex的远程对象调用服务端方法。在这里,大家要明确一点,那就是虽然Blazeds是用JAVA
上一次,我讲了如何新建一个包含Blazeds组件的工程 http://www.lightria.cn/index.php/archives/flexruheshiyongblazedsyujavatongxin1/ ,这一次我们讲如何如何使用Flex的远程对象调用服务端方法。在这里,大家要明确一点,那就是虽然Blazeds是用JAVA开发的,但是这并不意味着我们只能与JAVA端通信。事实上,我们还可以使我们的FLEX端与采用Groovy,Python,Ruby,Scala等语言编写的服务端通信,不过这可不是我今天的重点。

??????? Flex的Remoting采用AMF通信协议(Flex3已经升级为了AMF2了),这种协议最大的一个优势就是由于采用了二进制的传输方式,其传输效率非常高,可以让我们在复杂的网络环境获得良好的性能。根据国外一个很牛的老外写的在线测试工具,AMF协议的效率要远远高于webservice以及采用JSON格式承载数据的AJAX方式。

?Flex的另一种方式通信就是PollingChannel,它的特点就是它可以多批次的去服务端取数据,而不是长时间保持连接直到所有数据取回之后才关闭我们宝贵的HTTP连接。

?????? 首先我们在WEB-INF下面的Class目录中添加一个JAVA类,如下:

???? public class HelloWorld {
???????? private String userSaid;
??????? public String repeat(String said) {
??????????? this.userSaid = "Reply from server: " + said;
??????????? return this.userSaid;
????????}
??????? public String sayHello() {
??????? Date now = new Date();
??????? return "Hello World " + now;
??? ?}
? }

??????? 然后我们打开Remoting-Config.xml文件,在service中添加一个目的地指向我们服务端的JAVA类(destination节点),具体如下:

??????? <service id="remoting-service" class="flex.messaging.services.RemotingService">
??????? <adapters>

??????? <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"></adapter-definition>
?????? </adapters>
?????
<destination id="Hello">
?????? <properties>

????? ?? <source>HelloWorld</source>
?????? </properties>
????? </destination>
??? <default-channels>
??????? <channel ref="my-amf">
??? </channel>
</default-channels>
</service>

?????? 添加完成之后,我们打开一个flex页面,在上面添加一个RemotObject标签,当然你也可以在可视化状态下拖一个上去,然后添加我们刚才在HelloWorl类中定义的两个方法,并在AS代码块中定义两个回调方法用来异步接收返回的结果或发生的异常,具体代码如下:

?????? <mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundcolor="#FFFFFF" viewsourceurl="srcview/index.html">
??? <mx:remoteobject id="myservice" fault="faultHandler(event)" showbusycursor="true" destination="Hello">
??????? <mx:method name="sayHello" result="resultHandler(event)">
??????? <mx:method name="repeat" result="resultHandler(event)">
??? </mx:method>
?
??? <mx:script>
??????? <!–[CDATA[
??????????? import mx.managers.CursorManager;
??????????? import mx.rpc.events.ResultEvent;
??????????? import mx.rpc.events.FaultEvent;
??????????? private function faultHandler(fault:FaultEvent):void
??????????? {
??????????????? CursorManager.removeBusyCursor();
??????????????? result_text.text = "code:n" + fault.fault.faultCode + "nnMessage:n" + fault.fault.faultString + "nnDetail:n" + fault.fault.faultDetail;
??????????? }
?
??????????? private function resultHandler(evt:ResultEvent):void
??????????? {
??????????????? result_text.text = evt.message.body.toString(); // same as: evt.result.toString();
??????????? }
??????? ]]–>
??? </mx:script>
?
??? <mx:button x="250" y="157" label="sayHello" width="79" click="myservice.getOperation(’sayHello’).send();">
??? <mx:button x="250" y="187" label="Repeat" click="myservice.getOperation(’repeat’).send(myText.text); ">
??? <mx:textarea x="10" y="36" width="319" height="113" id="result_text">
??? <mx:label x="10" y="10" text="Result:">
??? <mx:textinput x="82" y="187" id="myText" text="Sent to Server">
</mx:textinput>
</mx:label>

</mx:textarea></mx:button></mx:button></mx:method></mx:remoteobject></mx:application>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读