博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java项目中rmi远程调用实例
阅读量:5132 次
发布时间:2019-06-13

本文共 5279 字,大约阅读时间需要 17 分钟。

1.创建一个学生实体类Student.java:

package com.RMIdemo.entity;@SuppressWarnings("serial")public class Student implements java.io.Serializable{	private int id;	private String name;		public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public Student(int id, String name) {		super();		this.id = id;		this.name = name;	}	@Override	public String toString() {		return "Student [id=" + id + ", name=" + name + "]";	}	public Student() {		super();	}	}

 2.创建一个远程接口StudentDao.java,由于是远程接口所以需要继承 Remote:

package com.RMIdemo.dao;import java.rmi.Remote;import java.rmi.RemoteException;//此为远程对象调用的接口,必须继承Remote类public interface StudentDao extends Remote{		//获取所有学生信息	public String getStudentList()throws RemoteException;}

 3.实现这个接口StudentDaoImpl.java,这个实现类需要继承UnicastRemoteObject:

package com.RMIdemo.daoImpl;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.RMIdemo.dao.DBConnUtil;import com.RMIdemo.dao.StudentDao;import com.RMIdemo.entity.Student;@SuppressWarnings("serial")public class StudentDaoImpl extends UnicastRemoteObject implements StudentDao {	public StudentDaoImpl() throws RemoteException {		super();	}	public String getStudentList() throws RemoteException {		List
list = new ArrayList
(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from student"; conn = DBConnUtil.getConn(); int i = 1; try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { Student stu = new Student(); stu.setId(rs.getInt("id")); stu.setName(rs.getString("name")); list.add(stu); } } catch (SQLException e) { e.printStackTrace(); } finally { DBConnUtil.closeAll(rs, ps, conn); } net.sf.json.JSONArray json = net.sf.json.JSONArray.fromObject(list); return json.toString(); }}

 4.连接数据库时用的是JDBC所以需要建立DBConnUtil.java这个连接数据库的工具类:

package com.RMIdemo.daoImpl;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.RMIdemo.dao.DBConnUtil;import com.RMIdemo.dao.StudentDao;import com.RMIdemo.entity.Student;@SuppressWarnings("serial")public class StudentDaoImpl extends UnicastRemoteObject implements StudentDao {	public StudentDaoImpl() throws RemoteException {		super();	}	public String getStudentList() throws RemoteException {		List
list = new ArrayList
(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from student"; conn = DBConnUtil.getConn(); int i = 1; try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { Student stu = new Student(); stu.setId(rs.getInt("id")); stu.setName(rs.getString("name")); list.add(stu); } } catch (SQLException e) { e.printStackTrace(); } finally { DBConnUtil.closeAll(rs, ps, conn); } net.sf.json.JSONArray json = net.sf.json.JSONArray.fromObject(list); return json.toString(); }}

 5.这是连接数据库的配置文件database.properties

6.创建服务端StudenServer.java:

package com.RMIdemo.rmi;import java.rmi.Naming;import java.rmi.registry.LocateRegistry;import com.RMIdemo.dao.StudentDao;import com.RMIdemo.daoImpl.StudentDaoImpl;public class StudentServer {	/**	 * 启动 RMI 注册服务并进行对象注册	 */	public static void main(String[] argv) {		try {			// 启动RMI注册服务,指定端口为1099 (1099为默认端口)			// 也可以通过命令 $java_home/bin/rmiregistry 1099启动			// 这里用这种方式避免了再打开一个DOS窗口			// 而且用命令rmiregistry启动注册服务还必须事先用RMIC生成一个stub类为它所用			LocateRegistry.createRegistry(1099);			// 创建远程对象的一个或多个实例,下面是stu对象			// 可以用不同名字注册不同的实例			// 把hello注册到RMI注册服务器上,命名为stu;注意:此处如果用的是Spring框架的话我们需要先加载Spring的配置文件			StudentDao stu=new StudentDaoImpl();			Naming.rebind("stu", stu);			// 如果要把stu实例注册到另一台启动了RMI注册服务的机器上			// Naming.rebind("//机器IP地址:1099/stu",stu);			System.out.println("服务器已启动!");		} catch (Exception e) {			System.out.println("服务器启动失败: " + e);		}	}}

 7.建立客户端StudentClient.java:

package com.RMIdemo.rmi;import java.rmi.Naming;import javax.servlet.http.HttpServletRequest;import com.RMIdemo.dao.StudentDao;import com.RMIdemo.util.jsonpUtil;     public class StudentClient    {       /**       * 查找远程对象并调用远程方法       */      public static void main(String[] argv)       {          try         {             StudentDao stu = (StudentDao) Naming.lookup("stu");                      //如果要从另一台启动了RMI注册服务的机器上查找hello实例             //StudentDao stu = (StudentDao) Naming.lookup("//192.168.1.21:1099/stu");                         //调用远程方法 JDBC连接数据库方式            jsonpUtil jsonp=new jsonpUtil();         String callBack=jsonp.returnJsonp2(stu.getStudentList());         System.out.println(callBack);      }          catch (Exception e)          {             System.out.println("服务器异常: " + e);          }       }    }

 下面是我们先运行服务端代码:

这个时候就证明服务端成功启动!

接着运行客户端代码:

此时如果我们看到控制台有服务器返回的数据就代表我们大功告成了!

转载于:https://www.cnblogs.com/2016-10-07/p/6825600.html

你可能感兴趣的文章
【LeetCode】345. Reverse Vowels of a String 解题小结
查看>>
InstallShield安装过程介绍
查看>>
个人总结
查看>>
Git显示漂亮日志的小技巧
查看>>
Vue v-on v-model 组合使用
查看>>
Python正则表达式练习
查看>>
java OO
查看>>
H5活动页开发有关
查看>>
IOS调试使用技巧
查看>>
JAVA之多线程概念及其几种实现方法优劣分析
查看>>
Django之modelform
查看>>
4.3
查看>>
python3.6+selenium_发送邮件(包含自动生成的测试报告)
查看>>
Druid连接池(一)
查看>>
View的事件处理流程
查看>>
软链接和硬链接
查看>>
关于configure: error: no acceptable C compiler found in $PATH
查看>>
WebComponent魔法堂:深究Custom Element 之 从过去看现在
查看>>
CSharpGL(53)漫反射辐照度
查看>>
ElasticSearch客户端注解使用介绍
查看>>