国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java學習之路-RMI學習

2019-11-14 21:42:34
字體:
來源:轉載
供稿:網友
java學習之路-RMI學習

  Java遠程方法調用,即Java RMI(Java Remote Method Invocation)是Java編程語言里,一種用于實現遠程過程調用的應用程序編程接口。它使客戶機上運行的程序可以調用遠程服務器上的對象。遠程方法調用特性使Java編程人員能夠在網絡環境中分布操作。RMI全部的宗旨就是盡可能簡化遠程接口對象的使用。

  一、創建RMI程序的4個步驟

    1、定義一個遠程接口的接口,該接口中的每一個方法必須聲明它將產生一個RemoteException異常。

    2、定義一個實現該接口的類。

    3、創建一個服務,用于發布2中定義的類。

    4、創建一個客戶程序進行RMI調用。

  二、程序的詳細實現

    1.首先我們先創建一個實體類,這個類需要實現Serializable接口,用于信息的傳輸。    

 1 import java.io.Serializable; 3 public class Student implements Serializable { 5   PRivate String name; 7   private int age; 9   public String getName() {11       return name;13   }15   public void setName(String name) {17       this.name = name;19   }21   public int getAge() {23       return age;25   }27   public void setAge(int age) {29       this.age = age;31   }     33 }

    2.定義一個接口,這個接口需要繼承Remote接口,這個接口中的方法必須聲明RemoteException異常。

 1 import java.rmi.Remote; 3 import java.rmi.RemoteException; 5 import java.util.List; 6 public interface StudentService extends Remote { 12   List<Student> getList() throws RemoteException;14 }

    3.創建一個類,并實現步驟2中的接口,但還需要繼承UnicastRemoteObject類和顯示寫出無參的構造函數。

 1 import java.rmi.RemoteException; 3 import java.rmi.server.UnicastRemoteObject; 5 import java.util.ArrayList; 7 import java.util.List; 11 public class StudentServiceImpl extends UnicastRemoteObject implements13       StudentService {15   public StudentServiceImpl() throws RemoteException {17   }21   public List<Student> getList() throws RemoteException {23       List<Student> list=new ArrayList<Student>();25       Student s1=new Student();27       s1.setName("張三");29       s1.setAge(15);31       Student s2=new Student();33       s2.setName("李四");35       s2.setAge(20);37       list.add(s1);39       list.add(s2);41       return list;43   }45 }

    4.創建服務并啟動服務

 1 import java.rmi.Naming; 2 import java.rmi.registry.LocateRegistry; 4 public class SetService { 6     public static void main(String[] args) { 8         try {10             StudentService studentService=new StudentServiceImpl();12             LocateRegistry.createRegistry(5008);//定義端口號14             Naming.rebind("rmi://127.0.0.1:5008/StudentService", studentService);16             System.out.println("服務已啟動");18         } catch (Exception e) {20             e.printStackTrace();22         }24     }26 }

    5. 創建一個客戶程序進行RMI調用。

 1 import java.rmi.Naming; 3 import java.util.List; 5 public class GetService { 9   public static void main(String[] args) {11       try {13           StudentService studentService=(StudentService) Naming.lookup("rmi://127.0.0.1:5008/StudentService");15           List<Student> list = studentService.getList();17           for (Student s : list) {19               System.out.println("姓名:"+s.getName()+",年齡:"+s.getAge());21           }23       } catch (Exception e) { 25           e.printStackTrace();27       }29   }33 }

    6.控制臺顯示結果

      =============控制臺============

      姓名:張三,年齡:15

      姓名:李四,年齡:20

      ===============================

在Spring中配置Rmi服務

  將Rmi和Spring結合起來用的話,比上面實現Rmi服務要方便的多。

  1.首先我們定義接口,此時定義的接口不需要繼承其他接口,只是一個普通的接口

1 package service;3 import java.util.List;5 public interface StudentService {7      List<Student> getList();9 }

  2.定義一個類,實現這個接口,這個類也只需實現步驟一定義的接口,不需要額外的操作

 1 package service; 4 import java.util.ArrayList; 6 import java.util.List; 9 public class StudentServiceImpl implements StudentService {11  public List<Student> getList() {13   List<Student> list=new ArrayList<Student>();15   Student s1=new Student();17   s1.setName("張三");19   s1.setAge(15);21   Student s2=new Student();23   s2.setName("李四");25   s2.setAge(20);27   list.add(s1);29   list.add(s2);31   return list;33  }35 }

  3.接一下來在applicationContext.xml配置需要的信息

    a.首先定義服務bean    

<bean id="studentService" class="service.StudentServiceImpl"></bean>

    b.定義導出服務

      <bean class="org.springframework.remoting.rmi.RmiServiceExporter"        p:service-ref="studentService"        p:serviceInterface="service.StudentService"        p:serviceName="StudentService"        p:registryPort="5008"      />

      也可以增加p:registryHost屬性設置主機

    c.在客戶端的applicationContext.xml中定義得到服務的bean(這里的例子是把導出服務bean和客戶端的bean放在一個applicationContext.xml中的)

 <bean id="getStudentService"  class="org.springframework.remoting.rmi.Rm

    d.配置的東西就這么多,是不是比上面的現實要方便的多呀!現在我們來測試一下

 1 package service; 2 import java.util.List; 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 public class Test { 6 public static void main(String[] args) { 7   ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); 8   StudentService studentService=(StudentService) ctx.getBean("getStudentService"); 9   List<Student> list = studentService.getList();10   for (Student s : list) {11    System.out.println("姓名:"+s.getName()+",年齡:"+s.getAge());12   }13  }14 }

      =============控制臺============      姓名:張三,年齡:15      姓名:李四,年齡:20      =============================      上面的mian方法運行可能會報錯,應該是spring的jar少了,自己注意添加。

第一次寫博客,有不對的地方請多多指出。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岑溪市| 鹤庆县| 乳山市| 蕲春县| 蒲江县| 青海省| 新建县| 南江县| 岳普湖县| 清丰县| 临高县| 遂平县| 嘉定区| 长丰县| 抚州市| 鄂托克旗| 乃东县| 宣汉县| 徐闻县| 塔河县| 青龙| 临清市| 东城区| 灵璧县| 邹平县| 洛宁县| 双鸭山市| 克什克腾旗| 景洪市| 彭泽县| 建始县| 宁明县| 达州市| 壶关县| 融水| 尚志市| 肃北| 雅江县| 苗栗县| 三河市| 三河市|