java rmi 是否 必要_Java学习之路-RMI学习
Java遠程方法調用,即Java RMI(Java Remote Method Invocation)是Java編程語言里,一種用于實現遠程過程調用的應用程序編程接口。它使客戶機上運行的程序可以調用遠程服務器上的對象。遠程方法調用特性使Java編程人員能夠在網絡環境中分布操作。RMI全部的宗旨就是盡可能簡化遠程接口對象的使用。
一、創建RMI程序的4個步驟
1、定義一個遠程接口的接口,該接口中的每一個方法必須聲明它將產生一個RemoteException異常。
2、定義一個實現該接口的類。
3、創建一個服務,用于發布2中定義的類。
4、創建一個客戶程序進行RMI調用。
二、程序的詳細實現
1.首先我們先創建一個實體類,這個類需要實現Serializable接口,用于信息的傳輸。
1 importjava.io.Serializable;
3 public class Student implementsSerializable {
5 privateString name;
7 private intage;
9 publicString getName() {
11 returnname;
13 }
15 public voidsetName(String name) {
17 this.name =name;
19 }
21 public intgetAge() {
23 returnage;
25 }
27 public void setAge(intage) {
29 this.age =age;
31 }
33 }
2.定義一個接口,這個接口需要繼承Remote接口,這個接口中的方法必須聲明RemoteException異常。
1 importjava.rmi.Remote;
3 importjava.rmi.RemoteException;
5 importjava.util.List;6 public interface StudentService extendsRemote {
12 List getList() throwsRemoteException;
14 }
3.創建一個類,并實現步驟2中的接口,但還需要繼承UnicastRemoteObject類和顯示寫出無參的構造函數。
1 importjava.rmi.RemoteException;
3 importjava.rmi.server.UnicastRemoteObject;
5 importjava.util.ArrayList;
7 importjava.util.List;
11 public class StudentServiceImpl extends UnicastRemoteObject implements
13 StudentService {
15 public StudentServiceImpl() throwsRemoteException {
17 }
21 public List getList() throwsRemoteException {
23 List list=new ArrayList();
25 Student s1=newStudent();
27 s1.setName("張三");
29 s1.setAge(15);
31 Student s2=newStudent();
33 s2.setName("李四");
35 s2.setAge(20);
37 list.add(s1);
39 list.add(s2);
41 returnlist;
43 }
45 }
4.創建服務并啟動服務
1 importjava.rmi.Naming;2 importjava.rmi.registry.LocateRegistry;
4 public classSetService {
6 public static voidmain(String[] args) {
8 try{
10 StudentService studentService=newStudentServiceImpl();
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 importjava.rmi.Naming;
3 importjava.util.List;
5 public classGetService {
9 public static voidmain(String[] args) {
11 try{
13 StudentService studentService=(StudentService) Naming.lookup("rmi://127.0.0.1:5008/StudentService");
15 List 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 packageservice;
3 importjava.util.List;
5 public interfaceStudentService {
7 ListgetList();
9 }
2.定義一個類,實現這個接口,這個類也只需實現步驟一定義的接口,不需要額外的操作
1 packageservice;
4 importjava.util.ArrayList;
6 importjava.util.List;
9 public class StudentServiceImpl implementsStudentService {
11 public ListgetList() {
13 List list=new ArrayList();
15 Student s1=newStudent();
17 s1.setName("張三");
19 s1.setAge(15);
21 Student s2=newStudent();
23 s2.setName("李四");
25 s2.setAge(20);
27 list.add(s1);
29 list.add(s2);
31 returnlist;
33 }
35 }
3.接一下來在applicationContext.xml配置需要的信息
a.首先定義服務bean
b.定義導出服務
/>
也可以增加p:registryHost屬性設置主機
c.在客戶端的applicationContext.xml中定義得到服務的bean(這里的例子是把導出服務bean和客戶端的bean放在一個applicationContext.xml中的)
/>
d.配置的東西就這么多,是不是比上面的現實要方便的多呀!現在我們來測試一下
1 packageservice;2 importjava.util.List;3 importorg.springframework.context.ApplicationContext;4 importorg.springframework.context.support.ClassPathXmlApplicationContext;5 public classTest {6 public static voidmain(String[] args) {7 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");8 StudentService studentService=(StudentService) ctx.getBean("getStudentService");9 List list =studentService.getList();10 for(Student s : list) {11 System.out.println("姓名:"+s.getName()+",年齡:"+s.getAge());12 }13 }14 }
=============控制臺============
姓名:張三,年齡:15
姓名:李四,年齡:20
=============================
上面的mian方法運行可能會報錯,應該是spring的jar少了,自己注意添加。
第一次寫博客,有不對的地方請多多指出。
總結
以上是生活随笔為你收集整理的java rmi 是否 必要_Java学习之路-RMI学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平安银行哪些信用卡有延误险?理赔标准如何
- 下一篇: java list 分组_Java 将L