`

Java入门-简单的RMI示例

    博客分类:
  • Java
 
阅读更多

RMI是一种分布式技术,使用RMI可以让一个虚拟机上的应用程序请求调用位于网络上另一处JVM上的对象方法。这是的以分布式方式部署应用成为了可能。

RMI的两个核心所在分别为Skeleton和Stub:

  • Skeleton只在位于服务器端的程序,负责接受客户端发来的请求数据,并交由服务器端业务处理程序处理,最后将处理结果返回给客户端。
  •  Stub则负责在客户端向服务器端发送相关数据。

开发RMI应用程序需要以下几步:

  • 定义远程接口:继承自java.rmi.Remote定义应用接口:IAppInterface
  • 实现服务端对象:需继承自java.rmi.UnicastRemoteObject,同时要实现已定义的接口IAppINterface中的方法
  • 启动RMI注册服务
  • 执行start rmiregistry启动RMI注册服务
  • 启动服务端程序,注册到RMI注册表中
  • 开发并执行客户端程序

在程序中执行java.rmi.registry.LocateRegistry的createRegistry(int port)方法完成RMI注册服务的启动。

java.rmi.registry.Registry接口提供了几个方法来实现对RMI注册表的访问(类似于操作JNDI命名空间的javax.naming.Context接口)

  • void bind(String name, java.rmi.Remote obj):将obj对象绑定在RMI注册表中,键值为name
  • void rebind(String name, java.rmi.Remote obj):重写键值为name的RMI注册表绑定关系,把obj绑定在RMI注册表中,键值为name
  • java.rmi.Remote lookup(String name):在RMI注册表中根据键值name查找对象并返回
  • void unbind(String name):解除键值为name的对象的RMI绑定关系

示例:
1、定义远程接口

package org.eone.test.rmi;
 
import java.rmi.Remote;
import java.rmi.RemoteException;
 
public interface IWeather extends Remote{
    public String getWeather(String city) throws RemoteException;
}

 2、实现远程服务

package org.eone.test.rmi;
 
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
 
public class WeatherImpl extends UnicastRemoteObject implements IWeather{
    public WeatherImpl() throws RemoteException{
    }
    public String getWeather(String city){
        return city + " : is Sunny...";
    }
 
    public static void main(String[] args){
        try{
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.bind("/weather", new WeatherImpl());
            System.out.println("服务对象已绑定至注册表...");
        }catch(Exception e){
            System.out.println("绑定服务对象到注册表失败...");
        }
    }
}

 3、开发并运行客户端程序

package org.eone.test.rmi;
 
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
 
public class WeatherClient{
    public static void main(String[] args){
        try{
            Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
            IWeather stub = (IWeather)registry.lookup("/weather");
            String result = stub.getWeather("SHANGHAI");
            System.out.println(result);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
 
分享到:
评论

相关推荐

    java Spring+RMI入门程序源代码

    本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个技术及其整合的详细知识点: **Spring 框架** 1. **Spring 概述**:Spring 是一个开源的 Java 应用开发...

    java rmi shi

    - **实践操作**:通过动手编写和运行RMI示例代码,可以更深入地理解RMI的工作机制,增强解决实际问题的能力。 通过以上分析,我们不仅了解了RMI的基本原理,还掌握了其实现的具体步骤。对于初学者来说,这是一个很...

    Spring Security3技术手册

    - **示例代码**: 创建一个简单的Web应用程序并集成Spring Security。 - **1.4 运行示例** - 如何运行配置好的Spring Security项目,确保安全功能正常工作。 - **示例代码**: 启动应用服务器,测试登录功能。 **...

    RMI入门好例子

    这个简单的RMI示例可以帮助我们理解以下关键概念: - 远程接口:定义了客户端和服务器之间的通信协议。 - 远程对象:实现了远程接口,实际处理远程调用。 - RMI注册表:作为远程对象的服务目录,客户端通过它找到...

    word源码java-fleet-spring-boot:SpringBoot教程,SpringBoot的各种简单示例,快速入门使用Sprin

    的各种简单示例,快速入门使用 Spring Boot 各种组件 示例项目 基础部分: :Spring Boot 快速入门 Hello world 示例 :Spring Boot 自定义 Banner (启动图案) :Spring Boot 主题切换 :Spring Boot 简单的服务...

    rmi入门

    综上所述,学习RMI入门需要理解其核心概念,掌握创建远程接口和实现类的方法,了解RMI的工作流程,熟悉序列化过程,以及能够编写简单的RMI服务端和客户端程序。同时,通过阅读相关的源码和使用相关的工具,可以...

    java 网络编程 代码集合

    07-RMI-HelloWorld则是一个简单的RMI入门示例,帮助初学者理解RMI的工作原理。 3. **SMTP(Simple Mail Transfer Protocol)**:12-SMTP-Example是使用JavaMail API发送邮件的示例。SMTP协议定义了电子邮件的传输...

    JSP快速入门教程---全十讲.doc

    Java EE提供了一系列组件和服务,包括Web层组件(如JSP和Servlet)、业务层组件(如Enterprise JavaBeans, EJB)以及诸如JNDI(Java Naming and Directory Interface)、JDBC(Java Database Connectivity)、RMI...

    JAVA基础入门教程

    - **Hello World示例**:通过编写简单的“Hello World”程序来熟悉Java的基本语法和运行环境。 - **面向对象编程(OOP)**:Java是一种完全支持OOP特性的语言,理解类、对象、继承、封装、多态等概念对于学习Java至关...

    java的入门教程

    Java的入门教程对于初学者来说是一个非常有用的资源,它从基本的数据类型开始讲解,涵盖了类的继承、重载、复写以及Java的常用类库,还包括了多线程的介绍、同步异步机制和异常捕获等重要知识点,此外还提供了网络...

    SSD8 Java RMI and HTTP

    - **Java RMI 入门.doc**:适合初学者的RMI教程,可能包括基本概念、示例和实践指导。 - **Key Differences between HTTP1.0 and HTTP1.1.mht**:这个文件详细列出了HTTP1.0和HTTP1.1之间的关键差异。 - **Getting...

    Java_Web快速入门——全十讲

    - **其他服务**:如 JNDI (Java Naming and Directory Interface),JDBC (Java Database Connectivity),RMI (Remote Method Invocation),JTA (Java Transaction API),JavaMail 等。 ##### 3. Java EE 标准与框架...

    rmi入门学习,实用的小例子

    通过以上步骤,我们成功地实现了一个简单的基于RMI的文件下载系统。整个过程中,远程接口的定义、远程对象的实现以及客户端和服务端的交互都是RMI技术的核心部分。掌握了这些基本原理和技术细节,就可以进一步开发更...

    java 编程入门思考

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

    rmi原理与入门demo.zip

    通过这个入门示例,你可以学习如何设置RMI环境,创建并实现远程接口,创建远程对象,使用RMI注册表进行对象注册,以及在客户端进行远程方法调用。这将帮助你理解RMI的工作原理,并为将来开发分布式应用打下基础。在...

    dubbo入门示例,普通Java进程,不使用spring boot cloud

    【标题】"dubbo入门示例,普通Java进程,不使用spring boot cloud" 【描述】这篇博客文章提供了关于如何在不使用Spring Boot Cloud的情况下,基于Java简单进程搭建Dubbo入门应用的详细步骤。Dubbo是一个高性能、轻...

    Fundamental Networking in Java

    本书《基础网络编程在Java》是一本非常实用的教程,不仅适合初学者入门学习,也适合有一定基础的开发人员进一步提升自己的技能。通过阅读本书,读者可以系统地掌握Java网络编程的基本概念和技术细节,为后续的项目...

    JAVA程序开发技术

    - **示例**:简单的“Hello World”Servlet。 **5.4.3 Servlet案例** - **示例**:用户注册页面。 **5.5 HTML中的FORM元素** **5.5.1 , ** - **定义**:用于收集用户输入。 **5.5.2 , ** - **定义**:用于下拉...

    java通信入门学习

    【Java通信入门学习】 在Java编程中,通信是软件系统中的关键部分,它涉及不同程序、进程或系统之间的数据交换。本教程将带你逐步了解Java通信的基础知识,适合初学者入门。通过4天的学习,你将掌握如何在Java中...

Global site tag (gtag.js) - Google Analytics