所需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------

Spring RMI (Spring 远程方法调用)【原】的更多相关文章

  1. Spring RMI (Spring 远程方法调用)

    所需jar包...?    不纠结,一股脑儿全导! 源码地址:http://pan.baidu.com/s/1jG8eOmy 先放结构图如下,客户端和服务端都在一个项目中.也可以把服务端的xxx导成j ...

  2. spring/spring boot/spring cloud开发总结

    背景        针对RPC远程调用,都在使用dubbo.dubbox等,我们也是如此.由于社区暂停维护.应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring ...

  3. 256.Spring Boot+Spring Security: MD5是加密算法吗?

    说明 (1)JDK版本:1.8 (2)Spring Boot 2.0.6 (3)Spring Security 5.0.9 (4)Spring Data JPA 2.0.11.RELEASE (5)h ...

  4. Java bean与Spring、Spring MVC关系

    Java Bean Java语言欠缺属性.事件.多重继承功能.所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码.Java Bean正是编写这套胶水代码的惯用模式或约定. ...

  5. SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)

    之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...

  6. ssm(spring,spring mvc,mybatis)框架

    ssm框架各个技术的职责 spring :spring是一个IOC DI AOP的 容器类框架 spring mvc:spring mvc 是一个mvc框架 mybatis:是一个orm的持久层框架 ...

  7. 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)

    Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...

  8. 深入分析Spring 与 Spring MVC容器

    1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...

  9. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

随机推荐

  1. From CORBA technology To Thrift technology

    技术在变,需求不变,把复杂的事情搞简单,而不是相反. 无论CORBA还是Thrift,目标只有一个:一处定义,多处使用,解决的问题只有一个:规范和简化客户端与服务器的通信的开发工作. 是不是和java ...

  2. ThreadPoolExecutor使用详解

    ThreadPoolExecutor机制  一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线 ...

  3. Qt__输入对话框(QInputDialog)

    #include <QInputDialog> ...... bool isOK; QString text = QInputDialog::getText(NULL, "Inp ...

  4. Personal Software Process (PSP)

    日期 分类 开始时间 结束时间 中断时间 净时间 活动 备注 C U 2016/03/15 随笔 9:30 10:40 0 70 博客更新 更新<软件项目管理(1)> Y Minute 随 ...

  5. Lodop打印控件里SET_PRINT_STYLE和SET_PRINT_STYLEA

    LODOP.SET_PRINT_STYLE 对该语句后面的打印项样式设置效果.LODOP.SET_PRINT_STYLEA 针对第一个参数设置的打印项样式设置效果.这两个语句,作用范围不同. 在设置字 ...

  6. jenkins--svn+Email自动触发2(jenkins系统配置)

    jenkins系统配置-SonarQube servers配置: 邮件通知设置: 邮件调试问题: 在 系统设置 --> Extended E-mail Notification: 找到 Enab ...

  7. ELK--filebeat nginx模块

    Nginx模块 该nginx模块解析由Nginx HTTP服务器创建的访问和错误日​​志 . 当你运行这个模块的时候,它会执行一些任务: 设置日志文件的默认路径(但不用担心,可以覆盖默认值) 确保每个 ...

  8. JavaScript--XML DOM 总结

    XML DOM 2018-09-04 XML简介 1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML ...

  9. easyui 功能介绍

    最近使用easyui, 下面,我介绍下常用功能: //绑定Product总类型 $('#gdv_ProductParentType').datagrid({ url: '../api/BindData ...

  10. 【POJ 3176】Cow Bowling(DP)

    题 Description The cows don't use actual bowling balls when they go bowling. They each take a number ...