java远程调用接口的原理和范例,谢谢

如题所述

Java 远程处理
   Java远程方法调用(RMI)提供了Java程序语言的远程通讯功能,这种特性使客户机上运行的程序可以调用远程服务器上的对象,使Java编程人员能够在网络环境中分布操作。
   创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作,
  
   一、定义远程接口:
   在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。
   远程接口具有如下特点:
   1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
   2) 远程接口必须扩展接口java.rmi.Remote。
   3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
   4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。

下面是远程接口的定义

[java] view plaincopy
package test;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.math.BigInteger;

public interface Fib extends Remote {
public int getFib(int n) throws RemoteException;
// public BigInteger getFib(BigInteger n) throws RemoteException;
}

二、实现远程接口:
   远程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出 java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。
   以下是远程对象实现类的声明:

[java] view plaincopy
package test;
import java.math.BigInteger;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class FibImp extends UnicastRemoteObject implements Fib {
public FibImp() throws RemoteException {
super();
}

public int getFib(int n) throws RemoteException {
return n+2;
}

}

三、编写服务器类:
   包含 main 方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer 来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry 方法从指定端口号启动注册服务程序,也可以通过执行 rmiregistry 命令启动注册服务程序,注册服务程序的缺省运行端口为 1099。必须将远程对象名字绑定到对远程对象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
   以下是服务器类的声明:

[java] view plaincopy
package test;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class FibonacciServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(8804);
FibImp f = new FibImp();

// 注册到 registry 中
Naming.rebind("//localhost:8804/SAMPLE-SERVER", f);
System.out.println("fib server ready");

} catch (RemoteException re) {
System.out.println("Exception in FibonacciImpl.main: " + re);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException " + e);
}
}
}

四、编写使用远程服务的客户机类:
   客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序 stub 程序实例,二是调用服务器远程对象上的远程方法。
   以下是客户端类的声明:

[java] view plaincopy
package testClient;

import test.Fib;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class FibClient {
/**
* @param args
*/
public static void main(String[] args) {
String url = "//localhost:8804/SAMPLE-SERVER";
try {

Fib calc = (Fib) Naming.lookup(url);
for (int i = 0; i < 10; ++i) {
int f = calc.getFib(i);
System.out.println(f);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
温馨提示:内容为网友见解,仅供参考

java 中的一个项目如何做到访问另一个项目的一个方法 或者 页面_百度知...
1.将一个项目打成jar包,第二个项目进行导入该jar包,就可以使用第一个项目里的类方法属性等 2.将第一个项目发布出去,然后第二个项目调用,所谓发布出去就是开发远程接口,允许其他人调用,比如创建webservice,将第一个项目接口发布出去,这样第二个项目可以远程调用,当然你能问目前这个问题,webserv...

我需要用java写一个接口,把接口提供给别人,让别人传数据给我,希望用到...
其实就是一个普通的Java方法,只是调用的地址给开放出来了。例如:地址:localhost\/Test\/client\/getList?name=123 别人可以通过这个地址调用这个方法把值给你 localhot可以是本机IP地址,那么局域网内可以通过这个IP地址访问这个方法。把项目放在外网服务器上,那么localhost就换成了外网的地址了。client是...

java 什么情况要用到接口,最好给出分析和实际列子
1.定制服务模式:设置精粒度接口,每个接口代表相关一组服务,通过继承来创建复合接口。2.适配器模式:每当系统之间不匹配的时候,用适配器来转换借口。3.默认适配器模式:为借口提供简单的默认实现 4.代理模式:为接口的实现创建代理类,使用者通过代理类获得实现类的服务 5.标识类型模式:用接口来表示一...

java接口和实例化的问题。
接口是更加抽象的抽象类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体。接口体现了程序设计的高内聚低耦合和多态的设计思想。另外,Java中继承都是单继承的,对子类的功能扩展有一定的影响,接口可以看做是对继承的一种补充。实现接口,可在不打破继承关系的前提先,对某个类功能扩展,非...

远程控制的原理是怎样的??
远程控制的原理:主控端电脑只是将键盘和鼠标的指令传送给远程电脑,同时将被控端电脑的屏幕画面通过通信线路回传过来。也就是说,控制被控端电脑进行操作似乎是在眼前的电脑上进行的,实质是在远程的电脑中实现的,不论打开文件,还是上网浏览、下载等都是存储在远程的被控端电脑中的。技术软件 技术发展...

JAVA 里面如何 使用jni 给个例子 加 解释。谢谢
一、JAVA中所需要做的工作 在JAVA程序中,首先需要在类中声明所调用的库名称,如下:static { System.loadLibrary(“goodluck”);} 在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下...

java中的接口和异常各是什么意思?各举个简单例子(代码),谢谢
接口只是一个对接协议,具体的内容你可以自己添充,就像主板上的pci插口,只要满足这个协你怎么弄都可以,异常就是程序运行中出现的错误,如向数据库插入记录时主键重复了就可以用try捕获

一个javaweb项目不需要用到数据库,整个项目的数据都是调用接口来获取数...
你好 很高兴为你解答 我也是做Java的,我们就是在后台做解析,不然有些用户禁用掉JS的话,那么数据岂不是也没了。我给个例子给你看,你就明白了。第一步:创建URL 第二步:JSON接收URL返回的参 如果我说的不好,导致楼主模糊不清,请楼主追问。

A项目写了一个接口,B项目如何调用该接口?求比较详细的解答啊~
如果是在两个不同的项目之间, 那么可以通过webService调用接口使用,具体你可以查下,可能不是一句两句就可以说清楚的 具体的也就是服务端提供WSDL,然后你客户端去调用

java如何使用http方式调用第三方接口?最好有代码~谢谢
String responseMsg = "调用接口失败,返回错误信息:" + con.getResponseMessage() + "(" + responseCode + ")";System.out.println(responseMsg);throw new Exception(responseMsg);} } catch (IOException e2) { log.error(e2.getMessage(), e2);throw new Exception("接口连接超时!,请检查...

相似回答