《(国内标准)S讲解》由会员分享,可在线阅读,更多相关《(国内标准)S讲解(2页珍藏版)》请在金锄头文库上搜索。
1、AMF么不就adobe的一个RPC(远程过程调用协议)的方案么,直接使用就行了;但是恶心于adobe的AMF构架(java版本 blazeds【BlazeDS 是一个基于服务器的 Java 远程控制 (remoting) 和 Web 消息传递 (messaging) 技术,它能够使得后端的 Java 应用程序和运行在浏览器上的 Adobe Flex 应用程序相互通信。】),实在让人不写不快,也希望给用AMF的人少走点弯路。 先来看个first practice http:/ 同时amf的相关文档 http:/ 很简单,直接通过flex就能访问到java的service,如果熟悉dwr的一定知道
2、这个与dwr有惊人的相似;但是这个构架存在一个理念上的问题,纯理念上的。 1. 耦合了客户端和服务端的开发,客户端和服务端的开发都需要同一个flex/services-config.xml(services-config.xml 配置了channel 和 destination 2. 一个客户端只能绑定一个amf服务(如果访问不同服务器的amf服务,无法配置) 3.amf构架自己的bean container,无法与传统的spring容器进行整合。 这三个问题,一度让人放弃amf框架,比如采用json协议甚至更便捷,更能跨各种语言(amf目前只有稳定的php版本,不算稳定的java版本)好在s
3、pring blazeds 框架的出来(目前也不算稳定)能很好的解决了这个问题。 首页和配置所有的spring mvc一样配置一个dispatcher(假设你已经了解了spring和amf) blazeds org.springframework.web.servlet.DispatcherServlet 1 blazeds /blazeds/* 其次在blazeds-servlet.xml配置broker borker默认其实就是指向了上文里面的web-inf/flex/services-config.xml (当然可以指定目录的位置不一定非要在flex下面)这里面定义了channel;而原
4、本定义的destination 则不需要在这里定义,而是通过直接暴露spring bean的方式来调用 这里的意思用weaponAdminService这个spring bean来暴露destination,同时destination的id也就是weaponAdminService; 同时使用的channl就是my-admin-amf 具体参见 http:/static.springframework.org/spring-flex/docs/1.0.x/reference/htmlsingle/spring-flex-reference.html 然后flex那边 不需要如上文中配置一个J2
5、EE server的工程,只需要正常的建立一个flex工程;通过amf的run-time configuration机制就可以配置 var employeeRO:RemoteObject= new RemoteObject(); employeeRO.destination = weaponAdminService; var adminChannelSet:ChannelSet = new ChannelSet(); adminChannelSet.addChannel(new AMFChannel(my-admin-amf,http:/192.168.80.189:8080/dxxd/bla
6、zeds/admin/amf); employeeRO.channelSet = adminChannelSet; employeeRO.getOperation(getWeapons).addEventListener(ResultEvent.RESULT, getListResultHandler); employeeRO.getOperation(getWeapons).addEventListener(FaultEvent.FAULT, faultHandler); employeeRO.getOperation(getWeapons).send();public function g
7、etListResultHandler(event:ResultEvent):void var results : ArrayCollection = event.result as ArrayCollection; Alert.show(results0 as Weapon).id+, OK); public function faultHandler (event:FaultEvent):void Alert.show(event.fault.faultString, Error); 这样就可以正常的结合spring 和 amf 至于为什么要用amf呢?只能说看个人喜欢,现在RPC的规范多得是,AMF不算主流,纯粹是因为这个是adobe原生的而已。