array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Spring RMI (Spring 远程方法调用)【原】 - 爱码网

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

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

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

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

现在是服务/客户端全整到一块去的项目,如果要把客户端独立出来,可以把绿色服务器端代码导成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配置文件 

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 [> 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------

 

相关文章:

  • 2021-08-01
  • 2020-10-27
  • 2019-08-28
  • 2017-12-22
  • 2021-08-27
  • 2018-04-25
  • 2021-08-01
  • 2020-04-21
猜你喜欢
  • 2019-08-02
  • 2020-06-09
  • 2020-10-29
  • 2020-05-13
  • 2018-12-27
  • 2019-03-18
  • 2019-05-19
  • 2018-04-14
相关资源
相似解决方案