当前位置: 首页 > 图文教程 > 网络编程 > JSP > 关于远程方法调用(RMI)的实现

JSP
搭建Eclipse+MyEclipse开发环境
卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!
一个jsp+AJAX评论系统
JSP 多个文件打包下载代码
JSP 动态树的实现
jsp 重复提交问题
J2ME/J2EE实现用户登录交互 实现代码
访问JSP文件或者Servlet文件时提示下载的解决方法
JSP EL表达式详细介绍
JSP 报表打印的一种简单解决方案
jsp 自定义标签实例
AJAX自学练习 无刷新从数据库后台取数据显示
AJAX 自学练习 请求与显示
AJAX 自学练习 无刷新提交并修改数据库数据并显示
jsp 文件上传浏览,支持ie6,ie7,ie8
JSP application(return String)用法详例
jsp form表单方法示例
JSP request(return String)用法详例
JSP forward用法分析实例代码分析
JSP JavaBean的setProperty属性

JSP 中的 关于远程方法调用(RMI)的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-02   浏览: 48 ::
收藏到网摘: n/a

远程方法调用

远程方法调用(Remote Method Invocation ,RMI)使用户能访问在另一
主机上的Java对象,并远程调用其方法。程序的对象是客户,而远程对象是服
务器。远程对象也可以是另一个远程服务对象的客户。通过使用持续性(串行
化和解串行化),本地对象和原始类型值可以作为参数传递给远程对象。这种
方式允许Java程序可以利用分布式计算将工作量分散到多个Java虚拟机上。

工作原理
RMI系统结构,在客户端和服务器端都有几层结构。
--------- ----------
| 客户 | | 服务器|
---------- ----------
| |
------------- ----------
| 占位程序 | | 骨干网 |
-------------- -----------
| |
------------------------------------
| 远 程 引 用 层 |
------------------------------------
| |
------------------------------------
| 传 输 层 |
------------------------------------

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference
Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传
输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。
占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。
远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个
服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的
远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返
回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上
经传输层和远程调用层返回。最后,占位程序获得返回值。

要完成以上步骤需要有以下几个步骤:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成占位程序和骨干网(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象

具体实现如下:
1、生成一个远程接口
package c15.ptime;
import java.rmi.*;

public interface PerfectTimeI extends Remote {
long getPerfectTime() throws RemoteException;
}

2、实现远程对象(服务器端程序)
package c15.ptime;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;

public class PerfectTime
extends UnicastRemoteObject
implements PerfectTimeI {
public long getPerfectTime()
throws RemoteException {
return System.currentTimeMillis();
}

public PerfectTime() throws RemoteException {
super();
}

public static void main(String[] args) {
System.setSecurityManager(
new RMISecurityManager());
try {
PerfectTime pt = new PerfectTime();
Naming.rebind(
"//zhouty:2005/PerfectTime" , pt);
System.out.println("Ready to do time");
} catch(Exception e) {
e.printStackTrace();
}
}
}

4、编译远程对象(服务器端程序)
javac -classpath . -d . PerfectTime.java

5、生成根和干(占位程序和骨干程序)
rmic -classpath . -d . c15.ptime.PerfectTime

6、注册远程对象
start rmiregistry 2005

7、启动服务器端程序
java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per
fectTime

8、编写客户端程序
package c15.ptime;
import java.rmi.*;
import java.rmi.registry.*;

public class DisplayPerfectTime {
public static void main(String[] args) {
System.setSecurityManager(
new RMISecurityManager());
try {
PerfectTimeI t =
(PerfectTimeI)Naming.lookup(
"192.168.0.171:2005/PerfectTime");
for(int i = 0 ; i < 10; i++)
System.out.println("Perfect time =" +
t.getPerfectTime());
} catch(Exception e) {
e.printStackTrace();
}
}
}

9、编译客端程序
javac -classpath . -d . DisplayPerfectTime.java

10、修改JVM的配置文件 (客户机和服务器的都需要经过修改)
%JRE_HOME%\policytool.exe

11、启动客户程序
java -classpath . c15.ptime.DisplayPerfectTime

12、返回结果

Perfect time =967274884390
Perfect time =967274884450
Perfect time =967274884450
Perfect time =967274884450
Perfect time =967274884500
Perfect time =967274884500
Perfect time =967274884560
Perfect time =967274884610
Perfect time =967274884610
Perfect time =967274884610