前段时间公司做web service的时候看了一下资料当时看见一个叫rmi的东西(远程方法调用)最近闲着所以看了一下 感觉挺简单的!所以写了一个例子提供给大家把!
rmi的服务端必须要使用接口同时还有接口的实现类!所以下面的两个文件是接口类和接口的实现类!
UserDao 接口
/** * 远程接口 必须继承与Remote对象* @author spring sky * date 年月日 * Email * QQ */ public interface UserDao extends Remote{ /** * 简单的测试方法* @param name */ public void sayName(String name) throws RemoteException} UserDaoImpl实现类
/** * * 接口的实现类 必须继承UnicastRemoteObject(单一远程对象) 实现UserDao自己的接口* @author spring sky * date 年月日 * Email * QQ */ public class UserDaoImpl extends UnicastRemoteObject implements UserDao { public UserDaoImpl() throws RemoteException { } @Override public void sayName(String name) { if(name!=null&&!nameequals())
{ Systemoutprintln(我的名字是+name)}else{ Systemerrprintln(名字不为空……)}对外的提供一个服务服务中已经共享了url给外界访问
/** * 使用main方法启动一个服务用于外界环境访问* @author spring sky * date年月日 * Email * QQ */ public class StartService { private static final String IP = private static final int PORT = private static final String REMOTE_NAME = userDaoprivate static final String REMOTE_URL = rmi://+IP++PORT+/+REMOTE_NAMEpublic static void main(String[] args) { try { UserDao userDao = new UserDaoImpl() //实例化对象LocateRegistrycreateRegistry(PORT) //注册端口Namingbind(REMOTE_URL userDao) //绑定远程服务对象Systemoutprintln(远程+REMOTE_NAME+启动成功……)} catch (RemoteException e) { Systemerrprintln(远程对象出错)eprintStackTrace()} catch (MalformedURLException e) { Systemerrprintln(URL出错了)eprintStackTrace()} catch (AlreadyBoundException e) { Systemerrprintln(绑定的对象已经存在了)eprintStackTrace()}
上面是服务端的代码如果启动没有任何问题就可以做客户端访问了其实客户端的访问更加的简单只需要远程的接口类和查询rmi中的url就可以了!
代码如下
/** * 远程方法调用测试* @author spring sky * date年月日 * Email * QQ * name石明政*/ public class TestRemote { public static void main(String[] args) { try { //在rmi服务中查询userdao的对象UserDao userDao = (UserDao) Naminglookup(rmi:///userDao)//调用远程服务的方法userDaosayName(spring sky)} catch (MalformedURLException e) { Systemerrprintln(URL出错)eprintStackTrace()} catch (RemoteException e) { Systemerrprintln(远程对象出错)eprintStackTrace()} catch (NotBoundException e) { Systemerrprintln(没有找到绑定的对象)eprintStackTrace()}