当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

<b>Java学习杂谈(六)</b>[Java编程]

赞助商链接



  本文“<b>Java学习杂谈(六)</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1.Java中的RMI机制

RMI的全称是远程办法调用,相信不少朋友都据说过,基本的思绪可以用一个经典比方来注释:A计算机想要计算一个两个数的加法,但A自己做不了,于是叫别的一台计算机B帮忙,B有计算加法的功效,A调用它就像调用这个功效是自己的一样便利.这个就叫做远程办法调用了.

远程办法调用是EJB实现的支柱,成立分布式利用的核心机惟.这个很好理解,再拿上面的计算加法规子,A只知道去call计算机B的办法,自己并没有B的那些功效,所以A计算机端就无法看到B履行这段功效的历程和代码,因为看都看不到,所以既没有机会盗取也没有机会去窜改办法代码.EJB正式基于这样的思惟来完成它的任务的.当简单的加法变成复杂的数据库操作和电子商务交易利用的时刻,这样的安全性和分布式利用的便利性就表现出来上风了.

好了,回到细节上,要若何实现远程办法调用呢?我但愿大家学习任何技术的时刻可以试着依靠自己的下意识判断,只要你的设法是公道结实的,那么极大概实际上它就是这么做的,毕竟真理都储藏在普通的生活细节中.这样只要带着一些柔弱的Java底子来考虑RMI,其实也可以想出个大约来.

a)需求有一个服务器角色,它拥有真正的功效代码办法.比方B,它供应加法服务b)假如想远程利用B的功效,需求知道B的IP地址c)假如想远程利用B的功效,还需求知道B中那个特定服务的名字

我们很自然可以想到这些,固然不完善,但已经很接近精确的做法了.实际上RMI要得以实现还得意于Java一个很重要的特点,就是Java反射机制.我们需求知道服务的名字,但又必须躲藏实现的代码,若何去做呢?答案就是:接口!

举个例子:public  interface  Person(){ public  void  sayHello();}

Public  class  PersonImplA  implements  Person{ public  PersonImplA(){}

public  void  sayHello(){   System.out.println("Hello!");} }

Public  class  PersonImplB  implements  Person{ public  PersonImplB(){}

public  void  sayHello(){   System.out.println("Nice  to  meet  you!");} }

客户端:Person  p  =  Naming.lookup("PersonService");p.sayHello();

就这几段代码就包含了几近全部的实现技术,大家相信么?客户端恳求一个say  hello服务,服务器运行时接到这个恳求,操纵Java反射机制的Class.newInstance()返回一个对象,但客户端不知道服务器返回的是 ImplA还是ImplB,它承受用的参数签名是Person,它知道实现了Person接口的对象一定有sayHello()办法,这就意味着客户端并不知道服务器真正若何去实现的,但它通过理解Person接口明确了它要用的服务办法名字叫做sayHello().

如此类推,服务器只需求表露自己的接口出来供客户端,全部客户端便可以自己挑选需求的服务.这就像餐馆只要拿出自己的菜单出来让客户挑选,便可以在后台厨房一道道的按需做出来,它怎么做的普通是不让客户知道的!(家传菜谱吧,^_^)

最后一点是我调用lookup,查找一个叫PersonService名字的对象,服务器只要看到这个名字,在自己的目录(相当于电话簿)中找到对应的对象名字供应服务便可以了,这个目录就叫做JNDI  (Java命名与目录接口),相信大家也听过的.

有爱好的朋友无妨自己做个RMI的利用,很多前辈的博客中有简单的例子.提醒一下操纵Jdk的bin目录中rmi.exe和 rmiregistry.exe两个号令便可以自己建起一个服务器,供应远程服务.因为例子很简单找,我就不自己举例子了!

2.JVM沙箱&框架

RMI罗唆得太多了,实在是极力想把它说清楚,但愿对大家有帮忙.最后的最后,给大家简单讲一下JVM框架,我们叫做Java沙箱.Java沙箱的基本组件以下:a)类装载器构造b)class文件查验器c)内置于Java虚拟机的安全特点d)安全管理器及Java  API

此中类装载器在3个方面对Java沙箱起作用:a.它避免恶意代码去干与好心的代码b.它保护了被信任的类库边界c.它将代码归入保护域,肯定了代码可以举行哪些操作

虚拟机为差别的类加载器载入的类供应差别的命名空间,命名空间由一系列唯一的名称构成,每一个被装载的类将有一个名字,这个命名空间是由Java虚拟机为每一个类装载器保护的,它们彼此之间乃至不可见.

我们常说的包(package)是在Java虚拟机第2版的标准第一次呈现,正肯定义是由同一个类装载器装载的、属于同一个包、多个范例的调集.类装载器采取的机制是双亲委派情势.具体的加载器框架我在Java杂谈(一)中已经注释过了,当时说最外层的加载器是AppClassLoader,其实算上网络层的话AppClassLoader也可以作为parent,还有更外层的加载器URLClassLoader.为了避免恶意攻击由URL加载进来的类文件我们当然需求分差别的拜候命名空间,并且拟定最安全的加载次序,简单来说就是两点:

a.从最内层JVM自带类加载器开始加载,外层恶意同名类得不到先加载而无法利用b.由于严峻通过包来辨别了拜候域,外层恶意的类通过内置代码也无法得到权限拜候到内层类,破坏代码就自然无法见效.

附:关于Java的平台无关性,有一个例子可以很明显的阐明这个特点:普通来说,C或C++中的int占位宽度是按照目标平台的字长来决意的,这就意味着针对差别的平台编译同一个C++程序在运行时会有差别的行为.但是关于 Java中的int都是32位的二进制补码标识的有标记整数,而float都是服从IEEE 754浮点尺度的32位浮点数.


  以上是“<b>Java学习杂谈(六)</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .