失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java rmi 是否 必要_Java学习之路-RMI学习

java rmi 是否 必要_Java学习之路-RMI学习

时间:2020-01-07 16:58:57

相关推荐

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学习》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。