知识大全 一个相当经典的RMI实例源代码及详细说明

Posted

篇首语:人们视需要为事物发生之“因”,其实,它往往是事物发生之“果”。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一个相当经典的RMI实例源代码及详细说明相关的知识,希望对你有一定的参考价值。

一个相当经典的RMI实例源代码及详细说明  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   RMI技术  下面以一个例子说明怎么使用RMI技术 这个例子演示了怎样将一个文件上传到服务器和怎样将一个文件从服务器上下载下来   使用RMI技术共有 个步骤要走: ( )定义和实现远端接口中的参数 ( ) 定义和实现远端接口 ( ) 编写服务端代码 ( )编写客户端代码 ( )生成stub和skeltion 并将stub打包到客户端jar中 将skeltion打包到服务端jar中 ( )启动rmiregistry 并将服务注册到rmiregistry中 然后运行代码 下面就这六个方面说明rmi技术      定义和实现远端接口中的参数   ( )定义远端接口中的参数  每一个远端接口中的参数都必须是可序列化的 那么 如何定义一个序列化的接口呢 简单 只需从java io Serializable继承即可 如下所示   import java io Serializable;    public interface FileInformation extends Serializable     String getName();    byte[] getContent();    void  setInformation(String name byte[] content);  ;  ( )实现远端接口中的参数   实现远端接口中的参数的接口跟与实现其他任何接口没什么不一样的地方 如下所示   public class FileInformationSev implements FileInformation    private String name = null ;   private byte[] content = null ;     public String getName()      return name ;      public byte[] getContent()      return content;      public void setInformation(String name byte[] content)      this name = name ;     ntent = content ;           那么 为什么要序列化远端接口中的参数(返回值) ?这是因为需要将客户端的对象(参数)转化成byte stream 通过网络协议传输到服务端 再还原成服务端的对象进行调用 或者是需要将服务端的对象(返回值)转化成byte stream 通过网络协议传输到服务端 再还原成客户端的对象进行调用   在 jdk中 java lang包和java util包下的类都已经实现了序列化 直接可以用在远程接口中作参数或返回值 所有的基本类型也可以直接用在远程接口中作参数或返回值     定义和实现远端接口   ( )定义远端接口  远端接口必须从java rmi Remote继承 远端接口中的方法如果要throw异常 这个异常必须是java rmi RemoteException(或java rmi RemoteException的子类) 否则 这个异常就不能被返回到客户端 Example如下         import java rmi Remote;  import java rmi RemoteException;    public interface LoadFile extends Remote     void upLoadFile(FileInformation fileInof) throws RemoteException;    FileInformation downLoadFile(String filename) throws RemoteException ;          ( )实现远端接口    实现远端接口比较容易 跟其他接口的实现没有什么区别 如下所示         import java rmi Remote;  import java rmi RemoteException;    import java io IOException;  import java io File;  import java io BufferedInputStream;  import java io FileInputStream;  import java io BufferedOutputStream;  import java io FileOutputStream;  import java rmi server UnicastRemoteObject;    public class LoadFileService extends UnicastRemoteObject implements LoadFile     private String currentDir= null ;    // this contruction is needed      public LoadFileService() throws RemoteException      super();          public void setCurrentDir(String currentDir)      this currentDir = currentDir ;          public void upLoadFile(FileInformation fileInfo) throws RemoteException      BufferedOutputStream output = null ;        try        // check paramter        if(fileInfo == null )          throw new RemoteException( the paramter is null );                  //check fileName and content        String fileName = fileInfo getName() ;        byte [] content = fileInfo getContent() ;        if(fileName == null || content == null )          throw new RemoteException( the file or the content is null );                  //create file        String filePath = this currentDir + \\\\ + fileName ;        File  file = new File(filePath);        if(!file exists())          file createNewFile();                  //save the content to the file        output = new BufferedOutputStream(new FileOutputStream(file));        output write(content);        catch(RemoteException ex)        throw ex ;      catch(Exception ex)        throw new RemoteException(ex getLocalizedMessage());      finally        if(output != null )         try           output close();           output = null ;         catch(Exception ex)                                 public FileInformation downLoadFile(String fileName) throws RemoteException         FileInformation fileInfo = null ;      BufferedInputStream input = null ;        try        // check paramter        if(fileName == null)          throw new RemoteException( the paramter is null );                  // get path        String filePath = this currentDir + \\\\ + fileName ;        File  file = new File(filePath);        if(!file exists())          throw new RemoteException( the file whose name is + fileName + not existed );                  // get content        byte[] content = new byte[(int)file length()];        input = new BufferedInputStream(new FileInputStream(file));        input read(content);          // set file name and content to fileInfo        fileInfo = new FileInformationSev();        fileInfo setInformation(fileName content);        catch(RemoteException ex)        throw ex ;      catch(Exception ex)        throw new RemoteException(ex getLocalizedMessage());      finally        if(input != null )         try           input close();           input = null ;         catch(Exception ex)                             return fileInfo ;              编写服务端代码   服务端代码主要有 个步骤   ( )加载安全管理器  ( )创建一个服务对象  ( )将这个服务对象注册到命名服务上      import java rmi RMISecurityManager;  import java rmi Naming;    public class RMIServer    public static void main(String[] args)      try   //加载安全管理器        System setSecurityManager(new RMISecurityManager() );          //创建一个服务对象        LoadFileService server = new LoadFileService();        server setCurrentDir( c:\\\\rmiexample );                //将服务对象注册到rmi注册服务器上 而不是其他服务器  //(因为LoadFileService extends UnicastRemoteObject)        Naming rebind( // : /LoadFileServer server);     catch(Exception ex)       System out println(ex getLocalizedMessage());       ex printStackTrace();              注意 将对象注册以后 不可关闭服务对象     编写客户端代码   客户端代码需要两个步骤   ( )根据服务的名称 查找服务对象   ( )调用服务服务对象对应的方法完成工作  在这个例子中 我们从客户端上传一个文件到服务器 并将服务器的一个文件下载下来   代码如下    import java io IOExcep cha138/Article/program/Java/ky/201311/27945

相关参考

知识大全 JAVA RMI远程方法调用简单实例

JAVARMI远程方法调用简单实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  RMI的概念 

知识大全 在Jini,RMI和Applet中如何实现代码签名

在Jini,RMI和Applet中如何实现代码签名  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)

解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶

知识大全 asp添加数据代码

  这是一款简单的asp教程添加数据代码程序接受用户提交过来的数据再保存到数据库教程中很方便等的哦下面来看个详细的说明实例吧  举例如在字段名处输入:usernamepasswordemailtelp

知识大全 Mysql数据库错误代码中文详细说明

Mysql数据库错误代码中文详细说明  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在mysql

知识大全 关于webservice的异步调用实例

  关于webservice的异步调用简单实例无论在任何情况下被调用方的代码无论是被异步调用还是同步调用的情况下被调用方的代码都是一样的  下面我们就以异步调用一个webservice为例作说明这是一

相对动量指标说明

相对动量指标说明1、顶和低相对动量指标(RMI)通常在70以上到顶和在30以下到底(图中深蓝色箭头)。RMI通常先于随附的价格图表形成这些顶部和底部。2、形态相对动量指标(RMI)经常形成价格图中可能

知识大全 批量实现面向对象的实例代码

本文为大家详细介绍下面向对象的继承以及如何实现批量实现面向对象感兴趣的可以参考下哈希望对大家有所帮助 复制代码代码如下:cha138/Article/program/Java/JS

知识大全 滑动展开/收缩广告代码实例效果

功能说明:滑动展开/收缩广告效果可指定广告完全展开时的停留时间最大高度兼容浏览器IE+FF+Opera+实例代码<!doctype  public //WC//DT

知识大全 Java 发Post请求实例程序代码

Java发Post请求实例程序代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //说明使用j