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

您的位置:首頁技術(shù)文章
文章詳情頁

java RMI詳細(xì)介紹及實(shí)例講解

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

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

為了真正實(shí)現(xiàn)遠(yuǎn)程調(diào)用,首先創(chuàng)建服務(wù)端工程rmi-server,結(jié)構(gòu)如下:

java RMI詳細(xì)介紹及實(shí)例講解 

代碼說明:

1.User.java:用于遠(yuǎn)程調(diào)用時(shí)pojo對(duì)象的傳輸,該對(duì)象必須實(shí)現(xiàn)Serializable接口,否則在調(diào)用過程中,會(huì)拋出NotSerializableException異常,代碼如下:

/** * 用戶信息,用于遠(yuǎn)程調(diào)用傳輸,必須實(shí)現(xiàn)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:遠(yuǎn)程接口,該接口需要繼承Remote接口,并且接口中的方法全都要拋出RemoteException異常,代碼如下:

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

3.HelloImpl:遠(yuǎn)程接口實(shí)現(xiàn)類,必須繼承UnicastRemoteObject(繼承RemoteServer->繼承RemoteObject->實(shí)現(xiàn)Remote,Serializable),只有繼承UnicastRemoteObject類,才表明其可以作為遠(yuǎn)程對(duì)象,被注冊(cè)到注冊(cè)表中供客戶端遠(yuǎn)程調(diào)用(補(bǔ)充:客戶端lookup找到的對(duì)象,只是該遠(yuǎn)程對(duì)象的Stub(存根對(duì)象),而服務(wù)端的對(duì)象有一個(gè)對(duì)應(yīng)的骨架Skeleton(用于接收客戶端stub的請(qǐng)求,以及調(diào)用真實(shí)的對(duì)象)對(duì)應(yīng),Stub是遠(yuǎn)程對(duì)象的客戶端代理,Skeleton是遠(yuǎn)程對(duì)象的服務(wù)端代理,他們之間協(xié)作完成客戶端與服務(wù)器之間的方法調(diào)用時(shí)的通信。),代碼如下:

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

4.HelloServer:服務(wù)端啟動(dòng)類,用于創(chuàng)建遠(yuǎn)程對(duì)象注冊(cè)表以及注冊(cè)遠(yuǎn)程對(duì)象,代碼如下:

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

補(bǔ)充說明:為何HelloImpl繼承了UnicastRemoteObject就可以被作為遠(yuǎn)程對(duì)象發(fā)布,查閱UnicastRemoteObject的源碼可以發(fā)現(xiàn):

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

其實(shí)在啟動(dòng)server端的時(shí)候,new了HelloImpl對(duì)象,因?yàn)槔^承了UnicastRemoteObject,會(huì)先調(diào)用父類的構(gòu)造方法,這時(shí)候,就會(huì)將this(當(dāng)前對(duì)象)通過exportObject方法注冊(cè)。

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

...// 創(chuàng)建一個(gè)遠(yuǎn)程對(duì)象IHello rhello = new HelloImpl();//HelloImpl不需要繼承UnicastRemoteObject類,通過exportObject將其顯示導(dǎo)出UnicastRemoteObject.exportObject(rhello,0);...

以上即是服務(wù)端所有代碼,接下來是創(chuàng)建客戶端工程,結(jié)構(gòu)如下:

java RMI詳細(xì)介紹及實(shí)例講解

實(shí)際應(yīng)用開發(fā)中,客戶端的User.java和IHello.java應(yīng)該是從服務(wù)端導(dǎo)出jar包的形式添加到依賴庫里,因此這邊只介紹HelloClient.java,該類為客戶端啟動(dòng)類,用于在注冊(cè)表中查找遠(yuǎn)程對(duì)象實(shí)現(xiàn)遠(yuǎn)程方法調(diào)用,代碼如下:

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

到此為止,客戶端和服務(wù)端的工程都搭建完畢,現(xiàn)在可以進(jìn)行測試,執(zhí)行次序和測試結(jié)果如下所示:

1.首先運(yùn)行服務(wù)端啟動(dòng)類HelloServer,結(jié)果如下:

服務(wù)端:------------遠(yuǎn)程對(duì)象IHello注冊(cè)成功,等待客戶端調(diào)用...

2.運(yùn)行客戶端啟動(dòng)類,結(jié)果如下:

服務(wù)端:-------------- 客戶端發(fā)送的user為name : andy, age : 20 客戶端:-------------- 服務(wù)端返回的的user為name : andy2, age : 30

 到此這篇關(guān)于java RMI詳細(xì)介紹及實(shí)例講解的文章就介紹到這了,更多相關(guān)java RMI 內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)! 

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美在线日韩| 免费在线小视频| 亚洲激情二区| 亚洲激情二区| 免费观看不卡av| 国内亚洲精品| 国产高潮在线| 最新中文字幕在线播放| 电影天堂国产精品| 麻豆精品蜜桃| 欧美成人综合| 国产精品视区| 亚洲综合三区| 蜜臀精品久久久久久蜜臀 | 蜜臀精品一区二区三区在线观看 | 亚洲午夜久久| 久久大逼视频| 日韩一区二区三区高清在线观看| 日韩欧美中文字幕在线视频| 日本成人精品| 青青草国产成人99久久| 欧美视频一区| 精品亚洲成人| 亚洲综合在线电影| 欧美日韩视频一区二区三区| 视频一区在线播放| 日韩精品一级| 久久av网站| 日韩精品91| 九九在线精品| 免费日韩av片| 911亚洲精品| 国产成人精品福利| 美女少妇全过程你懂的久久| 视频在线观看一区| 国产精品亚洲综合久久| 波多视频一区| 免费精品视频| 久久不卡日韩美女| 久久精品亚洲人成影院| 蜜臀久久99精品久久久画质超高清| 日本成人一区二区| 福利片在线一区二区| 国产高清一区二区| 清纯唯美亚洲综合一区| 韩国女主播一区二区三区| 999久久久精品国产| 巨乳诱惑日韩免费av| 日本精品国产| 在线天堂中文资源最新版| 麻豆成人在线| 精品一区二区三区免费看 | 免费成人在线影院| 久久午夜影院| 好吊一区二区三区| 久久激情五月婷婷| 欧洲精品一区二区三区| 免费一区二区视频| 国产亚洲观看| 欧美一级精品| 国产精品美女久久久久久不卡| 亚洲成人一区在线观看| 97久久亚洲| 久久在线视频免费观看| 久久精品99国产精品| 91精品一区国产高清在线gif| 午夜久久av| 色婷婷狠狠五月综合天色拍| 日本欧美一区| 在线成人动漫av| 国产黄色精品| 国产精品日韩欧美一区| 精品亚洲免a| 最新日韩欧美| 久久久久久网| 日韩在线麻豆| 亚洲国产综合在线看不卡| 国产欧美久久一区二区三区| 欧美精品一二| 久久不见久久见国语| 久久最新视频| 日韩高清中文字幕一区二区| 欧美久久亚洲| 亚洲在线国产日韩欧美| 波多视频一区| 国产亚洲一区二区三区啪| 亚洲国产一区二区在线观看| 乱一区二区av| 蜜桃视频在线观看一区| 久久精品国产68国产精品亚洲| 欧美亚洲一级| 天堂va蜜桃一区二区三区| 亚洲播播91| 久久精品国产在热久久| 日韩精品视频一区二区三区| 久久美女精品| 91综合视频| 国产精品v亚洲精品v日韩精品 | 香蕉视频成人在线观看| 亚洲a在线视频| 久久精品国产免费| 六月婷婷一区| 欧美日韩国产高清| 91视频精品| 国产福利一区二区三区在线播放| 亚洲人www| 国产精品呻吟| 亚洲成人三区| 美女网站一区| 午夜国产一区二区| 久久精品亚洲人成影院| 日韩在线短视频| 日韩在线短视频| 欧美片第1页| 中文字幕在线免费观看视频| 国产伊人久久| 久久狠狠久久| 国产欧美一区二区色老头| 日韩福利视频导航| 亚洲精品国产日韩| 亚洲午夜免费| 在线精品亚洲| 亚洲影院天堂中文av色| 蜜臀av亚洲一区中文字幕| 久久亚洲美女| 久久福利影视| 丝袜美腿亚洲色图| 亚洲一区二区免费看| 亚洲激情另类| 丝袜脚交一区二区| 亚洲制服欧美另类| 三级欧美在线一区| 蜜桃视频一区二区三区在线观看| 国产农村妇女精品一区二区| 欧美日韩国产亚洲一区| 国产真实久久| 亚洲美洲欧洲综合国产一区| 国产一区二区精品| 免费黄网站欧美| 日本中文字幕视频一区| 日本不卡视频在线观看| 国产一精品一av一免费爽爽| 国产精品对白久久久久粗| 国产精品17p| 精品视频高潮| av最新在线| 青青青免费在线视频| 久久国产日本精品| 午夜久久99| 蜜桃一区二区三区在线观看| 日本久久一区| 国内一区二区三区| 999久久久亚洲| 在线观看亚洲精品福利片| 日韩精品高清不卡| 国产精品欧美一区二区三区不卡 | 日韩福利在线观看| 麻豆久久一区| 日韩大片在线播放| 亚洲大全视频| 快she精品国产999| 国产乱码精品| 香蕉成人av| 六月丁香综合| 国产欧美啪啪| 日韩电影免费网址| 国产一区91| 国产精品一国产精品| 美女福利一区二区三区| 黄色精品网站| 久久国产欧美日韩精品| 国产v日韩v欧美v| 久久亚洲电影| 牛牛精品成人免费视频| 久久夜夜操妹子| 午夜久久黄色| 国产亚洲第一伦理第一区| 国产精品久久久久久久久妇女| 欧美~级网站不卡| 青草久久视频| 秋霞国产精品| 日本电影久久久| 久久毛片亚洲| 中文字幕亚洲在线观看| 国产精品久久久久久av公交车| 免费一二一二在线视频| 亚洲精品少妇| 91视频一区| 亚洲有吗中文字幕| 国产精品yjizz视频网| 亚洲精品午夜av福利久久蜜桃| 日本视频一区二区| 成人在线丰满少妇av| 中文字幕中文字幕精品| 国产 日韩 欧美一区| 国产伦理一区| 免费成人在线视频观看| 日韩精品电影| 国产精品久久久久久久久免费高清 | 国产精品普通话对白|