📄 right9_3_4.htm
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td valign="top"> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF"> <tr> <td valign="top"> <p class="pt9-black"> <span class="zhongdian">1. 构造一个远程接口Hello:<a name="01"></a></span><br> <br> package hello; <br> public interface Hello extends java.rmi.Remote { <br> <font color="339900">//rmi应用程序必须继承自java.rmi.Remote</font><br> String sayHello() throws java.rmi.RemoteException ; <br> <font color="339900">//定义可以远程调用的接口</font><br> }<br> <br> <span class="zhongdian">2. 完成server方程序,定义HelloImpl类实现Hello接口:<a name="02"></a></span><br> <br> package hello;<br> import java.rmi.*;<br> import java.rmi.server.UnicastRemoteObject;<br> public class HelloImpl extends UnicastRemoteObject implements Hello <br> <font color="339900">//实现Hello接口</font><br> {<br> private String name;<br> public HelloImpl (String s ) throws java.rmi.RemoteException{<br> super(); <font color="339900">//调用父类的构造函数</font><br> name = s;<br> }<br> public String sayHello() throws RemoteException {<br> return "Hello world!"; <font color="339900">//实现Hello接口定义的方法</font><br> }<br> public static void main ( String args [])<br> {<br> System.setSecurityManager ( new RMISecurityManager() ); <br> <font color="339900">//设置RMI程序需要的安全策略</font><br> try<br> {<br> HelloImpl obj = new HelloImpl("HelloServer"); <br> <font color="339900">//生成一个HelloImpl的实例</font><br> Naming.rebind("HelloServer", obj); <br> <font color="339900">//将这个实例绑定到一个名字上</font><br> System.out.println("HelloImpl created and bound in the registry to the name HelloServer");<br> } catch (Exception e)<br> {<br> System.out.println("HelloImpl.main: an exception occured:");<br> e.printStackTrace(); <font color="339900">//产生异常的话,打印出出错信息</font><br> }<br> }<br> }<br> <br> server方生成一个远程对象并和一个可和客户对话的名称"HelloServer"绑定。Client端可以根据该名称寻找相应的远程对象,进而调用其远程方法。<br> <br> <span class="zhongdian">3. 完成client方程序<a name="03"></a></span><br> <br> package hello;<br> import java.rmi.*; public class HelloClient <br> {<br> public static void main(String args[])<br> {<br> System.setSecurityManager(new RMISecurityManager() ); <br> <font color="339900">//设置RMI需要的安全策略</font><br> try<br> {<br> Hello obj = (Hello) Naming.lookup("HelloServer"); <br> <font color="339900">//从服务端获得一个Hello的远程对象</font><br> String message = obj.sayHello(); <br> <font color="339900">//远程调用Hello的方法</font><br> System.out.println(message); <br> <font color="339900">//将输出结果打印</font><br> } catch (Exception e)<br> {<br> System.out.println("Hello client : an exception occured");<br> e.printStackTrace(); <font color="339900">//若有异常,输出异常信息</font><br> }<br> }<br> } <br> <br> client利用java.rmi包中的Naming类的lookup()方法获得远程对象obj,然后调用其远程方法sayHello()获得字符串"Hello World",并输出到屏幕上。<br> <br> 要运行这几个程序,还有一些工作要做,这几个程序的文件名为Hello.java、HelloImpl.java、HelloClient.java,它们都被放置在的的d:\hello目录下,在windows下,你需要在命令窗口中如此运行它们:<br> <br> 1. Set CLASSPATH = %CLASSPATH%;d:\<br> <br> 2. 在d:\hello下编译源代码:<br> javac -d .. *.java<br> <br> 3. 在生成端头和框架模块,首先把目录切换回d:\<br> rmic -d . hello.HelloImpl<br> <br> 4. 在d:\下运行RMI远程对象注册程序<br> start rmiregistry<br> <br> 5. 在d:\下运行服务器程序<br> java -Djava.security.policy=my.policy hello.HelloImpl<br> <br> 6. 在d:\下运行客户端程序<br> java -Djava.security.policy=my.policy hello.HelloClient<br> <br> <font color="000099">其中上面的步骤中5和6出现的my.policy是一个文件,这个文件和Java的安全机制有关,在这个程序中我们不需要安全限制,所以我们把权限设为都可以访问。my.policy如下:<br> grant {<br> permission java.security.AllPermission;<br> };<br> <br> 你一定要记得设置这个文件,否则RMI将出"拒绝访问"的错误。如果你想了解Java其他的安全机制,那么可以参考Java里有关security的资料。<br> <br> RMI属于Java高级技术的一种,通过本小节的学习,你应该已经对RMI有了一定的了解,分布式计算是一个很重要的技术,而Java在分布式计算方面有着很好的前景,以RMI为基础,Java将在分布式计算方面大有作为。<br> </font> </p> </td> </tr> </table> </td> </tr></table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -