`

用一个HelloWorl例子手把手教会你使用BlazeDS

    博客分类:
  • flex
阅读更多

   原创: http://www.riahome.cn/?p=69

   什么是BlazeDS呢?BlazeDS是一个基于服务器的Java远程调用(remoting)和Web消息传递(messaging)技术,它能够使得后台的Java应用程序和运行在浏览器上的Flex应用程序相互通信。在各大搜索引擎里,关于BlazeDS的中文教程来来去去都是那几篇,而且都是使用Eclipse来开发Flex的(用Eclipse开发Flex跟Java很不错的)。这篇文章将会尝试着使用Flex Builder 3,用一个经典的“HelloWorld”例子来让你学会BlazeDS的使用方法。
        在开始之前,你需要安装JDK和Tomcat并实现成功配置,详细请看:Tomcat 6.0 配置

一、我电脑上的配置是如下四点,如果你电脑上的配置不同于以下四点,可能需要你对你的电脑进行修改一下:
        1、Window XP;
        2、Tomcat 6.0,安装在“C:\Program Files\Apache Software Foundation\Tomcat 6.0\”,下文会使用“[tomcat-home]”来代替这长长的目录路径;
        3、Tomcat服务器使用端口8080;
        4、使用Flex Builder 3而非Eclipse。

二、如果你对以下操作比较陌生,那你应该先熟悉一下以下操作:
        1、写一个Java文件并编译它;
        2、使用Flex Builder 3;
        3、停止和开户Tomcat服务器。

三、下载BlazeDS:
        1、网址:http://opensource.adobe.com/wiki/display/blazeds/Release+Builds
        2、下载那个“BlazeDS binary distribution”(http://download.macromedia.com/pub/opensource/blazeds/blazeds_bin_3-0-0-544.zip );
                i. 把那个 .zip 文件保存到你的电脑上
                ii. 里面有两个文件:blazeds.war 和 blazeds-bin-readme.html
                iii. 把里面的 blazeds.war 文件解压到这个目录下:[tomcat-home]\webapps
        3、如果Tomcat正在运行,请停止它然后再启动它(就是重启Tomcat);
        4、打开这个目录:[tomcat-home]\webapps
                i. 你应该会看到一个名为“blaseds”的文件夹
                ii. 在blaseds文件夹里,会有一个名为“WEB-INF”的文件夹
                iii. 在WEB-INF文件夹里会有很多文件夹,其中有一个名为“classes”的文件夹。Flex应用程序需要使用到的Java class就是放到这个文件夹里的
                iv. 还有一个名为“flex”的文件夹,它里面有一个remoting-config.xml,我们要在这个remoting-config.xml文件里添加destination结点来告诉Flex应用程序如何连接上Java class的

四、使用文本编辑器编写以下这个Java文件并命名为“HelloWorld.java”:

package cn.riahome.java;

public class HelloWorld {

	public HelloWorld() {
	}

	public String getHelloWorld() {
		return "Hello World!";
	}
}
 

编译这个Java文件并得到HelloWorld.class文件。在 [tomcat-home]\webapps\blazeds\WEB-INF\classes 目录下新建一个名为“cn”的文件夹,然后在cn文件夹新建一个“riahome”文件夹,接着在riahome文件夹里新建一个“java”文件夹,最后把刚才编译得到的HelloWorld.class文件放到java文件里,HelloWorld.class的路径应该为:[tomcat-home]\webapps\blazeds\WEB-INF\classes\cn\riahome\java\HelloWorld.class

五、打开 [tomcat-home]\ webapps\blazeds\WEB-INF\flex\remoting-config.xml 这个文件,然后在</default-channels>标签之后和</service>标签之前添加以下结点(注意id属性和source结点的值,source结点描述了完整的包路径和类名):

<destination id="helloWorld">
   <properties>
       <source>cn.riahome.java.HelloWorld</source>
   </properties>
</destination>
 

六、如果Tomcat正在运行,请停止它然后再启动它(就是重启Tomcat);

七、请按以下步骤新建一个名为“HelloWorld”的Flex Project:

 

 

八、在 HelloWorld.mxml 文件的<mx:Application></mx:Application>标签之间添加如下代码:


<mx:Script>
        <![CDATA[
            
            import mx.rpc.events.FaultEvent;
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            
            private function resultHandler(event:ResultEvent):void
            {
                // 显示收到的 "Hello World!" 数据
                Alert.show(event.result.toString(), "提示");
            }
            
            private function faultHandler(event:FaultEvent):void
            {
                Alert.show(event.fault.toString(), "提示");
            }
            
        ]]>
    </mx:Script>
    
    <mx:RemoteObject id="remoteObject" destination="helloWorld" source="cn.riahome.java.HelloWorld"
        result="resultHandler(event)" fault="faultHandler(event)"/>
    
    <mx:Button label="发送" click="remoteObject.getHelloWorld()"/>
 

九、按F11测试,你看到一个叫“发送”的按钮,按一下它,会弹出“Hello World!”,这是后台发送过来的。至此,我得恭喜您!您成功了!

十、最后需要注意的是:<mx:RemoteObject>标签的destination属性值必须跟remoting-config.xml文件里destination标签的id值一致!

如果您还是测试不成功,请注意以下几点:
1、核实HelloWorld.class文件已经在[tomcat-home]\webapps\blazeds\WEB-INF\classes\cn\riahome\java目录下;
2、检查remote-config.xml文件里是否已经添加了上述的<destination>标签;
3、有没有重启Tomcat服务器;
4、检查<mx:RemoteObject>标签有没有这两个属性:destination=”helloWorld”、source=”cn.riahome.java.HelloWorld”
5、打开Flex Project的属性面板,查看 Flex Compiler 里的Additional compiler arguments选项,是否已经有“-services”指令,如下图(通常在新建Project的时候就自动添加的)

 

 

 

分享到:
评论

相关推荐

    003_android之 第一个helloWorld程序

    在这个“003_android之 第一个helloWorld程序”视频教程中,你将深入了解到Android应用开发的基础知识,包括环境配置、创建项目、布局设计以及运行应用的基本流程。 首先,你需要安装Android Studio,这是Google...

    C#开发ActiveX程序及文档源码

    总之,这个项目提供了一个实践C#开发ActiveX控件的例子,通过分析源码,我们可以学习到如何创建、配置和安全地使用ActiveX控件,以及如何将它们集成到ASP.NET Web应用程序中。这对于深入理解.NET框架,尤其是C#与COM...

    js字符串截取函数substr substring slice使用对比

    如果第一个参数大于第二个参数,substring函数会自动交换这两个参数,确保第一个参数始终表示开始位置,第二个参数表示结束位置。 最后是slice函数。slice函数的功能和substring类似,它也可以接收两个参数,表示...

    reason-loadable:sp SuspenseLazy for ReasonReact

    概括 :fire: 的 。 安装 npm install reason-loadable --save 然后在“ bsconfig.json”中添加“ reason-loadable”: " bs-dependencies " : [ ...创建一个ReasonReact挂钩组件(JSX v3)。 /* HelloWorl

    C语言之没有main函数的helloworld示例

    但它包含有一个程序最重要的部分,那就是我们在几乎所有代码中都能看到的main函数,我们编译成可执行文件并查看符号表,过滤出里面的函数如下(为了方便查看我手动调整了grep的输出的格式,所以和你的输出格式是不...

    C语言面试题大汇总之华为面试题.pdf

    要引用一个已经定义过的全局变量,可以使用extern关键字。extern可以用来声明全局变量,但不分配内存空间,这允许其他文件中的函数通过头文件包含的方式访问该变量。使用extern引用时,如果变量名写错,则只会在连接...

    archetype-dropwizard-kotlin:基于Kotlin的Dropwizard应用程序的Maven原型

    基于Kotlin的Dropwizard原型如何使用dropwizard创建Kotlin项目(交互模式) mvn archetype:generate -...请确保使用诸如HelloWorld类的驼峰单词,因为它用于生成Configuration和Application类,例如HelloWorl

    Python经典面试题.pdf

    如果列表不是列表对象,而是一个序列,例如元组,那么可以使用`reversed()`函数,它返回一个反向迭代器,然后可以通过循环来访问每个元素。 以上知识点详细地描述了Python语言在单例模式、lambda函数、类型转换、...

    Python面试题总结.pdf

    第一种是利用装饰器(decorator),创建一个全局的字典用于存储类的实例,并通过装饰器返回这个实例。如果在字典中不存在类的实例,则创建一个新的实例并存入字典,如果已经存在,则返回该实例。第二种方式是通过定义...

    docker-google-cloud-functions-emulator:用于开发和测试目的的用于运行Google Cloud Functions的Docker映像

    Docker:Google云功能仿真器 该映像基于基本Ubuntu映像,并提供了用于运行Google Cloud Functions的环境,以进行开发和测试。 在上可用。 用法 在哪里放置云功能代码 .../root/functions/helloWorl

    重解几道华为经典C语言面试题.pdf

    同时,test2函数中变量i没有定义,这是一个编译错误。在test3中,虽然没有直接的数组越界问题,但通过if语句检查了字符串长度,确保了安全地使用strcpy函数。 2. 静态变量与自动变量的区别 在sum函数中,变量c被...

    Ajax请求跨域问题解决方案分析

    服务器收到请求后,生成一个包含数据的JavaScript函数调用,格式为`functionName({data})`,并返回给客户端。客户端的JavaScript环境会执行这个函数,从而获取到数据。例如,使用jQuery的JSONP功能,客户端代码如下...

    python_cheatsheet_完美总结.pdf

    在Python 2中,print是一个语句,而在Python 3中,它被改进为一个函数。这一改变意味着print可以接受更多参数,提供更多的灵活性。 Python 2中的用法: ```python print "print is a statement" for x in range(3):...

    三款经典android小游戏源码分析.7z

    1. **游戏循环(Game Loop)**:所有游戏的核心都基于一个游戏循环,它负责处理游戏的逻辑更新、渲染画面和处理用户输入。在贪吃蛇和太空保卫战中,可以看到如何构建一个高效稳定的游戏循环。 2. **图形渲染**:...

    方正_安卓面试题.7z

    这份“方正_安卓面试题”压缩包文件,很可能是为准备Android开发者面试而整理的一系列问题集。下面,我们将详细探讨这些可能涉及的面试知识点。 一、基础知识 1. Android系统架构:理解Linux内核、库层、应用程序...

    python期中考试试卷.doc

    4. **序列操作**:`range(1,10,3)`生成一个步长为3的序列,从1到10不包括10,其值为`[1, 4, 7]`。 5. **数据类型**:Python的数据类型包括整型(int)、字符串型(str)、浮点型(float)以及复数等。 6. **序列...

    10.Java Programming Cheatsheet_精华总结_小抄.pdf

    - Your First Program:可能是对如何创建和运行一个基本的Java程序的介绍。 - Built-in Types of Data:Java内置的数据类型,如int、float、boolean等。 - Conditionals and Loops:条件语句和循环结构,如if-...

    深圳华为C语言面试题集.pdf

    区别在于for循环的语法格式提供了初始化、条件判断和循环后操作三个部分,而while循环仅有一个条件判断部分。 5. do...while和while...do的区别:do...while循环至少执行一次循环体,因为条件判断是在循环体执行后...

Global site tag (gtag.js) - Google Analytics