一、为什么需要codebase
当我们用一个对象作为远程方法调用的参数时,对象是以序列化流来传输到远端,然后在远端重新生成对象。这样就可能在两个Java虚拟机中交换对象了。 但是序列化是这种传递对象的一部分。当你序列化对象时,你仅仅是把对象的成员数据转化成字节流,而实际实现 该对象的代码却没有。也就是说,传递的只是数据部分,而做为控制逻辑的程序代码部分却没有被传递。 这就是RMI初学者容易误解的地方,我已经序列化对象了,而且对象也传过去了,怎么还说找不到呢。其实,对象 数据的确过去了,不过找不到是类定义,这个并不是序列化传过去的,RMI协议是不传递代码的。但是,对于本地没有 的类文件的对象,RMI提供了一些机制允许接收对象的一方去取回该对象的类代码。而到什么地方去取,这就需要 发送方设置codebase了。
二、什么是codebase
简单说,codebase就是远程装载类的路径。当对象发送者序列化对象时,会在序列化流中附加上codebase的信息。 这个信息告诉接收方到什么地方寻找该对象的执行代码。
你要弄清楚哪个设置codebase,而哪个使用codebase。任何程序如果发送一个对方可能没有的新类对象时就要设置codebase(例如jdk的类对象,就不用设置codebase)。
codebase实际上是一个url表,在该url下有接受方需要下载的类文件。如果你不设置codebase,那么你就不能把 一个对象传递给本地没有该对象类文件的程序。
三、怎样设置codebase
在大多数情况下,你可以在命令行上通过属性java.rmi.server.codebase来设置codebase。例如,如果你在机 器url上运行web服务器,端口是8080,你所提供下载的类文件在webserver的根目录下。那么运行应用程序的java 命令行:
-Djava.rmi.server.codebase=http://url:8080/
这就是告诉任何接受对象的程序,如果本地没有类文件,可以从这个url下载。
四、类文件应该在什么地方
如上所示,当接收程序试图从url的webserver上下载代码时,它会把对象的包名转化成目录,到相对于codebase 的该目录下寻找(这点和classpath是一样的)。例如,如果你传递的是类文件yourgroup.project.bean的实例 ,那么接受方就会到下面的url去下载类文件:
-Djava.rmi.server.codebase=http://url:8080/yourgroup/project/bean.class
一定要保证你把类文件放到webserver根目录下的正确位置,这样这些类文件才能被找到。 另一方面,如果你把所有的类文件包装成jar文件,那么设置codebase时就要明确的指出这个jar文件。(这又和 classpath一致了,其实codebase就是网络范围的类路径。)例如你的jar文件是myclasses.jar,那么codebase 如下:
-Djava.rmi.server.codebase=http://url:8080/myclasses.jar
你注意这两种形式的不同。用jar文件后面不用跟‘/’,而用路径的一定用跟‘/’。
分享到:
相关推荐
java rmi java rmijava rmi javajava rmi java rmi rmi
RMI简单实例RMI简单实例RMI简单实例
完整的Rmi调用示例,极难得的Rmi应用示例
rmi的详细例子,rmi的详细用法,一看就懂
RMI 规范 RMI 详细介绍 共10章
RMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMI
RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用
rmi小程序,RMI文档,为RMI初学者使用
1. Unpack RMI.rar and put the package "features" and "plugins" under the package "net.genady.rmi_2.0.2.1" to <%eclipse%> directory; 2. Copy rmi.jar and lic.jar under the package "crack" to ...
Spring-RMI (RMI调用, HTTP调用) 本人测试过了
本项目使用socket直接发送数据包来攻击rmi,通过反序列化攻击rmi,双击直接运行,对1099端口的rmi服务直接进行漏洞检测。
java rmi上传文件 在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写...
Weblogic Server与RMI RMI的使用介绍
Java编程rmi实例,给出远程方法调用技术在java方面的具体例子。
简约而不简单的描述了RMI技术,希望对大家有所帮助。
RMI远程文件传输
java RMI
spring RMI 简单例子
检测javaRMI反序列化漏洞
分布式实验报告RMI.docx