AMF-RPC for java 基础入门

今天就是想复习下上周自学的,好像有点忘记了.

一.关于AMF-RPC技术简介:

AMF是专用于FLASH远程数据传输的一种数据格式.

RPC是远程过程调用,也是WEB分布式服务的一种.网络上找的解释如下:

Remote Procedure Calls
远程过程调用 (RPC) 是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。在 RPC 中,发出请求的程序是客户程序,而提供服务的程序是服务器。
RPC(远程过程调用)是一项广泛用于支持分布式应用程序(不同组件分布在不同计算机上的应用程序)的技术。RPC 的主要目的是为组件提供一种相互通信的方式,使这些组件之间能够相互发出请求并传递这些请求的结果。

那么综上:AMF-RPC就是使用amf数据格式实现的远程方法调用了.在JAVA领域现在叫FLASH  REMOTING  MX  FOR J2EE.主要优点是易用,高性能,和可扩展性.

下载地址:http://trials.adobe.com/pub/esd/trial/flashremoting-java-win-en.exe
FLASH 8相关组件flashremoting_components_flash8.rar下载地址:

http://kook1001.javaeye.com/topics/download/4635638e-8186-4439-a0cb-7594761d4529

虽然FLASH的最新版本是9.0(CS3)但是好像没有更新这部分组件.具体也不太清楚,网络上是这么查的,所以暂时先用FLASH8.0

二.安装和配置AMF-RPC开发环境

1.服务端组件:

 直接点击安装flashremoting-java-win-en.exe就可以.主要是把安装完生成的flashgateway.war拷出来,解压后,把里头的flashgateway.jar拷到建的工程目录下.

2.客户端组件:

下下来的是flashremoting_components_flash8.msi文件,如果操作系统环境正确,也是直接安装就可以,只要选择一下FLASH的安装路径就好了.安装完,打开FLASH,再点击"组件"就可以看到了.

RemotingConnector组件

 

正所谓:工欲善其事,先利其器啊.终于搞定了环境了.

但是听说,服务端在这个组件不是开源的要收费什么的?也不太清楚,现在只能将就.

另外Java开源实现叫做OpenAMF.所以还有待更深入研究下.

网络上的一些解释:

Flash Remoting的原理类似于Resin的Hessian,都是使用基于HTTP协议的轻量级二进制协议,即AMF。

Flash Remoting使用AMF来和服务器通讯。基本过程的原理可以参考Flash网站上面的文档。简单来说就是在服务器端,需要有一个Gateway,这个Gateway就是一个Servlet,接收Flash的HTTP请求,然后把AMF格式封装的HTTP请求解析成为对服务器端对象的调用(例如调用Java的业务对象);在客户端,Flash Remoting API接收服务器端的HTTP Response,把AMF格式封装的Response解析成为Flash 数据对象。

Flash6/Flash7都完整的支持Flash Remoting,特别值得一提的是,AMF会携带Session的Cookie id,所以你可以和浏览器编程一样进行Session控制。

在服务器端,Macromedia提供Java版和dotnet版的Flash Remoting Gateway,但是要收费的(8000多人民币),此外Macromedia的JRun和ColdFusion应用服务器也包含了Flash Remoting Gateway。

但是PHP和Java都有开源的Flash Remoting Gateway实现,Java叫做OpenAMF。这个OpenAMF实际上并不比MM的Flash Remoting Gateway差,并且由于开源,还有很多MM的Gateway不具备的功能。


三.应用程序例子:

是基于servlet的应用,是FLASH FOR  JAVA 动态网站开发手札一书上的一个例子,先拿来用用.

1.web.xml文件的配置:

< servlet >
        
< servlet-name > FlashGatewayServlet </ servlet-name >
        
< servlet-class > flashgateway.controller.GatewayServlet </ servlet-class >
        
< init-param >
            
< param-name > LOG_LEVEL </ param-name >
            
< param-value > Error </ param-value >
        
</ init-param >
        
< init-param >
            
< param-name > DISABLE_JAVA_ADAPTERS </ param-name >
            
< param-value > false </ param-value >
        
</ init-param >
        
< load-on-startup > 1 </ load-on-startup >
    
</ servlet >

    
< servlet-mapping >
        
< servlet-name > FlashGatewayServlet </ servlet-name >
        
< url-pattern > /gateway </ url-pattern >
    
</ servlet-mapping >
      
      <servlet>
    <servlet-name>HelloWorldServlet</servlet-name>
    <servlet-class>com.ll.amf.HelloWorldServlet</servlet-class>
  </servlet>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
 
 
 

 

2.java代码:

 

package  com.ll.amf;

import  java.io.IOException;
import  javax.servlet.Servlet;
import  javax.servlet.ServletConfig;
import  javax.servlet.ServletException;
import  javax.servlet.ServletRequest;
import  javax.servlet.ServletResponse;
// 导入所需的类库
public   class  HelloWorldServlet     implements  Servlet  {
    
//继承Servlet类,最常使用的就是HttpServlet类
      private String message = null;
      
public void init(ServletConfig config) throws ServletException {
        message 
= "嗨!Flash Remoting MX for Java";
        System.out.print(
"测试.........");
      
//调用Servlet的init()方法,在该方法内为字符串message赋值
      
//要注意init()方法是在首次创建Servlet就调用的,
      
//而不是在每次请求是调用
      }

      
public void service(ServletRequest request, ServletResponse response)
           
throws  ServletException, IOException {

        request.setAttribute(
"FLASH.RESULT", message);
      
//每当服务器接收到对Servle的请求时,服务器就会产生一个线程
      
//并调用Servlet的service()方法,在该方法内
      
//我们使用request对象的setAttribute()方法为参数FLASH.RESULT赋值
      
//参数FLASH.RESULT被返回给Flash影片应用程序
      }

      
public String getServletInfo() {
        
return "A test servlet.";
      }

      
public ServletConfig getServletConfig() {
        
return null;
      }

      
public void destroy() {
        message 
= null;
      }

    }

 

3.FLASH影片应用程序:就简单创建一个空白的影片,加入代码就OK了.哈

 

stop();
// -------------------------------------------------------------
import mx.remoting.Service;
// 导入Service类
import mx.rpc.FaultEvent;
// 导入FaultEvent类
import mx.remoting.PendingCall;
// 导入PendingCall类
import mx.rpc.ResultEvent;
// 导入ResultEvent类
import mx.rpc.RelayResponder;
// 导入RelayResponder类
//
import mx.remoting.debug.NetDebug;
//
NetDebug.initialize();
//
导入remoting.debug类并初始化
//
或者两行脚本并成一行,使用下面的脚本
mx.remoting.debug.NetDebug.initialize();
var  myService:Service  =   new  Service( " http://localhost:8080/amftest/gateway " null " amftest " null null );
// 连接到远程服务
var  pc:PendingCall  =  myService.HelloWorldServlet();
// 调用远程服务方法
pc.responder  =   new  RelayResponder( this " getData_Result " " getData_Fault " );
// 使用responder定义返回的结果对象或者出错对象
trace( " 这时,信息还未返回 " );
function  getData_Result(re:ResultEvent):Void  {
    
//接收结果
    trace(re.result);
}

function  getData_Fault(fe:FaultEvent):Void  {
    
//接收错误
    trace("接收到错误");
}

 

测试影片结果如果在输出面板出现在java代码中定义的信息就OK啦.

输出结果

 

好像也没有那里有很权威的资料,只是到处搜索到处拼凑哈,仅仅是学习用.见笑了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值