Java 实现RMI入门程序
2016-04-20 10:56
447 查看
因为是Java内置的功能,所以不需要引入任何额外的Jar包
首先我们定义一个接口,这个接口必须继承Remote
接下来就是实现这个接口,注意,这个必须继承UnicastRemoteObject这个类
接下来就是发布接口了
最后,我们可以看到
就说明我们的接口发布成功了,也可以使用终端内置工具netstat查看端口占用情况,发现存在8889端口,表示我们的端口发布成功
接下来就是测试我们的端口
新建另外的一个工程,从服务端赋值过来远程接口IHelloRemote,并且保持包路径不变
下面是测试结果
到这里JavaRMI的HelloWorld程序已经完成。
首先我们定义一个接口,这个接口必须继承Remote
package cn.blueboz.rmi; import java.rmi.Remote; import java.rmi.RemoteException; /** * Created by Administrator on 2016/4/20. * 定义一个远程接口,这个远程接口务必实现Remote接口 */ public interface IHelloRMI extends Remote { /** * 一个最简单的Hello实例 */ public String sayHelloToClient()throws RemoteException; }
接下来就是实现这个接口,注意,这个必须继承UnicastRemoteObject这个类
package cn.blueboz.rmi.impl; import cn.blueboz.rmi.IHelloRMI; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; /** * Created by Administrator on 2016/4/20. */ public class HelloRMIImpl extends UnicastRemoteObject implements IHelloRMI{ /*i * 这里必须是构造器抛出RemoteException * 因为继承父类UnicastRemoteObject构造器中抛出RemoteException * 同时这个类是必须继承UnicastRemoteObject这个类 */ public HelloRMIImpl()throws RemoteException{ } @Override public String sayHelloToClient()throws RemoteException { return "你好客户端,我是服务端"; } }
接下来就是发布接口了
package cn.blueboz.rmi; import cn.blueboz.rmi.impl.HelloRMIImpl; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; /** * Created by Administrator on 2016/4/20. */ public class RMIServer { /** * 发布接口 * @param args */ public static void main(String[] args) throws RemoteException, AlreadyBoundException, MalformedURLException { /** * 创建一个远程接口的实现类 */ IHelloRMI helloRMI=new HelloRMIImpl(); /** * 创建一个RMI端口,如果没有创建,RMI服务也就无法绑定到这个接口上面 */ System.out.println("正在创建接口"); LocateRegistry.createRegistry(8889); System.out.println("创建端口成功"); /** * 在这里声明一下三个异常 * RemoteException:创建远程对象异常 * AlreadyBoundException:重复绑定异常 * MalformedURLException:指定的URI发生错误的异常 */ System.out.println("正在绑定"); Naming.bind("rmi://localhost:8889/HelloRMI",helloRMI); System.out.println("绑定成功!"); //注意,何以省略掉协议前缀,即使rmi: //Naming.bind("//localhost:8889/HelloRMI",helloRMI); } }
最后,我们可以看到
就说明我们的接口发布成功了,也可以使用终端内置工具netstat查看端口占用情况,发现存在8889端口,表示我们的端口发布成功
接下来就是测试我们的端口
新建另外的一个工程,从服务端赋值过来远程接口IHelloRemote,并且保持包路径不变
package cn.blueboz.rmiclient; import cn.blueboz.rmi.IHelloRMI; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; /** * Created by Administrator on 2016/4/20. * Java RMI客户端 */ public class RMIClient { public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException { /** * IHelloRMI接口从服务端拷贝过来即可 * 这里必须注意的是IHelloRMI的包路径必须与服务端一致 * 如果不一致,会发生ClassNotFoundException * Naming.lookup是在指定地址插在rmi服务 */ IHelloRMI helloRMI = (IHelloRMI) Naming.lookup("rmi://localhost:8889/HelloRMI"); String s = helloRMI.sayHelloToClient(); System.out.println(s); } }
下面是测试结果
到这里JavaRMI的HelloWorld程序已经完成。
相关文章推荐
- 文件上传C:\fakepath\解决方案
- SpringMVC的各种参数绑定方式
- java学习笔记之Spring依赖注入和控制反转
- java字符串翻转
- Java类初始化完整步骤
- Java多线程编程:
- java的final关键字——修饰变量
- 工作问题-java-ajax返回一对多关系数据显示
- 类和对象(java面向对象篇)
- Spring的CharacterEncodingFilter过滤字符编码
- jsp传list到spring mvc
- 导入maven项目遇到中文乱码
- Java多线程代码示例
- Java 基本数据类型转换
- 应用eclipse自带工具进行代码调用函数分析
- STS (Spring Tool Suite) 导入getting started guide提示SunCertPathBuilderException错误的解决
- Java迭代器的一般用法
- java file类
- Spring AOP切面基础 实现请求参数的验证
- Spring data jpa批量插入和更新