iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >在Java中实现远程方法调用(转)
  • 205
分享到

在Java中实现远程方法调用(转)

2023-06-03 05:06:51 205人浏览 独家记忆
摘要

在Java中实现远程方法调用(转)[@more@]一、Java中的远程方法调用 远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的

在Java中实现远程方法调用(转)[@more@]一、Java中的远程方法调用

远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的通信。相比CORBA,RMI功能较弱且只能用于Java系统。

二、实现一个简单的RMI

要使用RMI,必须构造四个主要的类:远程对象的本地接口、RMI客户、远程对象实现和RMI服务器。RMI服务器生成远程对象实现的一个实例,并用一个特殊的URL注册它,RMI客户在远程服务器上查找对象,若找到就把它转换成本地接口类型,然后像一个本地对象一样使用它。下面是一个简单的RMI例子,远程对象只返回一个消息字符串。要使这个例子更有价值,我们需要做的就是完善远程对象实现类。

1.远程对象的本地接口类(Rem.java)

该类仅仅是一个接口,而不是实现,RMI客户机可以直接使用它,RMI服务器必须通过一个远程对象来实现它,并用某个URL注册它的一个实例。

import java.rmi.*;
public interface Rem extends Remote { public String getMessage() throws RemoteException;}


本地接口(Rem)必须是公共的,否则客户机在加载一个实现该接口的远程对象时就会出错。此外,它还必须从java.rmi.Remote继承而来,接口中的每一个方法都必须抛出远程异常java.rmi.RemoteException。

2.RMI客户类(RemClient.java)

RMI客户使用Naming.lookup在指定的远程主机上查找对象,若找到就把它转换成本地接口Rem类型,然后像一个本地对象一样使用它。与CORBA不同之处在于RMI客户必须知道提供远程服务主机的URL,这个URL可以通过rmi://host/path或rmi://host:port/path来指定,如果省略端口号,就使用1099。Naming.lookup可能产生三个异常:RemoteException、NotBoundException、MalfORMedURLException,三个寻常都需要捕获。RemoteException、Naming和NotBoundException在java.rmi.*中定义,MalformedURLException在java.net.*中定义。另外,客户机将向远程对象传递串行化对象Serializable,所以还应在程序中输入java.io.*。

import java.rmi.*;
import java.net.*;
import java.io.*;
public class RemClient {
public static void main(String[] args) {
try {
String host = (args.length > 0) ? args[0] : "localhost"; //从命令行读取远程主机名
//通过URL在远程主机上查找对象,并把它转化为本地接口Rem类型
Rem remObject=(Rem)Naming.lookup("rmi://" + host + "/Rem");
System.out.println(remObject.getMessage()); //调用远程对象的方法
} catch(RemoteException re) {System.out.println("RemoteException: " + re);
} catch(NotBoundException nbe) {System.out.println("NotBoundException: " + nbe);
} catch(MalformedURLException mfe){System.out.println("MalformedURLException:"+ mfe);
}}}
3.远程对象实现类(RemImpl.java)
这个类真正实现RMI客户调用的远程对象,它必须从UnicastRemoteObject继承,其构造函数应抛出RemoteException异常。
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class RemImpl extends UnicastRemoteObject implements Rem {
public RemImpl() throws RemoteException {} //构造函数抛出RemoteException异常
public String getMessage() throws RemoteException {
return("Here is a remote message."); }} //向RMI客户返回一个消息串 4.RMI服务器类(RemServer.java)该类创建远程对象实现RemImpl的一个实例,然后用一个特定的URL来注册它,所谓注册就是通过Naming.bind或Naming.rebind来将RemImpl实例绑定到URL上。 import java.rmi.*; import java.net.*; public class RemServer { public static void main(String[] args) { try { RemImpl localObject = new RemImpl(); //生成远程对象实现的一个实例 Naming.rebind("rmi:///Rem", localObject); //将远程对象实例绑定到rmi:///Rem上 }catch(RemoteException re){System.out.println("RemoteException:"+re); }catch(MalformedURLException mfe) {System.out.println("MalformedURLException: "+mfe); }}}

三、编译和运行

编译RMI客户和服务器,这将自动编译远程对象的本地接口和远程对象实现
javac RemClient.java //自动编译远程对象的本地接口Rem.java
javac RemServer.java //自动编译远程对象实现RemImpl.java
生成客户承接模块和服务器框架
rmic RemImpl
这将构造RemImpl_Stub.class和RemImpl_Skeleton.class。请将Rem.class、RemClient.class和RemImpl_Stub.class拷贝到RMI客户机,将Rem.class、RemImpl.class 、RemServer.class和RemImpl_Skeleton.class拷贝到RMI服务器。
启动RMI注册
rmireGIStry
//在服务器上执行。不论有多少个远程对象,本操作只需做一次
运行java RemServer.class
//启动RMI服务器(在服务器上执行)
java RemClient.class
//启动RMI客户,将输出“Here is a remote message.”

--结束END--

本文标题: 在Java中实现远程方法调用(转)

本文链接: https://www.lsjlt.com/news/232832.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在Java中实现远程方法调用(转)
    在Java中实现远程方法调用(转)[@more@]一、Java中的远程方法调用 远程方法调用(Remote Method Invocation, RMI)是Java1.1引入的分布式对象软件包,它的出现简化了在多台机器上的Java应用之间的...
    99+
    2023-06-03
  • 在SpringBoot中,如何使用Netty实现远程调用方法总结
    Netty Netty是一个NIO客户端服务器框架: 它可快速轻松地开发网络应用程序,例如协议服务器和客户端。 它极大地简化和简化了网络编程,例如TCP和UDP套接...
    99+
    2024-04-02
  • java编程中实现调用js方法分析
    本文实例讲述了java编程中实现调用js方法。分享给大家供大家参考,具体如下:public void test2(){ ScriptEngineManager manager = new ScriptEngineManager();...
    99+
    2023-05-31
    java js方法 ava
  • 如何在PHP中实现RPC远程调用?
    随着互联网的快速发展和云计算技术的广泛应用,分布式系统和微服务架构变得越来越普遍。在这样的背景下,远程过程调用(RPC)成为了一种常见的技术手段。RPC能够使得不同的服务在网络上实现远程调用,从而实现不同服务之间的互联操作,提高代码的复用性...
    99+
    2023-05-14
    PHP rpc 远程调用
  • 怎么在Java中调用方法
    这期内容当中小编将会给大家带来有关怎么在Java中调用方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、方法调用方法调用的唯一目的:确定要调用哪一个方法方法调用分为解析调用和分派调用二、非虚方法与虚方...
    99+
    2023-06-15
  • Java如何实现方法调用
    这篇文章给大家分享的是有关Java如何实现方法调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  Java的方法调用方法(method)的定义:  1 在java中程序员可以把在一个程序中多...
    99+
    2023-06-03
  • 如何在Java中调用jython方法
    如何在Java中调用jython方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1 什么是jython? 他其实是一门语言,并非是Java 或者Python的解释器.用它...
    99+
    2023-05-31
    jython java ava
  • 在Java中如何实现回调过程
    这篇文章主要介绍了在Java中如何实现回调过程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在Java中实现回调过程XML:namespace prefix = o ns =...
    99+
    2023-06-03
  • 使用Netty实现类似Dubbo的远程接口调用的实现方法
    目录一、Netty简介二、完整代码实现1、创建接口和实现类2、客户端代码实现及动态代理和异步转同步3、服务端代码实现4、自定义编码解码器5、编写测试客户端发送请求代码一、Netty简...
    99+
    2023-05-17
    Netty Dubbo远程接口调用 Netty Dubbo远程调用
  • Java调用C++程序的实现方式
    目录Java调用C++程序1、编写Java程序:HelloWorld2、Windows环境下,在cmd中编译以上程序3、编写C++程序4、完成以上步骤后5、重新编译HelloWorl...
    99+
    2024-04-02
  • Vue中在data里面调用method方法的实现
    目录今天我用到了Element的一个组件其组件的代码如下页面渲染的效果如下如果想要在表格里面添加按钮事件的话今天我用到了Element的一个组件 如下: 其组件的代码如下 // t...
    99+
    2024-04-02
  • PHP中调用JS方法的实现方法
    PHP是一种广泛应用于网站开发的服务器端脚本语言,而JS(JavaScript)则是一种用于网页交互的客户端脚本语言。在开发网站时,我们有时需要在PHP代码中调用JS方法来实现一些特定...
    99+
    2024-03-04
    php调用js php js互动 php前端交互
  • java调用远程服务器的shell脚本以及停止的方法实现
    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个...
    99+
    2024-04-02
  • java中方法的调用
    1.静态方法调用静态方法: 用静态方法时通过(类名.方法名)的方法进行调用,当调用方法和被调用的方法在同一类中时,类名可省略,直接通过方法名进行调用; 同时也可以通过对象进行调用,但较为繁琐,一般不使...
    99+
    2023-09-22
    java
  • Java 远程调用失败重试的操作方法
    目录常规做法注解重试@Retryable 详解总结在日常开发的过程中我们经常会需要调用第三方组件或者数据库,有的时候可能会因为网络抖动或者下游服务抖动,导致我们某次查询失败。 这种时...
    99+
    2024-04-02
  • 在PHP中如何实现方法在其他文件中的调用?
    在PHP中如何实现方法在其他文件中的调用 对于PHP开发者来说,有时候我们会需要在一个文件中编写某些方法,然后在其他文件中调用这些方法。这种情况下,我们可以使用PHP的命名空间(nam...
    99+
    2024-03-05
    php 函数调用 文件路径定位
  • 如何在java中使用反射调用方法
    这篇文章将为大家详细讲解有关如何在java中使用反射调用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的...
    99+
    2023-06-14
  • 怎么在java中使用反射调用方法
    这篇文章将为大家详细讲解有关怎么在java中使用反射调用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发...
    99+
    2023-06-14
  • java异步调用的4种实现方法
    目录一.利用多线程直接new线程使用线程池二.采用Spring 的异步方法去执行(无返回值)@Async注解可以用在方法上,也可以用在类上,用在类上,对类里面所有方法起作用三.采用S...
    99+
    2024-04-02
  • SpringCloudFeign远程调用实现详解
    目录1. Feign远程调用1.1.Feign替代RestTemplate1.2.自定义配置1.2.1.配置文件方式1.2.2.Java代码方式2.Feign使用优化3. 最佳实践3...
    99+
    2022-11-13
    SpringCloud Feign SpringCloud Feign远程调用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作