Spring RMI (Spring 远程方法调用)【原】

所需jar包...?    不纠结,一股脑儿全导! 源码地址:http://pan.baidu.com/s/1jG8eOmy

先放结构图如下,客户端和服务端都在一个项目中.也可以把服务端的xxx导成jar包放到新的客户端项目中去.

其中绿色部分为服务器端代码, 红色部分为客户端代码.

现在是服务/客户端全整到一块去的项目,如果要把客户端独立出来,可以把绿色服务器端代码导成jar包放到单独的客户端项目中,用Client.java进行调用.

Client.java:                              客户端入口调用类

Car.java:                                 POJO类(C/S共用)

IKeyboard.java:                       RMI 接口类(C/S共用)

Keyboard.java:                        RMI实现类

IVehicle.java:                           RMI接口类(C/S共用)

Vehicl:                                    RMI实现类

remote-client-local.xml:             客户端spring配置文件

remote-servlet.xml:                  服务端spring配置文件 

1. 服务端 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>SpringRMI</display-name>
  <servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/remote-servlet.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

 

 remote-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <!-- 交通工具接口-->
    <bean id="vehicle" class="com.king.code.service.invoke.Vehicle"/>
    <bean name="/vehicle" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="vehicle" />
        <property name="serviceInterface" value="com.king.code.service.invoke.IVehicle" />
    </bean> 
    
    <!-- 键盘 接口-->
    <bean id="keyboard" class="com.king.code.service.invoke.Keyboard"/>
    <bean name="/keyboard" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="keyboard" />
        <property name="serviceInterface" value="com.king.code.service.invoke.IKeyboard" />
    </bean> 
</beans>

Car.java

package com.king.code.service.invoke;

import java.io.Serializable;

public class Car implements Serializable{
    /**
     * 车
     */
    private static final long serialVersionUID = 1883838732853579826L;
    
    String id="6";
    String model ="宝马M6";
    String speed ="320公里/小时";
    String result ="未检测";
    
    public Car() {
        super();
    }

    public Car(String id, String model, String speed, String result) {
        super();
        this.id = id;
        this.model = model;
        this.speed = speed;
        this.result = result;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getSpeed() {
        return speed;
    }

    public void setSpeed(String speed) {
        this.speed = speed;
    }

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    @Override
    public String toString() {
        return "Car [id=" + id + ", model=" + model + ", speed=" + speed
                + ", result=" + result + "]";
    }

    
    
}

 

IKeyboard.java

package com.king.code.service.invoke;
/**
 * 键盘服务接口
 * @author King
 *
 */
public interface IKeyboard {
    public String invoke(String    requestInfo );
}

 

Keyboard.java

package com.king.code.service.invoke;
/**
 * 键盘服务实现类
 * @author King
 *
 */
public class Keyboard implements IKeyboard {
    @Override    
    public String invoke(String requestInfo){
        System.out.println("press------");
        System.out.println(requestInfo);
        System.out.println("leave------");
        return "success";
    }
}

 

IVehicle.java

package com.king.code.service.invoke;

/**
 * 交通公具服务接口
 * @author King
 *
 */
public interface IVehicle {
    /**
     * 检测该车是否合格
     * @param car
     * @return
     */
    public Car detect(Car car );
}

 

Vehicle.java

package com.king.code.service.invoke;

/**
 * 交通公具服务实现类
 * @author King
 *
 */
public class Vehicle implements IVehicle {
    @Override    
    public Car detect(Car car){
        System.out.println("start detect------");
        System.out.println("该车信息"+car);
        car.setResult("99% is ok");
        System.out.println("end detect------");
        return car;
    }
    
}

 

2. 客户端

Client.java

package com.king.code.client.invoke;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.king.code.service.invoke.Car;
import com.king.code.service.invoke.IKeyboard;
import com.king.code.service.invoke.IVehicle;
/**
 * 客户端调用类
 * @author King
 *
 */
public class Client  {
    //读取配置文件
    static ApplicationContext context = new ClassPathXmlApplicationContext("remote-client-local.xml");
    
    public static void main(String[] args) {
        new Client().invokeKeyboard();
        new Client().invokeVehicle();
    }
    
    public  void invokeKeyboard()  {
        IKeyboard service = (IKeyboard) context.getBean("keyboard");
        String requestInfo = "i'm logitech keyboard,press twice";
        String responseInfo = service.invoke(requestInfo);
        System.out.println(responseInfo);
    }
    
    public  void invokeVehicle()  {
        IVehicle service = (IVehicle) context.getBean("vehicle");
        Car request = new Car();
        System.out.println("该车状态(检测前):"+request.getResult());
        Car response = service.detect(request);
        System.out.println("该车状态(检测后):"+response.getResult());
    }
    
    
}

remote-client-local.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

        <!-- 交通工具接口 -->
        <bean id="vehicle"
            class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
            <property name="serviceUrl">
                <value>http://localhost:8080/SpringRMI/vehicle</value>
            </property>
            <property name="serviceInterface">
                <value>com.king.code.service.invoke.IVehicle</value>
            </property>
        </bean>
        
        <!-- 键盘接口 -->
        <bean id="keyboard"
            class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
            <property name="serviceUrl">
                <value>http://localhost:8080/SpringRMI/keyboard</value>
            </property>
            <property name="serviceInterface">
                <value>com.king.code.service.invoke.IKeyboard</value>
            </property>
        </bean>
        
</beans>

 客户端打印:

success
该车状态(检测前):未检测
该车状态(检测后):99% is ok

服务端打印:

press------
i'm logitech keyboard,press twice
leave------
start detect------
该车信息Car [id=6, model=宝马M6, speed=320公里/小时, result=未检测]
end detect------

 

posted @ 2015-09-09 16:07  苦涩泪滴  阅读(474)  评论(0编辑  收藏  举报