日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaRMI遠(yuǎn)程調(diào)用

這次是用java實(shí)現(xiàn)RMI 的遠(yuǎn)程調(diào)用:

創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10多年時間我們累計服務(wù)了上千家以及全國政企客戶,如成都汽車玻璃修復(fù)等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致表揚(yáng)。

編寫的過程大致為:

  1. 首先我們的啟動Mysqlserver ,然后再里面建立一個數(shù)據(jù)庫,以便我們在數(shù)據(jù)庫中插入存放學(xué)生信息等。
  2. 先編寫一個接口DataServer,并且繼承Remote類,然后再接口里面寫上服務(wù)器端能實(shí)現(xiàn)的方法,然后再定義一個類DataServerImpl 繼承UnicastRemoteObject 在實(shí)現(xiàn)接口DataServer,并且一一實(shí)現(xiàn)它定義在借口里面得到方法,這里我們重新寫了一個類DBManager,用來實(shí)現(xiàn)與數(shù)據(jù)庫的連接,包括插入數(shù)據(jù),根據(jù)學(xué)號、姓名等進(jìn)行查詢等操作,其源代碼見附件。
  3. 下面就是需要使用rmic命令進(jìn)行編譯DataServerImpl文件,并且產(chǎn)生兩個文件,產(chǎn)生這兩個文件后就可以編寫服務(wù)器端的代碼了,主要是在主函數(shù)中生成一個DataServerImpl對象,然后在綁定一個端口在程序中,在綁定一個url地址,來綁定服務(wù)的對象,這樣服務(wù)器端的程序就寫好了。
  4. 下面就是寫客戶端的代碼了。
  5. 首先是通過Naming.lookup(url),(url)就是服務(wù)器端指定的url地址這樣就可以得到一個DataServer的對象,然后得到這樣一個對象后就可以調(diào)用它的方法了。這樣也就實(shí)現(xiàn)了調(diào)用遠(yuǎn)程服務(wù)器端的代碼了,所以說這樣RMI就比本上寫完了。

首先是編寫遠(yuǎn)程的接口調(diào)用函數(shù):

 
 
 
  1. import java.rmi.Remote;
  2. import java.rmi.RemoteException;
  3. public interface DataServer extends Remote {
  4.     public void CreateTable() throws RemoteException;
  5.     public void insert(int id ,String name,double Score) throws RemoteException;
  6.     public double select(int id)throws RemoteException;
  7.     public double select (String name)throws RemoteException;
  8. }

由于代碼中使用到了與數(shù)據(jù)庫的連接,所以寫了一個數(shù)據(jù)庫的管理類,代碼如下:

 
 
 
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. public class DBManager {
  6.     private static String user = "root";
  7.     private static String pass = "123456";
  8.     private static String className ="com.mysql.jdbc.Driver";
  9.     private static String url = "jdbc:mysql://localhost:3306/students";
  10.     private static Connection conn;
  11.     private static java.sql.Statement state;
  12.     public static void init()
  13.     {
  14.         try {
  15.             Class.forName(className);
  16.              conn = DriverManager.getConnection(url,user,pass);
  17.              state =conn.createStatement();
  18.              
  19.              
  20.         } catch (ClassNotFoundException e) {
  21.             // TODO Auto-generated catch block
  22.             e.printStackTrace();
  23.         } catch (SQLException e) {
  24.             // TODO Auto-generated catch block
  25.             e.printStackTrace();
  26.         }
  27.     }
  28.     public static  void CreateTable(){
  29.         String sql = "create table student (id int Primary key, name char (20),score double);";
  30.         try {
  31.             state.execute(sql);
  32.     
  33.         } catch (SQLException e) {
  34.             e.printStackTrace();
  35.         }
  36.     }
  37.     public static void insert(int id,String name,double score)
  38.     {
  39.         String sql = "insert into student values("+id+",'"+name+"',"+score+");";
  40.         try {
  41.             state.execute(sql);
  42.             
  43.         } catch (SQLException e) {
  44.             // TODO Auto-generated catch block
  45.             e.printStackTrace();
  46.         }
  47.     }
  48.     public static double select(int id)
  49.     {
  50.         String sql  = "select score from student where id = "+id+";";
  51.         double result= 0;
  52.         try {
  53.             ResultSet rs = state.executeQuery(sql);
  54.             while(rs.next())
  55.             {
  56.                  result = rs.getDouble("score");
  57.             }
  58.             
  59.         } catch (SQLException e) {
  60.             // TODO Auto-generated catch block
  61.             e.printStackTrace();
  62.         }
  63.         return result;
  64.     }
  65.     
  66.     public static double select(String name)
  67.     {
  68.         String sql  = "select score from student where name = '"+name+"';";
  69.         double result= 0;
  70.         try {
  71.             ResultSet rs = state.executeQuery(sql);
  72.             while(rs.next())
  73.             {
  74.                  result = rs.getDouble("score");
  75.             }
  76.         
  77.         } catch (SQLException e) {
  78.             // TODO Auto-generated catch block
  79.             e.printStackTrace();
  80.         }
  81.         return result;
  82.     }
  83. }

下面就是編寫實(shí)現(xiàn)類,要繼承UnicastRemoteObject,并且實(shí)現(xiàn)上面定義的接口。

 
 
 
  1. import java.rmi.RemoteException;
  2. import java.rmi.server.UnicastRemoteObject;
  3. public class DataServerImpl extends UnicastRemoteObject implements DataServer {
  4.     static  {
  5.         DBManager.init();
  6.     }
  7.     public DataServerImpl() throws RemoteException {
  8.         super();
  9.         
  10.         // TODO Auto-generated constructor stub
  11.     }
  12.     
  13.     @Override
  14.     public void CreateTable() throws RemoteException {
  15.         DBManager.CreateTable();
  16.     }
  17.     @Override
  18.     public void insert(int id, String name, double score)
  19.             throws RemoteException {
  20.         DBManager.insert(id, name, score);
  21.     }
  22.     @Override
  23.     public double select(int id) throws RemoteException {
  24.         // TODO Auto-generated method stub
  25.         double score = DBManager.select(id);
  26.         return score;
  27.     }
  28.     @Override
  29.     public double select(String name) throws RemoteException {
  30.         double score = DBManager.select(name);
  31.         return score;
  32.     }
  33. }

這樣就基本上完成了,然后就是編寫服務(wù)端的代碼:

 
 
 
  1. import java.net.MalformedURLException;
  2. import java.rmi.Naming;
  3. import java.rmi.RemoteException;
  4. import java.rmi.registry.LocateRegistry;
  5. public class RMIServer {
  6.     public static void main(String[] args) {
  7.         try {
  8.             DataServerImpl dataServer = new DataServerImpl();
  9.             LocateRegistry.createRegistry(1111);   //這里,服務(wù)端口號可任意指定
  10.             
  11.             Naming.rebind("http://localhost:1111/showScore", dataServer);
  12.             System.out.println("服務(wù)已經(jīng)啟動。。");
  13.             
  14.         } catch (RemoteException e) {
  15.             // TODO Auto-generated catch block
  16.             e.printStackTrace();
  17.         } catch (MalformedURLException e) {
  18.             // TODO Auto-generated catch block
  19.             e.printStackTrace();
  20.         }
  21.     }
  22. }

使用命令空間綁定服務(wù)的地址,以及服務(wù)的名稱,以便客戶端實(shí)現(xiàn)遠(yuǎn)程調(diào)用??蛻舳说拇a如下:

 
 
 
  1. import java.net.MalformedURLException;
  2. import java.rmi.Naming;
  3. import java.rmi.NotBoundException;
  4. import java.rmi.RemoteException;
  5. import java.util.Scanner;
  6. public class RMIClient {
  7.     public static void main(String[] args) {
  8.         Scanner sc = new Scanner(System.in);
  9.         try {
  10.             DataServer dataServer = (DataServer)Naming.lookup("http://localhost:1111/showScore");
  11.             System.out.println("首先創(chuàng)建一個數(shù)據(jù)表,student");
  12.             dataServer.CreateTable();
  13.             System.out.println("創(chuàng)建成功。。");
  14.             boolean isrunning = true;
  15.             while(isrunning)
  16.             {
  17.                 System.out.println("請您按照數(shù)字選擇操作。\n1.插入數(shù)據(jù)   2.按學(xué)號查找    3.按姓名查找   0.退出");
  18.                 int select = sc.nextInt();
  19.                 if(select == 1)
  20.                 {
  21.                     System.out.println("請您依次輸入學(xué)生的學(xué)號、姓名、成績:");
  22.                     int num = sc.nextInt();
  23.                     String name = sc.next();
  24.                     double score = sc.nextDouble();
  25.                     dataServer.insert(num, name, score);
  26.                 }
  27.                 else if(select == 2)
  28.                 {
  29.                     System.out.println("請您輸入學(xué)生的學(xué)號:");
  30.                     int num = sc.nextInt();
  31.                     double score = dataServer.select(num);
  32.                     System.out.println("學(xué)號: "+num +"   成績?yōu)椋?nbsp;"+ score);
  33.                 }
  34.                 else if(select == 3)
  35.                 {
  36.                     System.out.println("請您輸入學(xué)生的姓名:");
  37.                     String name  = sc.next();
  38.                     double score = dataServer.select(name);
  39.                     System.out.println("姓名:  "+name +"   成績?yōu)椋?nbsp;"+ score);
  40.                 }
  41.                 else if(select == 0)
  42.                 {
  43.                     isrunning = false;
  44.                 }
  45.                 else 
  46.                 {
  47.                     System.out.println("輸入有誤,請您重新輸入!");
  48.                 }
  49.             }
  50.         } catch (MalformedURLException e) {
  51.             // TODO Auto-generated catch block
  52.             e.printStackTrace();
  53.         } catch (RemoteException e) {
  54.             // TODO Auto-generated catch block
  55.             e.printStackTrace();
  56.         } catch (NotBoundException e) {
  57.             // TODO Auto-generated catch block
  58.             e.printStackTrace();
  59.         }
  60.     }
  61. }

這樣就基本上的完成了所有的工作。。。


文章標(biāo)題:JavaRMI遠(yuǎn)程調(diào)用
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdedsdg.html