论坛首页 编程语言技术论坛

flex使用BlazeDS远程调用java

浏览 10881 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-18   最后修改:2009-05-18
近段时间在学习flex和java如何调用的时候看到了BlazeDS,在网上找了一些资料,整理了一下,并自己做了个简单的HelloWord例子,本篇文章只是对flex使用BlazeDS远程调用的整理学习之用。

什么是BlazeDS呢?BlazeDS是一个基于服务器的Java远程调用(remoting)和Web消息传递(messaging)技术,它能够使得后台的Java应用程序和运行在浏览器上的Flex应用程序相互通信。
1.下载BlazeDS:http://opensource.adobe.com/wiki/display/blazeds/Release+Builds  ——》》Download the BlazeDS binary distribution
2.下载完后将里面的 blazeds.war 文件解压到tomcat的webapps
目录下,然后启动tomcat,在webapps下生成了blazeds文件夹,关闭tomcat。

3.打开blazeds文件夹,在WEB-INF文件夹下有个flex文件夹,其中包含是个xml文件:messaging-config.xml、proxy-config.xml、remoting-config.xml、services-config.xml,这些文件对应相应的服务:远程调用(在remoting-config.xml中配置)、访问代理(proxy-config.xml)、消息服务(messaging-config.xml),同时框架允许你添加自定义的服务(在services-config.xml中配置)。
1.远程调用。其实框架在这里起到的作用和struts等服务端的框架差不多,都是任务分配的功能,只不过blazeDS支持客户端直接对象调用,一方面提高了数据传输速度,另一方面省了在客户端写url,但是它需要编译客户端的时候关联服务端配置文件,烦!综合考虑优缺点,这个功能还是值得使用的。
2.访问代理。能够提供权限控制,和跨域访问的能力。这个任何web服务器都能做到(加httpClient转发么),没什么特殊之处。
3.消息服务。这个正式blazeDS 牛的地方,它能向普通的浏览器客户端页面推送数据,而不需要建立socket链接。这个应用在很多地方都有用到,比如股票信息即时刷新,在线聊天等等需要实时数据推送的场景。

接下来做个远程调用的hello world例子:
简单描述下开发环境:
IDE:Flex Builder 3
服务器:tomcat6.0

1.写个java类:helloWord
package com.flex.test;
  
public class HelloWorld { 
  
 public HelloWorld() { 
 } 
  
 public String getHelloWorld() { 
  return "Hello World!"; 
 } 
} 

编译HelloWord,并把编译的class文件放到刚才下载的blazeds.war 下的\WEB-INF\classes文件夹下,注意:我们把HelloWorld打包到了com.flex.test;所以同样需要在classes文件夹下创建com\flex\test这些文件夹,然后把HelloWorld.class放到\WEB-INF\classes\com\flex\test下。
2.接下来配置remoting-config.xml文件:
在</service>标签前加入:
    <destination id="helloWorld"> 
        <properties> 
            <source>com.flex.test.HelloWorld</source> 
        </properties> 
    </destination>

其中id属性我们在flex调用的时候会用到,source结点描述了完整的包路径和类名。

3.创建Flex项目:HelloWord

4.编辑HelloWord.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
    <![CDATA[
    	import mx.rpc.events.FaultEvent;
       import mx.collections.ArrayCollection;
       import mx.rpc.remoting.mxml.RemoteObject;
       import mx.controls.Alert;
       import mx.rpc.events.ResultEvent;
       
       public function submit():void{
           var remote:RemoteObject = new RemoteObject();
           //调用在J2EE端remoting-config.xml中配置的暴露出的类的名称 id
           remote.destination = "helloWorld";
           //调用J2EE端类中的方法
           remote.getHelloWorld();
           //监听调用成功事件
           remote.addEventListener(ResultEvent.RESULT,result);                
           //监听失败事件
           remote.addEventListener(FaultEvent.FAULT,fault);  
       }
       
       private function result(evt:ResultEvent):void{
           Alert.show(evt.result.toString());
       }
       
        private function fault(evt:FaultEvent):void{
           Alert.show("调用失败!");
       }       
    ]]>
	</mx:Script>

    <mx:Button click="submit()" label="hello" horizontalCenter="0" verticalCenter="0"/>

</mx:Application>



5.重起tomcat,然后运行HelloWorld.mxml。

附件包含:blazeds.war和Flex项目:HelloWorld,运行例子只需要把blazeds.war放到tomcat的webapps目录下,然后运行HelloWorld.mxml即可。
   发表时间:2009-11-27  
然后运行HelloWorld.mxml即可。
怎么运行啊,HelloWorld.mxml
0 请登录后投票
   发表时间:2009-11-27  
选中文件 单击鼠标右键,选择 run application
0 请登录后投票
   发表时间:2009-11-29  
哥们儿,能不能搞点儿复杂的例子,比如struts2与flex什么的
0 请登录后投票
   发表时间:2009-11-30  
wangdgsc 写道
哥们儿,能不能搞点儿复杂的例子,比如struts2与flex什么的

flex我也只是简单的了解一下,你想要学点如何集成到现有的j2ee应用,可以看下这篇文章:http://www.ibm.com/developerworks/cn/java/j-lo-jeeflex/?ca=drs-tp4608
0 请登录后投票
   发表时间:2010-01-26  
请问下 你是不是把flex和java项目是分开在开发的?这个例子?
0 请登录后投票
   发表时间:2010-01-26  
为什么我照你的配置 总是弹出调用失败?我现在正在看java与flex通讯部分 总是看不明白
0 请登录后投票
   发表时间:2010-01-26  
azhqiang 写道
请问下 你是不是把flex和java项目是分开在开发的?这个例子?

引用
编译HelloWord,并把编译的class文件放到刚才下载的blazeds.war 下的\WEB-INF\classes文件夹下,注意:我们把HelloWorld打包到了com.flex.test;所以同样需要在classes文件夹下创建com\flex\test这些文件夹,然后把HelloWorld.class放到\WEB-INF\classes\com\flex \test下。
0 请登录后投票
   发表时间:2010-01-26  
azhqiang 写道
为什么我照你的配置 总是弹出调用失败?我现在正在看java与flex通讯部分 总是看不明白

tomcat有没启动?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics