日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java RMI詳細介紹及實例講解

瀏覽:17日期:2022-08-28 14:16:29

java本身提供了一種RPC框架——RMI(即RemoteMethodInvoke遠程方法調用),在編寫一個接口需要作為遠程調用時,都需要繼承了Remote,Remote接口用于標識其方法可以從非本地虛擬機上調用的接口,只有在“遠程接口”(擴展java.rmi.Remote的接口)中指定的這些方法才可遠程使用,下面通過一個簡單的示例,來講解RMI原理以及開發流程:

為了真正實現遠程調用,首先創建服務端工程rmi-server,結構如下:

java RMI詳細介紹及實例講解 

代碼說明:

1.User.java:用于遠程調用時pojo對象的傳輸,該對象必須實現Serializable接口,否則在調用過程中,會拋出NotSerializableException異常,代碼如下:

/** * 用戶信息,用于遠程調用傳輸,必須實現Serializable接口 * * @author andy * */public class User implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return 'name : ' + this.name + ', age : ' + this.age; }}

2.Hello.java:遠程接口,該接口需要繼承Remote接口,并且接口中的方法全都要拋出RemoteException異常,代碼如下:

import java.rmi.Remote;import java.rmi.RemoteException;import pers.andy.rmi.bean.User;/** * 定義一個遠程接口,必須繼承Remote接口,其中需要遠程調用的方法必須拋出RemoteException異常 * * @author andy * */public interface IHello extends Remote { /** * 更新user信息 * @param user * @return * @throws RemoteException */ public User updateUser(User user) throws RemoteException;}

3.HelloImpl:遠程接口實現類,必須繼承UnicastRemoteObject(繼承RemoteServer->繼承RemoteObject->實現Remote,Serializable),只有繼承UnicastRemoteObject類,才表明其可以作為遠程對象,被注冊到注冊表中供客戶端遠程調用(補充:客戶端lookup找到的對象,只是該遠程對象的Stub(存根對象),而服務端的對象有一個對應的骨架Skeleton(用于接收客戶端stub的請求,以及調用真實的對象)對應,Stub是遠程對象的客戶端代理,Skeleton是遠程對象的服務端代理,他們之間協作完成客戶端與服務器之間的方法調用時的通信。),代碼如下:

/** * 遠程的接口的實現,繼承了UnicastRemoteObject,表明該類作為一個遠程對象 * * @author andy * */public class HelloImpl extends UnicastRemoteObject implements IHello { /** * */ private static final long serialVersionUID = 1L; /** * 因為UnicastRemoteObject的構造方法拋出了RemoteException異常,因此這里默認的構造方法必須寫,必須聲明拋出RemoteException異常 * * @throws RemoteException */ public HelloImpl() throws RemoteException { } public User updateUser(User user) throws RemoteException { System.out.println('-------------- 客戶端發送的user為' + user.toString()); user.setName('andy2'); user.setAge(30); return user; }}

4.HelloServer:服務端啟動類,用于創建遠程對象注冊表以及注冊遠程對象,代碼如下:

/** * 服務端啟動類 * * @author andy * */public class HelloServer { public static void main(String args[]) { try { // 本地主機上的遠程對象注冊表Registry的實例,并指定端口為8888,這一步必不可少(Java默認端口是1099) LocateRegistry.createRegistry(8888); // 把遠程對象注冊到RMI注冊服務器上,并命名為RHello // 綁定的URL標準格式為:rmi://host:port/name(其中協議名可以省略,下面兩種寫法都是正確的) Naming.bind('rmi://localhost:8888/RHello', rhello); // Naming.bind('//localhost:8888/RHello',rhello); System.out.println('------------遠程對象IHello注冊成功,等待客戶端調用...'); } catch (RemoteException e) { System.out.println('創建遠程對象發生異常!'); e.printStackTrace(); } catch (AlreadyBoundException e) { System.out.println('發生重復綁定對象異常!'); e.printStackTrace(); } catch (MalformedURLException e) { System.out.println('發生URL畸形異常!'); e.printStackTrace(); } }}

補充說明:為何HelloImpl繼承了UnicastRemoteObject就可以被作為遠程對象發布,查閱UnicastRemoteObject的源碼可以發現:

protected UnicastRemoteObject() throws RemoteException { this(0); } protected UnicastRemoteObject(int port) throws RemoteException { this.port = port; exportObject((Remote) this, port); }

其實在啟動server端的時候,new了HelloImpl對象,因為繼承了UnicastRemoteObject,會先調用父類的構造方法,這時候,就會將this(當前對象)通過exportObject方法注冊。

所以,如果在被導出的對象需要繼承其它的類,那么就可以不采用集成UnicastRemoteObject的方式,而是通過exportObject方法將其導出為遠程對象:

...// 創建一個遠程對象IHello rhello = new HelloImpl();//HelloImpl不需要繼承UnicastRemoteObject類,通過exportObject將其顯示導出UnicastRemoteObject.exportObject(rhello,0);...

以上即是服務端所有代碼,接下來是創建客戶端工程,結構如下:

java RMI詳細介紹及實例講解

實際應用開發中,客戶端的User.java和IHello.java應該是從服務端導出jar包的形式添加到依賴庫里,因此這邊只介紹HelloClient.java,該類為客戶端啟動類,用于在注冊表中查找遠程對象實現遠程方法調用,代碼如下:

/** * 客戶端啟動類 * * @author andy * */public class HelloClient { public static void main(String args[]) { try { // 在RMI服務注冊表中查找名稱為RHello的對象,并調用其上的方法 IHello rhello = (IHello) Naming.lookup('rmi://localhost:8888/RHello'); // 構造user對象,測試遠程對象傳輸 User user = new User(); user.setAge(20); user.setName('andy'); System.out.println('-------------- 服務端返回的的user為' + rhello.updateUser(user).toString()); } catch (NotBoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } }}

到此為止,客戶端和服務端的工程都搭建完畢,現在可以進行測試,執行次序和測試結果如下所示:

1.首先運行服務端啟動類HelloServer,結果如下:

服務端:------------遠程對象IHello注冊成功,等待客戶端調用...

2.運行客戶端啟動類,結果如下:

服務端:-------------- 客戶端發送的user為name : andy, age : 20 客戶端:-------------- 服務端返回的的user為name : andy2, age : 30

 到此這篇關于java RMI詳細介紹及實例講解的文章就介紹到這了,更多相關java RMI 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網! 

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲人成亚洲精品| 日韩欧美看国产| 鲁大师成人一区二区三区| 欧美日韩国产传媒| 日韩视频不卡| 亚洲视频www| 免费在线看一区| 日本伊人久久| 国产精品美女在线观看直播| 日韩一区二区三区免费视频| 91精品丝袜国产高跟在线| 国产精品一区二区精品| 久久99蜜桃| av高清不卡| 激情五月综合| 免费在线看一区| 91精品国产自产观看在线| 国产精品www.| 欧美三级精品| 亚洲精品免费观看| 国产不卡一区| 日韩午夜高潮| 久久婷婷一区| 免费成人在线观看| 91久久久精品国产| 久久精品国产成人一区二区三区| 精品91福利视频| 国产激情久久| 欧美另类综合| 视频国产精品| 偷拍亚洲精品| 久久在线91| 国产精品精品| 福利欧美精品在线| 国产一区91| 精品国产一区二| 影院欧美亚洲| 国产一区二区三区四区二区| 国产精品99一区二区| 日韩午夜电影| 国产精品巨作av| 亚洲专区欧美专区| 成人亚洲一区| 日韩三区四区| 久久久久亚洲| 鲁大师影院一区二区三区| 成人一区而且| 蜜乳av另类精品一区二区| 国产+成+人+亚洲欧洲在线| 免费精品国产的网站免费观看| 欧美激情视频一区二区三区免费| 国产欧美亚洲一区| 亚洲精品午夜av福利久久蜜桃| 在线日韩欧美| 亚洲欧美视频| 亚洲一区二区三区中文字幕在线观看| 久久精品官网| 中文字幕日韩高清在线| 亚洲天堂久久| 亚洲天堂久久| 麻豆网站免费在线观看| 久久精品福利| 一区二区视频欧美| 午夜久久黄色| 日本亚洲不卡| 欧美日韩一区二区三区视频播放| 午夜亚洲一区| 久久久久久久久成人| 国产麻豆一区| 香蕉成人av| 欧美日韩一区二区国产| 国产精品主播在线观看| 国产欧美日韩一区二区三区四区| 日韩精品免费视频人成| 久久超碰99| 国产欧美高清视频在线| 国产精品久久久亚洲一区| 精品中文在线| 欧美美女一区| 青青草国产成人99久久| 亚洲国产欧美日本视频| 丝袜美腿亚洲一区二区图片| 模特精品在线| 国产亚洲在线观看| 欧美亚洲免费| 99tv成人| 精品美女在线视频| 中文字幕av亚洲精品一部二部| 免费在线欧美黄色| 亚洲人成网77777色在线播放| 免费精品国产| 欧美日韩一区二区三区视频播放| 欧美三级第一页| 日韩成人a**站| 欧美伊人久久| 亚久久调教视频| 性色一区二区| 欧美日韩黑人| av资源中文在线天堂| 日韩1区2区3区| 国产亚洲毛片| 激情视频一区二区三区| 日韩大片在线| 精品欧美日韩精品| 国产毛片精品| 久久精品97| 偷拍亚洲精品| 亚洲色图网站| 中文字幕av一区二区三区人| 蜜桃伊人久久| 三级欧美在线一区| 国产一区二区精品| 亚洲综合国产| 久久午夜影视| 亚洲欧美久久久| 亚洲精品一区二区妖精| 亚洲国产成人精品女人| 欧美不卡视频| 亚洲国产专区校园欧美| 日韩欧美一区二区三区在线观看| 在线中文字幕播放| 日韩免费av| 秋霞影院一区二区三区| 日韩精品中文字幕第1页| 在线一区av| 欧美91精品| 香蕉久久夜色精品国产| 蜜桃91丨九色丨蝌蚪91桃色| 日本一区二区三区视频在线看| 亚洲精品一二三**| 日韩国产欧美在线视频| 欧美日韩夜夜| 老司机免费视频一区二区三区| 国际精品欧美精品| 欧美日韩免费看片| 欧美日韩在线观看视频小说| aⅴ色国产欧美| 中文字幕av亚洲精品一部二部| 色狠狠一区二区三区| 久久国产视频网| 精品国产一区二区三区性色av| 成人午夜网址| 欧美精品资源| 国产女优一区| 在线一区二区三区视频| 亚洲毛片在线免费| 国产精品免费大片| 老牛影视精品| 欧美成人亚洲| 热久久免费视频| 国产亚洲高清在线观看| 精品视频亚洲| 国产精品91一区二区三区| 蜜臀国产一区二区三区在线播放| 91在线成人| av中文字幕在线观看第一页| 久久久夜精品| 亚洲影视一区| 久久a爱视频| 欧美日韩视频网站| 亚洲自拍另类| 国产极品一区| 欧美午夜精品一区二区三区电影| 久久成人亚洲| 国产精品tv| 欧美日韩国产传媒| 国产精品一级| 亚洲成人一区| 国产精品一区二区精品| 中文字幕系列一区| 亚洲影视一区二区三区| 精品三级在线| 亚洲欧美久久| 精品久久久网| 国产精品腿扒开做爽爽爽挤奶网站| 青青草伊人久久| 日韩成人亚洲| 91精品丝袜国产高跟在线| 香蕉成人av| 欧美一区不卡| 久久国产日本精品| 日韩av不卡一区二区| 日韩在线短视频| 日韩欧美中文字幕一区二区三区 | 麻豆精品国产91久久久久久| 久久亚洲在线| 国产精品一区二区三区四区在线观看| 欧美日韩国产v| 日本一不卡视频| 私拍精品福利视频在线一区| 欧美综合社区国产| 欧美 日韩 国产精品免费观看| 国产乱码精品一区二区三区四区 | 亚洲v在线看| 911精品国产| 欧美91精品| 精品视频99| 中文字幕亚洲在线观看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧美亚洲日本精品|