今天要用异地访问java某个类,用到了Java RMI,到网络中搜索了一些资料,搜索不到关于异地的实例,都是关于本地的,乘着这个机会,写一下关于异地访问java某个类的实例。
步骤一:
1.定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface myProject extends java.rmi.Remote //需要从Remote继承
{
public String myLongDistanceInterface() throws RemoteException; //需要抛出remote异常
}
2、定义一个实现该接口的类。
import java.io.PrintStream;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class actualizeMyProject extends UnicastRemoteObject //必须从UnicastRemoteObject implements myProject
{
public actualizeMyProject() throws RemoteException //需要一个抛出Remote异常的默认初始化方法
{
}
public String myLongDistanceInterface() //这个是实现myProject接口的方法
{
return "恭喜你,我被你抓到了!";
}
}
在执行第三个步骤之前,先理解一下以下概念:
在RMI中,客户机上生成的调动调用参数和反调动返回值的代码称为残根。有的书上称这部分代码为“主干”。
服务器上生成的反调动调用参数和进行实际方法调用调动返回值的代码称为框架。
3、使用RMIC程序生成远程实现所需的残根Stub 和 框架。
2中的
actualizeMyProject
编译好以后,我们就可以用RMIC命令来生成残根Stub
在Dos窗口里,到actualizeMyProject.class 所在目录,运行以下命令:
rmic actualizeMyProject
4、创建一个服务器。
dsf
sdsdf
dsf
import java.rmi.*;
public class RMI_Server
{
public static void main(String[] args)
{
try
{
actualizeMyProject actualizeMyProject = new actualizeMyProject (); //实例化要发布的类
Naming.rebind("RMI_actualizeMyProject ", actualizeMyProject ); //绑定RMI名称 进行发布
System.out.println(">>>>> RMI_Server
Ready <<<<< ");
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
}
5. 创建一个客户程序进行RMI调用。
import java.rmi.*;
public class RMI_Client {
public static void main(String[] args) {
try
{
myProject myProject = (myProject) Naming.lookup("rmi://192.168.1.158:1099/RMI_actualizeMyProject"); //通过RMI名称查找远程对象
System.out.println(myProject.myLongDistanceInterface()); //调用远程对象的方法
} catch (Exception e)
{
e.printStackTrace();
}
}
}
程序到这里基本上已经完成了,下面的步骤也不能轻易略过,不然程序是跑不起来。
6.服务端的工作。
先在DOS下运行 rmiregistry 这个命令是开启RMI的注册服务。接下来,运行我们的RMI_Server类才能调用rebing方法发布我们的类。运行我们的server程序 RMI_Server 这里是最容易出错的,参见下面注意事项。
注意:
如果提示找不到Stub类,这个需要用下面的命令来运行
java.exe -Djava.rmi.server.codebase=file:/C:\ / RMI_Server
(有时候有Stub类,就是找不到,我也不知道为什么,呵呵)
蓝字部分指定了stub类的路径。
7.客户端的工作。
如果是在本地调用的话,直接启动就行啦,在这里,我主要说一下异地调用的注意几点。
把接口类、客户端类和生成的Stub类复制到客户机。运行客户端类。在控制台会出现“
恭喜你,我被你抓到了!
”。表示你已经成功调用到。
完毕!