Flex+Java+Blazeds
1、环境:jdk1.6,Flex4.6 2、工具:MyEclipse10 3、服务器:Tomcat7 4、连接方式:Blazeds 5、项目类型:Flex项目 6、步骤 (1)新建Flex项目一个,命名为FlexToJava ? 填写项目名之后,点击“下一步”。 选择BlazeDS,勾选“使用WTP…”,点击下一步,下面默认,完成新建项目。 新建的项目目录如下 ? ? (2)将新建的项目加入到Tomcat中 ? 启动Tomcat,运行FlexToJava?.mxml页面,启动正常。 如果出现启动错误 在Tomcat目录conf下找到context.xml文件,增加一句<Loader?delegate="true"?/>即可 ? (3)切换到Java端,新建一个Java类FlexToJava.java (4)找到WebRootWEB-INFflex目录下的remoting-config.xml,增加一段代码用于配置的Java类。这里的id就是Flex页面RemoteObject中的destination属性的值。
<destination id="myFlexToJava"> <properties> <source>com.java.FlexToJava</source> </properties> </destination> (5)找到前台的Flex页面——FlexToJava.mxml,写入代码调用后台的Java方法。 具体代码如下:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.events.ResultEvent; protected function button1_clickHandler(event:MouseEvent):void { this.ro.getName(this.txt.text); this.ro.addEventListener(ResultEvent.RESULT,getName); } protected function getName(event:ResultEvent):void { Alert.show(event.result.toString()); } //这里有两种处理返回值的方法,一是在RemoteObject中直接写入,还有一种是addEventListener private function error(e:FaultEvent):void { errorMsg.text=e.message.toString(); } ]]> </fx:Script> <fx:Declarations> <s:RemoteObject id="ro" destination="myFlexToJava" fault="error(event)"></s:RemoteObject> </fx:Declarations> <s:Label x="65" y="80" text="名字"/> <s:TextInput id="txt" x="97" y="73"/> <s:Button x="250" y="74" label="获取" click="button1_clickHandler(event)"/> </s:Application> 然后运行这个Flex文件,获得界面如下: 但是会报一个错 ? [RPC?Fault?faultString="Send?failed"? faultCode="Client.Error.MessageSend"? faultDetail="Channel.Connect.Failed?error?NetConnection.Call.Failed:?HTTP:?Status?404:? url:?'http://localhost:8080/WebRoot/messagebroker/amf'"] 观察这个错误,发现报的错中url这一项不对,我们的地址应该是http://localhost:8080/FlexToJava,而非http://localhost:8080/WebRoot,故而要修改一个地方。 进入项目的“属性”菜单, ? 选择Flex服务器,发现“内容文件夹”一项是“WebRoot”字样,记得把Flex编译器中编辑器参数改成 “-services?"D:/Workspaces/FlexToJava/WebRoot/WEB-INF/flex/services-config.xml"?-locale?en_US”,不然会报错,因为Flex服务器修改后这边会自动把WebRoot改成FlexToJava,要改回来。 ? (6)重新部署项目,启动Tomcat,运行FlexToJava.mxml,填入姓名,点击按钮,弹出对话框。成功! 这里要注意URL,默认出的URL会少一个out目录,需要在运行配置中再配置一下。或者在项目属性菜单中,Flex构建路径菜单下,输出文件夹URL项目填入http://localhost:8080/FlexToJava/out,运行时就会出现out目录了。 ? ? 后记 试了几回,看能不能一次成功,结果不行,都是要再配置Flex服务器中的内容文件夹,或者别的方法,这是我得出的比较明晰的一种方法了,大概还有更好的,可以一次成型,先凑合用吧。 这是从Flex端建Flex项目,然后嵌入Java的方式,还可以从Java端建Java?Web项目,然后嵌入Flex,我试了几回也没成功,只是学到一些别的东西。 从Java端建Java?Web项目时,有一步是解压Blazeds.war包,将得到的WEB-INF替换掉新建项目的WEB-INF,这里面主要替换的就是WEB-INF下的flex文件夹下的四个配置文件、几个必须lib包和web.xml文件。 其中,flex文件夹下的四个配置文件中的remoting-config.xml文件,我们从中配置了一段代码,这段配置就是指引flex如何访问java对象,同时也是指引Blazeds配置类映射的功能。另外这里配置的一定是实现类地址,不能是接口。services-config.xml文件,注册数据通道,下面这段代码就定义了一个通道,Flex就通过这个通道与服务器通讯。
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> 上面的url我们有些许似曾相识,与我们上面的一个报错“http://localhost:8080/WebRoot/messagebroker/amf?”很像吧,我们可以看出错误中WebRoot的位置应该放的是context.root(上下文根目录),不知道是中文翻译过来的问题还是什么别的,我们的错误修改了“内容文件夹”的值之后就解决了,但是这边的意思应该是取的“上下文根目录”的值。 关于Blazeds的知识和这几个配置文件的知识,还要继续学习。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |