JAVA教程之Java 进修杂谈(六)仓酷云
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net网页编程并驾齐驱的这篇是笔者盘算写的J2se部分的最初一篇了,这篇停止以后,再写J2ee部分,不晓得是不是还符合写在这个版块?人人能够给点定见,感谢人人对小弟这么勉励一起写完前六篇Java杂谈的J2se部分。最初这篇盘算谈一谈Java中的RMI机制和JVM沙箱平安框架。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反射机制。我们必要晓得服务的名字,但又必需埋没完成的代码,怎样往做呢?谜底就是:接口!
举个例子:
publicinterfacePerson(){
publicvoidsayHello();
}
PublicclassPersonImplAimplementsPerson{
publicPersonImplA(){}
publicvoidsayHello(){System.out.println(“Hello!”);}
}
PublicclassPersonImplBimplementsPerson{
publicPersonImplB(){}
publicvoidsayHello(){System.out.println(“Nicetomeetyou!”);}
}
客户端:Personp=Naming.lookup(“PersonService”);
p.sayHello();
就这几段代码就包括了几近一切的完成手艺,人人信任么?客户端哀求一个sayhello服务,服务器运转时接到这个哀求,使用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)平安办理器及JavaAPI
个中类装载器在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都是恪守IEEE754浮点尺度的32位浮点数。
PS:这个小弟比来也没工夫持续研讨下往了,只是想举一反三的供应给人人一个开端熟悉JVM的印象。无机会懂得一下JVM的外部布局对从此做Java开辟是很有优点的。
来自:http://topic.csdn.net/u/20070924/21/18482496-082f-4907-8751-b80ab5d56622.html?seed=1386683868
不得不提一下的是:.net网页编程是看到java红,而开发出来的工具。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 Java 编程语言的风格十分接近C、C++语言。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
页:
[1]