分享
 
 
 

RMI远程方法调用讲解教程 选择自 useway 的 Blog

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

RMI远程方法调用讲解教程

1、RMI概述

RMI(Remote Method Invocation)

RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信。

必须在jdk1.1以上

RMI用到的类

java.rmi.Remote

所有可以被远程调用的对象都必须实现该接口

java.rmi.server.UnicastRemoteObject

所有可以被远程调用的对象都必须扩展该类

什么是RMI

远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,

使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程

序语法规则和在本地机上对象间的方法调用的语法规则一样。

优点

这种机制给分布计算的系统设计、编程都带来了极大的方便。

只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。

任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。

1、面向对象:

RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。

也就是说,可以将类似Java哈西表这样的复杂类型作为一个参数进行传递。

2、可移动属性:

RMI可将属性从客户机移动到服务器,或者从服务器移动到客户机。

3、设计方式:

对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。

如果用户能够传递属性,那么就可以在自己的解决方案中使用面向对象的设计方式。

所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象——包括实现和类型

——就会失去设计方式上所提供的优点。

4、安全性:

RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。

RMI使用专门为保护系统免遭恶意小程序侵害而设计的安全管理程序。

5、便于编写和使用

RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。

远程接口实际上就是Java接口。

为了实现RMI的功能必须创建远程对象任何可以被远程调用的对象必须实现远程接口。但远程

接口本身并不包含任何方法。因而需要创建一个新的接口来扩展远程接口。

新接口将包含所有可以远程调用的方法。远程对象必须实现这个新接口,由于新的接口扩展了

远程接口,实现了新接口,就满足了远程对象对实现远程接口的要求,所实现的每个对象都将

作为远程对象引用。

创建远程方法调用的5个步骤:

1、定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。

2、定义一个实现该接口的类。

3、使用RMIC程序生成远程实现所需的残根和框架。

4、创建一个客户程序和服务器进行RMI调用。

5、启动Registry并运行自己的远程服务器和客户程序。

第一步、扩展远程接口

创建一个RMI程序首先要做的就是创建一个扩展远程接口的接口。在这个接口中可以添加任意希望能在

远程机器上调用的方法。

接口示例

import java.rmi.Remote;

import.java.rmi.RemoteException;

public interface RemoteInterface extends java.rmi.Remote

{

public String start(String msg) throws RemoteException;

}

在接口中定义了一个返回字符串的方法

本地接口(RemoteInterface)必须是公共的,否则客户机在加载一个实现该接口的远程对象时就会出错。

它必须从java.rmi.Remote继承而来,接口中的每一个方法都必须抛出远程异常java.rmi.RemoteException。

抛出这个异常的原因

由于任何远程方法调用实际上要进行许多低级网络操作,因此网络错误可能在调用过程中随时发生。

因此,所有的RMI操作都应放到try-catch块中。

第二步、定义一个实现该接口的类。

该类必须继承UnicastRemoteObject类。

扩展java.rmi.server.UnicastRemoteObject

UnicastRemoteObject顾名思义,是让客户机与服务器对象实例建立一对一的连接。

扩展实现接口的类例程

服务器关键语句

Naming.rebind("/RMITest",rmiTest);

//名字和接口绑定

第三步、生成残根和框架代码

在RMI中,客户机上生成的调动调用参数和反调动返回值的代码称为残根。有的书上称这部分代码为“主干”。

服务器上生成的反调动调用参数和进行实际方法调用调动返回值的代码称为框架。

生成残根和框架的工具

Rmic命令行工具(RMI Compiler)

格式:

Rmic classname

第四步、创建一个客户程序进行RMI调用

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

import java.net.MalformedURLException;

public class RemoteClientTest{

static RemoteInterface gserver=null;

void display(){

try{//查找远程对象

gserver=(RemoteInterface)Naming.lookup("//localhost/RMITest");

String msg=gserver.start();

System.out.println("服务器返回信息:"+msg);}

catch (Exception e1) {System.out.println(e1);}

}

public static void main (String[] args){

RemoteClientTest app=new RemoteClientTest();

app.display();}

}

客户端端关键语句

gserver=(RemoteInterface)Naming.lookup("//localhost/RMITest");

//查找远程对象

第五步、用RmiRegistry找到远程对象

这是一个使用工具,维护文本名和远程对象之间的映射,可以进行远程访问。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有