知识大全 一个相当经典的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相关参考
JAVARMI远程方法调用简单实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! RMI的概念
知识大全 在Jini,RMI和Applet中如何实现代码签名
在Jini,RMI和Applet中如何实现代码签名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶
这是一款简单的asp教程添加数据代码程序接受用户提交过来的数据再保存到数据库教程中很方便等的哦下面来看个详细的说明实例吧 举例如在字段名处输入:usernamepasswordemailtelp
Mysql数据库错误代码中文详细说明 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在mysql
关于webservice的异步调用简单实例无论在任何情况下被调用方的代码无论是被异步调用还是同步调用的情况下被调用方的代码都是一样的 下面我们就以异步调用一个webservice为例作说明这是一
相对动量指标说明1、顶和低相对动量指标(RMI)通常在70以上到顶和在30以下到底(图中深蓝色箭头)。RMI通常先于随附的价格图表形成这些顶部和底部。2、形态相对动量指标(RMI)经常形成价格图中可能
本文为大家详细介绍下面向对象的继承以及如何实现批量实现面向对象感兴趣的可以参考下哈希望对大家有所帮助 复制代码代码如下:cha138/Article/program/Java/JS
功能说明:滑动展开/收缩广告效果可指定广告完全展开时的停留时间最大高度兼容浏览器IE+FF+Opera+实例代码<!doctype public //WC//DT
Java发Post请求实例程序代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! //说明使用j