欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    java 核心课件2-第9章.ppt

    • 资源ID:82466207       资源大小:152.50KB        全文页数:11页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java 核心课件2-第9章.ppt

    第9章 RMIv熟悉RMI的基本原理和结构v能够熟练创建简单的RMI程序9.2 RMI的本质vRMI(Remote Method Invocation)远程方法调用;v它是Java特有的分布式计算技术,允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象的方法;v用RMI实现的远程方法调用,看起来像调用本地方法一样。客户端服务器 2.调用sayHello()方法远程对象HelloServiceImpl1.发送调用请求3.发送返回值9.3 RMI的体系结构v如下图,RMI框架采用代理,来负责客户与远程对象之间通过Socket进行通信的细节;vRMI框架为远程对象分别生成了客户端代理和服务器端代理;v位于客户端的代理称类为存根(Stub);v位于服务器端的代理类称为骨架(Skeleton)。客户端服务器远程对象HelloServiceImpl3.调用sayHello()方法1.调用本地存根的sayHello()方法2.发送被编组的参数 4.发送被编组的返回值或异常由RMI框架生成的代理类远程对象的存根远程对象的骨架5.返回值或异常v当客户端调用远程对象的一个方法时,实际上是调用本地存根对象的相应方法。存根对象与远程对象具有同样的接口。存根采用一种与平台无关的编码方式,把方法的参数编码为字节序列,这个编码过程称为参数编组。RMI主要采用Java序列化机制进行参数编组。接着,存根把以下请求消息发送给服务器:被访问对象的名字、被调用的方法的描述、编组后的参数的字节序列;v服务器端接收到客户端的请求信息,然后由相应的骨架对象来处理这一请求信息,骨架对象执行以下操作:反编组参数,即把参数俄字节序列反编码为参数;定位要访问的远程对象;调用远程对象的相应方法;获取方法调用产生的返回值或异常,然后对它们进行编组;把编组后的返回值或异常发送给客户端;v客户端的存根接收到服务器发送过来的编组后的返回值或异常,再对它进行反编组,就得到调用远程方法的返回结果;v存根与骨架类通过Socket进行通信;v在JDK5.0中,RMI框架会在运行时自动为远程对象生成动态代理类(包括存根和骨架类),从而更彻底地封装了RMI框架的实现细节,简化了RMI框架的使用方式9.4 RMI的命名服务vRMI采用一种命名服务机制来使客户程序可以找到服务器上的一个远程对象;v在JDK的安装目录的bin子目录下有一个rmiregistry.exe程序,它是提供命名服务的注册表程序;v服务器负责创建远程对象,然后把它注册到rmiregistry注册表,客户端从注册表中获得远程对象的存根对象;vRMI的命名服务API已经被整合到Java命名与目录信息(JNDI)服务中了,以URL的形式给出;vRMI的URL以rmi:/开头,后面接服务器以及端口号,然后是一个斜线,接着是远程对象的名字:vrmi:/localhost/server1默认端口为1099。ClientServerrmiregistry9.5 一个简单的应用v大致来说,创建一个RMI应用包括以下步骤:创建远程接口:继承java.rmi.Remote接口;创建远程类:实现远程接口,其构造方法必须声明抛出RemoteExcetion异常;创建服务器程序:负责在rmiregistry注册表中注册远程对象;创建客户程序:负责定位远程对象,并且调用远程对象的方法。9.5.1 创建远程接口vRMI规范要求远程对象所属的泪实现一个远程接口,并且远程接口符合以下条件:直接或间接继承java.rmi.Remote接口;接口中的所有方法声明抛出java.rmi.RemteException;方法和参数的返回值必须是可序列化的对象。v例:public interface HelloService extends Remote String sayHello(String msg)throws RemoteException;9.5.2 提供服务器端实现类(远程类)v这个类通常继承自RemoteServer类,但它是一个抽象类,仅仅定义了服务器对象与其远程存根之间通信的基本机制;vUnicastRemoteObject类继承了抽象类RemoteServer,是一个实体类,对一个远程类而言,最简单的就是继承它,它也是当前版本RMI包中提供的唯一可用的服务器端实现类。v另外,远程类的构造方法必须声明抛出RemoteExcetion异常v例:public class HelloServiceImpl extends UnicastRemoteObject implementsHelloService private String name;public HelloServiceImpl(String name)throws RemoteException this.name=name;public String sayHello(String msg)throws RemoteException return msg+from +name;9.5.3 创建服务器类v这个类主要负责:创建远程对象;用Naming类中的rebind或bind方法对远程对象进行绑定。v例:public class SimpleServer public static void main(String args)try HelloService service1=new HelloServiceImpl(service1);HelloService service2=new HelloServiceImpl(service2);Naming.rebind(rmi:/localhost/HelloService1,service1);Naming.rebind(rmi:/localhost/HelloService2,service2);System.out.println(服务器注册了两个HelloService对象);catch(RemoteException e)e.printStackTrace();catch(MalformedURLException e)e.printStackTrace();9.5.4 创建客户端类v用Naming类中的lookup方法进行远程服务查找v例:public class SimpleClient public static void main(String args)String url=rmi:/192.168.1.36/;try/获得远程对象的存根对象HelloService service1=(HelloService)Naming.lookup(url+HelloService1);HelloService service2=(HelloService)Naming.lookup(url+HelloService2);System.out.println(service1.sayHello(hello);System.out.println(service2.sayHello(hello);catch(NamingException e)e.printStackTrace();catch(RemoteException e)e.printStackTrace();catch(Exception e)e.printStackTrace();现在我们建立了所有运行这个简单RMI系统所需的文件,在命令控制台下运行这个系统,必须开启三个控制台窗口,一个运行服务器,一个运行客户端,还有一个运行RMIRegistry。(1)首先运行注册程序RMIRegistry,必须在包含刚写的类的那么目录下运行这个注册程序。rmiregistry(2)运行服务器SimpleServer这个服务器就开始工作了,把接口的实现加载到内存等待客户端的联接。(3)启动客户端SimpleClient服务器端打印:服务器注册了两个HelloService对象客户端打印:hello from service1 hello from service2如果看到了上面的输出,证明已经成功的创建了一个RMI系统,并且使他正确工作了。即使运行在同一个计算机上,RMI还是使用了你的网络堆栈和TCP/IP去进行通讯,并且是运行在三个不同的Java虚拟机上。这已经是一个完整的RMI系统。9.5.5 运行RMI系统

    注意事项

    本文(java 核心课件2-第9章.ppt)为本站会员(hyn****60)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开