JAVA网页设计Java2 RMI 进门
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?RMI从Java1.1入手下手,RMI使得运转于分歧JVM(包含分歧主机)上的Java使用程序能够相互通话。即:一个JVM中的Java使用程序能够挪用另外一JVM上的对象(远程对象)所界说的办法。
JavaRMI有侧重要的意义。RMI在Java收集编程和初级编程中都有主要的使用,如EJB,Jini等。
Java2对RMI做了良多加强和改善,如平安性,静态代码下载等。
本文给出了一个最复杂的例子,以申明个中的一些基础道理。本文的特性是注意了实践开辟和真实的运转
情况相分离,摹拟了RMI真实的开辟和运转历程。
1.完成远程接口,天生远程对象,存根(Stub)和框架(Skeleton)
完成远程接口,远程接口告知JVM:完成了该接口的对象能够远程挪用及有哪些办法能够挪用。
本例子中界说了sayHello()。因为远程挪用会触及到收集通信,因而这些办法都要抛出RemoteException.
远程接口和远程对象能够由A开辟,并把远程接口(Hello)d打包分给Client端开辟者B。
创建f:server目次,把Hello.java和HelloImpl.java拷贝到该目次中。
//Hello.java
packagejdeveloper.rmi;
importjava.rmi.Remote;
importjava.rmi.RemoteException;
publicinterfaceHelloextendsRemote{
StringsayHello()throwsRemoteException;
}
天生远程对象.
//HelloImpl.java
packagejdeveloper.rmi;
importjava.rmi.Naming;
importjava.rmi.RemoteException;
importjava.rmi.RMISecurityManager;
importjava.rmi.server.UnicastRemoteObject;
publicclassHelloImplextendsUnicastRemoteObject
implementsHello{
publicHelloImpl()throwsRemoteException{
super();
}
publicStringsayHello(){
return"HelloWorld!";
}
publicstaticvoidmain(Stringargs[]){
//Createandinstallasecuritymanager
if(System.getSecurityManager()==null){
System.setSecurityManager(newRMISecurityManager());
}
try{
Helloobj=newHelloImpl();
//Bindthisobjectinstancetothename"HelloServer"
Naming.rebind("HelloServer",obj);
System.out.println("HelloServerboundinregistry");
}catch(Exceptione){
System.out.println("HelloImplerr:"+e.getMessage());
e.printStackTrace();
}
}
}
存根(Stub)和框架(Skeleton)
f:
cdserver
javac-d.Hello.java
javac-d.HelloImpl.java
rmic-d.jdeveloper.rmi.HelloImpl
jarcvfhello.jarjdevelopermiHello.class把hello.jar分发给Client真个开辟者B。
存根(Stub)的寄存!
存根(Stub)是静态下载的。Client经由过程存根(Stub)和远程对象的框架(Skeleton)通信,对Client来
讲就象操纵当地对象一样。在年夜多半情形下,可下载的代码放到http服务器的某个目次中。本例子放到http://hjc/rmi下。
hjc:呆板名,rmi:http的一个目次。假如只是单机测试则能够放到某个目次下如f:serverclasses.
本文将对以上两种办法都给出运转的步骤(policy文件和bat文件)。
2.完成Client端程序
//HelloClient.java
packagejdeveloper.rmi;
importjava.rmi.RMISecurityManager;
importjava.rmi.Naming;
importjava.rmi.RemoteException;
importjava.rmi.NotBoundException;
publicclassHelloClient{
publicstaticvoidmain(Stringargs[])throwsException{
System.setSecurityManager(newRMISecurityManager());
HelloRemoteObj=(Hello)Naming.lookup("//"+args+"/HelloServer");
System.out.println(RemoteObj.sayHello());
}
}
创建f:client目次,把HelloClient.java拷贝到该目次中。
创建f:clientclasses目次,把hello.jar拷贝到该目次中。
f:
cdclient
javac-classpath%CLASSPATH%;f:clientclasseshello.jar-d.HelloClient.java
3.运转程序
启动DOS窗口
setclasspath=
startrmiregistry
A.以单机体例运转
创建f:serverclassesjdevelopermi目次
f:
cdf:serverclasses
copyf:serverhello.jar.
copyf:serverjdevelopermiHelloImpl_Stub.classf:serverclassesjdevelopermi
jarxvfhello.jar
启动新的DOS窗口
把starthelloserver.bat和rmiserver.policy放到f:server
运转starthelloserver
starthelloserver.bat
SETCP=f:server;f:serverclasseshello.jar
echousingclasspath:%CP%
java-classpath%CP%-Djava.rmi.server.codebase=file:/f:serverclasses/
-Djava.rmi.server.hostname=hjc-Djava.security.policy=rmiserver.policyjdeveloper.rmi.HelloImpl
rmiserver.policy
grant{
permissionjava.net.SocketPermission"*:1024-65535",
"connect";
};
启动新的DOS窗口
把starthelloclient.bat和rmiclient.policy放到f:client
运转starthelloclient
starthelloclient.bat
@echooff
setCP=f:client;f:clientclasseshello.jar
echousingclasspath%CP%
@echoon
java-classpath%CP%-Djava.rmi.server.codebase=file:/f:serverclasses/
-Djava.security.policy=rmiclient.policyjdeveloper.rmi.HelloClient%1
rmiclient.policy
grant{
permissionjava.net.SocketPermission"*:1024-65535",
"connect";
permissionjava.io.FilePermission
"f:serverclasses-","read";
};
B.以收集体例运转
创建apache_pathhtdocsmijdevelopermi目次
cdapache_pathhtdocsmi
copyf:serverhello.jar.
copyf:serverjdevelopermiHelloImpl_Stub.classapache_pathhtdocsmijdevelopermi
jarxvfhello.jar
把starthellohttpserver.bat和rmihttpserver.policy放到f:server
启动新的DOS窗口
运转starthellohttpserver
starthellohttpserver.bat
SETCP=f:server;f:serverclasseshello.jar
echousingclasspath:%CP%
java-classpath%CP%-Djava.rmi.server.codebase=http://hjc/rmi/
-Djava.security.policy=rmihttpserver.policyjdeveloper.rmi.HelloImpl
rmihttpserver.policy
grant{
permissionjava.net.SocketPermission"*:1099","accept,connect,listen,resolve";
permissionjava.net.SocketPermission"*:80","accept,connect,listen,resolve";
};
启动新的DOS窗口
把starthellohttpclient.bat和rmihttpclient.policy放到f:client
运转starthellohttpclient
starthellohttpclient.bat
@echooff
setCP=f:client;f:clientclasseshello.jar
echousingclasspath%CP%
@echoon
java-classpath%CP%-Djava.rmi.server.codebase=http://hjc/rmi/
-Djava.security.policy=rmihttpclient.policyjdeveloper.rmi.HelloClient%1
rmihttpclient.policy
grant{
permissionjava.net.SocketPermission"*:80","connect";
permissionjava.net.SocketPermission"*:1024-65535","connect";
};
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 是一种将安全性(Security)列为第一优先考虑的语言 Java是一种计算机编程语言,拥有跨平台、面向对java 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 Java是一种计算机编程语言,拥有跨平台、面向对java 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
页:
[1]