//***************************************** //* 用RMI實現J2EE分佈試應用之試驗手記 //* 試驗人:火火火 //* EMAIL :jun_bai@sohu.com //* 試驗時間:2001/12/22 下午 于虎門大板地 //***************************************** //远程方法调用(RMI)机制可以把面向对象的思想进一步扩展,因为你可以调用 //的对象不仅可以在本机上,也可以在别的主机上。本文就简单介绍rmi的编程方法。 //下面就通过一个例子来说明编写的过程。 // //*1.编写服务器的接口:这一步是最主要的部分,因为接口是连接客户机 //*与服务器的关键部分。在这个例子中,接口很简单,代码如下:Rem.java //************************************************************************ //*Rem.java //************ import java.rmi.*; public interface Rem extends Remote { public String getMessage() throws RemoteException; public String getAuthor() throws RemoteException; } //************************************************************************
//************************************* //*2.编写服务器对象:RemServer.java //************************************************************************ //*RemServer.java //**************** import java.rmi.*; import java.net.*; public class RemServer { public static void main(String[] args) { try { RemImpl localObject = new RemImpl(); Naming.rebind("rmi://localhost/Rem",localObject); }catch(RemoteException re) { System.out.println("RemoteException:"+re); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException:"+mfe); } } } //************************************************************************
//************************************* //*3.编写创建服务器对象的服务器程序:RemImpl.java //************************************************************************ //*RemImpl.java //************ import java.rmi.*; import java.rmi.server.*; public class RemImpl extends UnicastRemoteObject implements Rem { public RemImpl() throws RemoteException { } public String getMessage() throws RemoteException { return "Here is a remote message."; } public String getAuthor() throws RemoteException { return "fancy."; } }
//************************************************************************
//************************************* //*4.编写客户端代码:RemClient.java //************************************************************************ //*RemClient.java //************ import java.rmi.* ; import java.net.* ; import java.io.*;
public class RemClient { public static void main(String[] args) { try { String host =(args.length>0)?args[0]:"192.1.1.23"; //改為你的RMI遠程務器的IP地址. Rem remObject=(Rem)Naming.lookup("rmi://"+ host +"/Rem"); System.out.println(remObject.getMessage()+"<br>"); System.out.println(remObject.getAuthor()); } catch(RemoteException re) { System.out.println("RemoteException:" + re); } catch(NotBoundException nbe) { System.out.println("NotBoundException:" + nbe); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException:" + mfe); } } } //************************************************************************
//************************************* //*5.编写JSP客户端代码:Rem.jsp //************************************************************************ //*Rem.jsp //************
<%@ page import="java.rmi.*" %> <%@ page import="java.net.*" %> <%@ page import="java.io.*"%> <%@ page import="Rem"%>
<% try{ String host ="192.1.1.23" ;//改為你的RMI遠程務器的IP地址. Rem remObject=(Rem)Naming.lookup("rmi://"+ host +"/Rem"); out.println(remObject.getMessage()+"<br>"); out.println(remObject.getMessage()); } catch(RemoteException re) { out.println("RemoteException:" + re); } catch(NotBoundException nbe) { out.println("NotBoundException:" + nbe); } catch(MalformedURLException mfe) { out.println("MalformedURLException:" + mfe); } %> //************************************************************************
/* //************************************************************************ 步驟說明:(假設你的JDK安裝在C:\jdk1.3.0_01下) 1.編譯javac_RemSverver.bat服務器端代码 c:\> C:\jdk1.3.0_01\bin\javac RemServer.java 2.編譯RemImpl.java编写创建服务器对象的服务器程序 c:\> C:\jdk1.3.0_01\bin\rmic RemImpl 將會自動產生RemImpl_Skel.class,RemImpl_Stub.class兩個文件. 3.运行rmiregistry程序,启动注册系统,使得服务器可以注册在机器上,以供客户调用。 c:\> start C:\jdk1.3.0_01\bin\rmiregistry 4.編譯javac_RemClient.bat客戶端代码 c:\> C:\jdk1.3.0_01\bin\javac RemClient.java 5.运行服务器程序RemServer.class c:\> start C:\jdk1.3.0_01\bin\java RemServer 6.运行客戶程序RemClient.class c:\> C:\jdk1.3.0_01\bin\java RemClient 在DOS可以看到結果: Here is a remote message. fancy. 7.运行JSP客戶程序Rem.jsp 要將Rem.class,RemImpl_Stub.class兩個文件拷貝到Rem.jsp客戶端的classpass(WEB-INFO) 下,確保可以被Rem.jsp找到. 在IE可以看到結果: Here is a remote message. fancy.
全文完.
參考書籍: 編程高手成長之路6---JSP高級編程第4章2小節 ; //************************************************************************ */
|