- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RMI实例详解
RMI实例详解
功能需求:实现最简单的远程文件访问。Client能够获取在Server上的远程文件信息。实例代码中,客户端获取了服务器端的文件“D:\\test\testDate.java”的内容和文件名。
实现结构:
Server包含:
FileInformation.java 描述文件信息的接口,作为远程访问方法的返回值类型
FileInformationImple.java 描述文件信息的接口实现
Hello.java 提供的远程访问方法的接口
HelloImple.java 远程访问方法的接口实现
Server.java 服务器开启程序
Client 包含:
FileInformation.java描述文件信息的接口 (与上同)
Hello.java提供的远程访问方法的接口(与上同)
Test.java 客户端的运行程序
服务器端实现的具体步骤:
设计远程接口涉及的参数类型接口
设计远程接口
实现参数类型接口
实现远程接口
编写服务器启动程序
编写客户端测试用例
执行程序:可以在eclipse中直接执行,但是必须先运行服务器,再运行客户端。也可以在命令行下运行。次序要求同在eclipse中。步骤如下:
打开一个Dos窗口,执行命令java rmi.Server 启动服务器。启动成功会在命令行显示“Server start!”
打开另一个Dos窗口,执行命令java rmi.Test 运行客户端程序。运行成功则会在屏幕打印“D:\\test\testDate.java”的文件内容。
注意事项
本实例中并没有用到JDK所带的命令 rmic 编译实现类得到存根(Stub)类,也没用命令 rmiregistry 命令来启动RMI注册服务。在启动 rmiregistry之前必须能让它加载到相应的stub类,这就是造成**_Stub 类找不到的原因。本实例中通过“LocateRegistry.createRegistry(1099);”避免了这种错误。
如果要从另一台启动了RMI注册服务的机器上查找hello实例:
Hello hello = (Hello) Naming.lookup (//05:1099/Hello) ;
其中的IP地址和端口号1099为 RMI 注册服务器的IP和端口号,这样Client就可以在另一台机器运行。
无论是服务端还是客户端都可以用参数 。
此时可以像JNP一样从网络上动态加载类文件。而你Web ServerYourServerName/YourPackagePathName/目录下应该有一个与你的包同名的目录,那个目录下有相应stub文件出现错误: ?
这是因为在Client端没有设置安全管理器,要象Server起动时那样给一个java.security.policy属性允许它做相应socket工作(否则会出安全性异常),之后客户端就能自动从主机下载了stub文件了。 ?
如果设置的安全管理则必须编写相应的访问策略文件。
并且在执行时指定参数。
可以拿单独一台机器运行 rmiregistry 。
rmiregistry需要能加载到相应的stub类,可以通过设置classpath。或者使LocateRegistry.createRegistry(port) ,只作为 RMI远程对象的RMI集中注册的服务器,真正提供服务对象只往上注册,客户端只需从注册服务器上查找远程对象引用,然后调用远程方法,具体由谁提供服务由注册服务器来帮助联络。
还可以用 RMI Activation 编程方式来实现RMI远程方法调用,具体请参考 /j2se/1.4.2/docs/guide/rmi/activation.html
为什么要序列化远端接口中的参数(返回值)这是因为需要将客户端的对象(参数)转化成byte stream,通过网络协议传输到服务端,再还原成服务端的对象进行调用。或者是需要将服务端的对象(返回值)转化成byte stream,通过网络协议传输到服务端,再还原成客户端的对象进行调用。在 jdk中, java.lang包和java.util包下的类都已经实现了序列化,直接可以用在远程接口中作参数或返回值;所有的基本类型也可以直接用在远程接口中作参数或返回值;
package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
//远程接口必须扩展接口java.rmi.Remote
public interface Hello extends Remote {
//远程接口方法必须抛出 java.rmi.RemoteException
//远程接口方法中的参数和返回值都必须可序列化
FileInformation getF
您可能关注的文档
- 深度理解依赖注入.doc
- 农村打工仔变身餐饮大老板_草根说事1688.fm.docx
- EDMA使用文档原创.doc
- STM32 例程看门狗.doc
- 2013年12月英语四级作文预测范文.doc
- 2013英语新四级预测作文汇总.docx
- CustomCtrl开发方法.doc
- 谈方言对中国民歌的影响.doc
- 翻译词汇(3月到5月中旬).doc
- 中国人民大学经济学院区域经济学培养方案.docx
- 15继电保护测试仪检定规程.pdf(现行).docx
- Unit6I'mwatchingTV.SectionA(1a2d)课件人教版七年级英语下册.ppt
- 立方根-立方根及其性质考点训练课件人教版数学七年级下册.pptx
- Unit4ProtectingourheritagesitesExtendedReadingProject课件高中英语牛津译林版(2020)选择性2.pptx
- Unit1RelationshipsWritingworkshop邀请信课件高中英语北师大版选择性(1).pptx
- 江西省宜春中学2023-2024学年高一下学期(基础部)第一次月考数学试卷.docx
- 2.1.4细胞的生活(第2课时)课件-人教版生物七年级上册【02】.pptx
- Unit3EnvironmentalProtectionUsinglanguage2课件高中英语人教版选择性.pptx
- Unit5PoemsWordsandexpressions课件高二英语人教版选择性.pptx
- 期末三种时态复习课件牛津深圳版英语七年级上册.pptx
文档评论(0)