rmi简单应用

做完实验,来个小结。

【实验原理和步骤】
1. 定义学生成绩查询或教师信息查询的远程接口
2.
实现服务器端软件(程序):设计远程接口的实现类和服务器对象类,在服务器
上启动目录服务,并注册远程对象,供客户端访问。远程接口的实现类要从本地读取
数据信息(成绩或教师信息),数据信息可以存储在文件或数据库中。
3.
实现客户端软件(程序):实现访问远程对象的客户程序。

【方案设计】
1)编写 RMI 中的接口 public interface GetScoreInterface extends
Remote;
2)编写接口实现方案 public class GetScoreImpl extends UnicastRemoteObject
implements
GetScoreInterface,在此类中,完成对数据库的访问,获得需要的信息,并返回给客户端;
3)编写服务器端程序
public class rmi_server;
4)编写客户端程序 public class rmi_client;
5)用 rmic 命令生成
stub 文件后,对程序进行运行调试。

【实验环境】
ubuntu 12.04
java version "1.7.0_17"
mysql Ver 14.14 Distrib
5.5.37, for debian-linux-gnu (i686) using readline 6.2
Eclipse Platform
Version: 4.2.1

上面是从实验报告中直接复制粘贴过来的,下面说一些小细节:

1)RMI网络编程提供了各种接口,调用一套函数完后,就算写完了,真是清晰明了啊~

2)程序运行有一套安全机制,具体的我没深究=。=还有一堆实验要写。。。女神原谅我现在犯个懒先吧。。。

3)没了=。=下面给源码

interface GetScoreInterface extends Remote:


import java.rmi.*;
import java.sql.SQLException;

/**
* This remote method return the students score
* @author Alex <[email protected]>
*
*/

public interface GetScoreInterface extends Remote{

public String getScore(String sno)throws RemoteException,SQLException;
}

class GetScoreImpl extends UnicastRemoteObject implements
GetScoreInterface:


import java.rmi.*;
import java.rmi.server.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* This class implement the interface GetScoreInterface
* @author Alex <[email protected]>
*
*/
public class GetScoreImpl extends UnicastRemoteObject implements GetScoreInterface{

String url="jdbc:mysql://localhost:3306/db_exam?&setUnicode=true&characterEncoding=utf-8";
String driver="com.mysql.jdbc.Driver";
Connection con=null;
private String usr="exam_admin";
private String psw="qaz123";
public GetScoreImpl() throws RemoteException{
super();
}

/**
* Implement the interface abstract method getScore
*/
public String getScore(String sno)throws RemoteException,SQLException{
String scores="";
String sql=new String("select exam_name,mark from designs natural join marks where sno="+sno+";");
ResultSet rs=null;
try{
Class.forName(driver);
con=DriverManager.getConnection(url , usr, psw);
Statement st=con.createStatement();
rs=st.executeQuery(sql);

while(rs.next()){
//System.out.print(rs.getString(1)+"\t"+rs.getString(2));
scores+=rs.getString(1)+"\t"+rs.getString(2)+"\n";
}

}catch(SQLException e){
System.out.print("Exception in GetScoreImpl"+e.getMessage());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return scores;
}/*
public static void main(String[] a) throws RemoteException, SQLException{
GetScoreImpl aaa=new GetScoreImpl();
String kkk=aaa.getScore("20110012");
System.out.print(kkk);

}*/
}


View
Code

rmi_client:


import java.io.*;
import java.rmi.*;
/**
* License: GPL
* Description: RMI client which request the scores of the student whose number was given
* @author Alex <[email protected]>
*
*/

public class rmi_client {

public static void main(String[] args){
try{
int RMIPort;
//String hostname;
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
//System.out.println("Enter the host name");
//hostname=br.readLine();
System.out.println("Enter the port number");
RMIPort=Integer.parseInt(br.readLine().trim());
String registryURL="rmi://localhost:"+RMIPort+"/GetScore";
GetScoreInterface kkk=(GetScoreInterface)Naming.lookup(registryURL);
System.out.println("Look up completed");
System.out.println("Enter the student number of which you want to check marks");
String sno=br.readLine().trim();
String score=kkk.getScore(sno);
System.out.println(score);

}catch(Exception e){
System.out.println("Exception in rmi_client main: "+e.getMessage());
}
}
}

rmi_server:


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

/**
* License: GPL
* Description: RMI server which returns the scores of the student whose number was given
* @author Alex <[email protected]>
*
*/

public class rmi_server {
public static void main(String[] args){
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
String registryURL;
int portNum;
try{
System.out.println("Enter RMIregistry porn number:");
portNum=Integer.parseInt((br.readLine()).trim());
registryURL="rmi://localhost:"+new Integer(portNum).toString()+"/GetScore";
register(registryURL,portNum);
GetScoreImpl exportedObj=new GetScoreImpl();
Naming.rebind(registryURL, exportedObj);
System.out.println("GetSocre server ready");
}catch(Exception e){
System.out.println("Exception in rmi_server main:"+e.getMessage());
}

}

/**
* This method register a RMI local host
*/
public static void register(String registryURL,int RMIPortNum)throws RemoteException, MalformedURLException{
try{
Registry registry=LocateRegistry.getRegistry(RMIPortNum);
registry.list();

}catch(RemoteException e){
System.out.println("RMI registry cannot be located port "+RMIPortNum);
LocateRegistry.createRegistry(RMIPortNum);
System.out.println("RMI registry created at port "+RMIPortNum);
}
try{
System.out.println("Registry"+registryURL+" contains:");
for(String name:Naming.list(registryURL))
System.out.println(name);
}
catch(MalformedURLException e){
System.out.println("Exception in rmi_server register,MalformedURLException"+e.getMessage());
}
}

}

p个小s: 用rmic生成stub文件,在这里是rmic GetScoreImpl (后面不加后缀了)

打完收工=。=接着写下一个实验。。。

时间: 2024-09-14 21:19:00

rmi简单应用的相关文章

RMI简单实现

在学习EJB的时候,了解了RMI,EJB白话:把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是打包放到一个服务器上. 下面这位博主关于EJB是什么写的很详细. https://www.cnblogs.com/strugglion/p/6027318.html 本篇重点是简单实现RMI. RMI简单实现: 1 创建远程接口,继承Remote接口: 远程接口中声明了可以被客户端访问的远程方法,远程接口应符合以下条件: (1)直接或间接继承java.rmi.Remote接口: (

rmi简单案例

RMI即远程方法调用,案例步骤 创建对外接口 继承Remote类 创建其实现类 实现类需继承UnicastRemoteObject类并实现其接口 服务端:注册服务端口,并通过rmi链接进行绑定 1)创建接口对象 2)通过LocalRegistry.createRegisty(port);注册端口服务 3)通过Naming.bing("rmi连接字符串",接口对象); 客户端:查找服务并执行 Naming.lookup("rmi连接串")返回其相应的接口对象; pub

rmi简单用例,简单有效

Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方法调用的任何对象必须实现该远程接口.使用spring对RMI的支持,可以非常容易地构建分布式应用.这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑.

java RMI入门指南

感觉这篇文章不错,直接转了 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体如今它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方式之中的一个.事实上它能够被看作是RPC的Java版本号.可是传统RPC并不能非常好地应用于分布式对象系统.而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信.实现远程对象之间的无缝远程调用. RMI眼下使用Java远程消息交换协议JRMP

Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例

RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.其实它可以被看作是RPC的Java版本.但是传统RPC并不能很好地应用于分布式对象系统.而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用. RMI目前使用Java远程消息交换协议JRMP(Java Remot

JAVA RMI远程方法调用简单实例[转]

RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据.RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径.在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对 象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote

rmi经典实例---远程调用简单实现方式

Java RMI之HelloWorld篇 Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方法调用的任何对象必须实现该远程接口. Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术. 大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi. 在大力鼓吹Web Serv

RPC、RMI、SOAP、WebService、Corba、COM等协议简单说明

近来系统学习了一下java分布式对象计算技术,这里做一个简单的总结: 一.RPC协议 1.JSON-RPC规范:http://json-rpc.org/wiki/specification 2.XML-RPC规范:http://www.xmlrpc.com/spec RPC协议支持xml和json两种格式的消息,使用http作为其传输协议. 参考:http://kingquake21.iteye.com/blog/1033471 二.RMI协议 RMI使用JRMP作为消息,从上图可以看出,RMI

java rmi的一个简单实例

参考网站  http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html 实体类PersonEntity package net.cs30.rmi; import java.io.Serializable; /** * Created by caochenghua on 2017/4/4. */ public class PersonEntity implements Serializable { private int id;