学习JAVA RMI

       前段时间已经学了点RMI的知识,当时写了一个小例子,没出什么错误,所以今天在看RMI竟然没留下什么印象,下面写一下我对Java RMI学习的一点心得,以供以后查询,当然我们以一个小例子为基础:

  1,我用的是eclipse3.1.1所以就下载了RMI的插件RMI Plug-in for Eclipse version 2.0,该网站上有个Demo,很不错适合入门。

2,新建一个java project ,新建一个 Remote Interface接口类printcommon,

 

public interface printcommon extends Remote {

 public String print() throws RemoteException;

}

当然在 eclipse下会自动编译,如果在命令窗口内要用javac编译。

3  新建一个 java project ,新建一个类ServerImpl,作为服务器端,实现上面定义的接口。在构建路径的project选项要选上上面接口的project

public class serverImp extends UnicastRemoteObject implements printcommon {
 protected serverImp() throws RemoteException {
  super();             / /这个调用继承类的构造函数一定要写的,因为它用来建立客户端和服务器端的连接。
  }

   public static void main(String[] args) {
  Registry r;
  try {
   r = LocateRegistry.getRegistry();
   r.bind("print",new serverImp());     //这个要注意,左边的参数是个字符串,只是右边新建对象的别名,供客户程序查找远程对象用的,有的人把它当成一个地址了,在两台机子部署的时候,它也不代表地址,有人写了一个博客就是代表地址,误导了我调试了好久。
   System.out.print("server is ready");
  } catch (Exception e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  
 }

 public String print() throws RemoteException {   //方法的实现
  // TODO 自动生成方法存根
  return "HelloWorld";
 }

}
4  在eclipse下,点击该project的右键,在RMI选项中选择产生stub.class,具体步骤可以看demo.如在在命令行下,先编译后键入rmic ServerImpl。

5. 新建java project,新建一个类,作为客户端。当然也要加入接口的project,

public class client {

  public static void main(String[] args) {
  System.setSecurityManager(new RMISecurityManager());
           try {
    printcommon printer=(printcommon) Naming.lookup("rmi://202.193.86.31:1099/print");//查找在服务器端要调用的对象,格式是rmi://服务器地址/ 对象别名, 端口号可以省略,默认是1099。
   System.out.println(printer.print());
           
           } catch (MalformedURLException e) {
       e.printStackTrace();
   } catch (RemoteException e) {
        e.printStackTrace();
   } catch (NotBoundException e) {
        e.printStackTrace();
   }
 }

}

编译保存。

6,在服务器端  键入 >rmiregistry,在eclipse 下在插件下运行就行了。然后以RMI应用程序的形式运行服务器端的程序,在codebase里写入地址,如果在本地做试验的话,就点击compute from classpath,如果在两台机子上部署的话,这里要自己键入http://地址:8080/example/Hello.jar  ,example是我在Tomcat服务器下一个Web项目名,Hello.jar是接口类printcommon和stub.class的打包,因为客户端访问的是stub.class,所以只需要把它们两打包就行了,可以在project下导出。客户端在查找远程对象时,就会在这个地址下寻找。当然你要开启tomcat。还要设置host地址。设置好后就运行服务器端了。如在命令行下,键入> java -Djava.security.policy=policy.txt  ServerImp。

7,运行客户端,以RMI应用程序运行,在对话框内要产生安全文件。运行OK了。在命令行键入> java -Djava.security.policy=policy.txt CalculatorClient

改变端口号: java.rmi.registry.LocateRegistry.createRegistry(2005);

你可能感兴趣的:(java,eclipse,tomcat,应用服务器,Security)