国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java RMI詳細介紹及簡單實例

Java RMI詳細介紹及簡單實例

2020-08-15 17:02Java之家 Java教程

這篇文章主要介紹了Java RMI詳細介紹及簡單實例的相關資料,需要的朋友可以參考下

Java RMI詳解

概要:

Java RMI 指的是遠程方法調用 (Remote Method Invocation)。它是一種機制,能夠讓在某個 Java 虛擬機上的對象調用另一個 Java 虛擬機中的對象上的方法。可以用此方法調用的任何對象必須實現該遠程接口。 

Java RMI不是什么新技術(在Java1.1的時代都有了),但卻是是非常重要的底層技術。

大名鼎鼎的EJB都是建立在rmi基礎之上的,現在還有一些開源的遠程調用組件,其底層技術也是rmi。 

在大力鼓吹Web Service、SOA的時代,是不是每個應用都應該選用笨拙的Web Service組件來實現,通過對比測試后,RMI是最簡單的,在一些小的應用中是最合適的。

下面通過一個簡單的例子來說明RMI的原理和應用,下面這個例子是一個簡單HelloWorld,但已涵蓋RMI的核心應用與開發模式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-8-7 21:50:02
* 定義一個遠程接口,必須繼承Remote接口,其中需要遠程調用的方法必須拋出RemoteException異常
*/
public interface IHello extends Remote {
 
  /**
   * 簡單的返回“Hello World!"字樣
   * @return 返回“Hello World!"字樣
   * @throws java.rmi.RemoteException
   */
  public String helloWorld() throws RemoteException;
 
  /**
   * 一個簡單的業務方法,根據傳入的人名返回相應的問候語
   * @param someBodyName 人名
   * @return 返回相應的問候語
   * @throws java.rmi.RemoteException
   */
  public String sayHelloToSomeBody(String someBodyName) throws RemoteException;
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-8-7 21:56:47
* 遠程的接口的實現
*/
public class HelloImpl extends UnicastRemoteObject implements IHello {
  /**
   * 因為UnicastRemoteObject的構造方法拋出了RemoteException異常,因此這里默認的構造方法必須寫,必須聲明拋出RemoteException異常
   *
   * @throws RemoteException
   */
  public HelloImpl() throws RemoteException {
  }
 
  /**
   * 簡單的返回“Hello World!"字樣
   *
   * @return 返回“Hello World!"字樣
   * @throws java.rmi.RemoteException
   */
  public String helloWorld() throws RemoteException {
    return "Hello World!";
  }
 
  /**
   * 一個簡單的業務方法,根據傳入的人名返回相應的問候語
   *
   * @param someBodyName 人名
   * @return 返回相應的問候語
   * @throws java.rmi.RemoteException
   */
  public String sayHelloToSomeBody(String someBodyName) throws RemoteException {
    return "你好," + someBodyName + "!";
  }
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-8-7 22:03:35
* 創建RMI注冊表,啟動RMI服務,并將遠程對象注冊到RMI注冊表中。
*/
public class HelloServer {
  public static void main(String args[]) {
 
    try {
      //創建一個遠程對象
      IHello rhello = new HelloImpl();
      //本地主機上的遠程對象注冊表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(">>>>>INFO:遠程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();
    }
  }
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2008-8-7 22:21:07
* 客戶端測試,在客戶端調用遠程對象上的遠程方法,并返回結果。
*/
public class HelloClient {
  public static void main(String args[]){
    try {
      //在RMI服務注冊表中查找名稱為RHello的對象,并調用其上的方法
      IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");
      System.out.println(rhello.helloWorld());
      System.out.println(rhello.sayHelloToSomeBody("熔巖"));
    } catch (NotBoundException e) {
      e.printStackTrace();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (RemoteException e) {
      e.printStackTrace(); 
    }
  }
}

運行RMI服務端程序:

 運行RMI客戶端程序:

 總結:

從上面的過程來看,RMI對服務器的IP地址和端口依賴很緊密,但是在開發的時候不知道將來的服務器IP和端口如何,但是客戶端程序依賴這個IP和端口。

這也是RMI的局限性之一。這個問題有兩種解決途徑:一是通過DNS來解決,二是通過封裝將IP暴露到程序代碼之外。
RMI的局限性之二是RMI是Java語言的遠程調用,兩端的程序語言必須是Java實現,對于不同語言間的通訊可以考慮用Web Service或者公用對象請求代理體系(CORBA)來實現。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 99久久久 | 日本午夜在线 | www免费在线观看 | 成人午夜电影在线观看 | 激情综合网址 | 国产91看片 | 国产日产精品一区二区三区四区 | 欧州一区二区三区 | 一区二区精品在线视频 | 日韩欧美手机在线 | 欧美日韩一区二区三区在线观看 | 成人黄网视频在线观看 | 麻豆二区| 嫩草精品 | av片免费看 | 日日操夜夜操天天操 | 久久精品国产99国产 | 日韩精品影院 | 久久精品亚洲 | 国产91短视频 | 日本中文字幕久久 | 吴梦梦到粉丝家实战华中在线观看 | 欧美午夜一区 | 免费在线一区二区 | 91中文在线观看 | 欧美成人高清视频 | 91精品国产欧美一区二区成人 | 成人午夜影院 | a久久| 国产在线一区二区 | 三级成人在线 | 免费观看全黄做爰大片国产 | 在线永久免费观看日韩a | 欧美午夜一区二区三区免费大片 | 99在线观看 | 亚洲欧美网站 | 午夜精品视频在线观看 | 国产在线精品一区二区 | 四虎影院网站 | 一本大道综合伊人精品热热 | 狠狠操操 |