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------
Spring RMI (Spring 远程方法调用)【原】的更多相关文章
- Spring RMI (Spring 远程方法调用)
所需jar包...? 不纠结,一股脑儿全导! 源码地址:http://pan.baidu.com/s/1jG8eOmy 先放结构图如下,客户端和服务端都在一个项目中.也可以把服务端的xxx导成j ...
- spring/spring boot/spring cloud开发总结
背景 针对RPC远程调用,都在使用dubbo.dubbox等,我们也是如此.由于社区暂停维护.应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring ...
- 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 ...
- Java bean与Spring、Spring MVC关系
Java Bean Java语言欠缺属性.事件.多重继承功能.所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码.Java Bean正是编写这套胶水代码的惯用模式或约定. ...
- SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...
- ssm(spring,spring mvc,mybatis)框架
ssm框架各个技术的职责 spring :spring是一个IOC DI AOP的 容器类框架 spring mvc:spring mvc 是一个mvc框架 mybatis:是一个orm的持久层框架 ...
- 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)
Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
随机推荐
- 实验十一 团队作业7—团队项目设计完善&编码测试
实验十一 团队作业7—团队项目设计完善&编码测试 实验时间 2018-6-8 Deadline: 2018-6-20 10:00,以团队随笔博文提交至班级博客的时间为准. 评分标准: 按时交 ...
- Integrating Jenkins and Apache Tomcat for Continuous Deployment
Installation via Maven WAR Overlay - Jenkins - Jenkins Wikihttps://wiki.jenkins.io/display/JENKINS/I ...
- Activiti reassign task to another user
//早先胡乱尝试的其他方法,可能对于以后深入学习Activiti有些用处. //taskService.delegateTask(taskId, receiveUserId); //taskServi ...
- Windows 安装 docker 以及1709的简单使用
PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force PS C:\> Install-P ...
- [日常工作] SUSE设置上网ip地址
1. 同事搜到的命令 ifconfig eth0 10.24.25.8 netmask 255.255.0.0 up route add default gw 10.24.255.254 2. 修改 ...
- ubunut下使用kubeadm离线安装k8s1.9
模仿转载的那个博客,简单记录下过程. 需要的文件. 原贴里面的:http://www.bladewan.com/2018/01/02/kubernetes_install/ 镜像文件,以及单独下载一些 ...
- AXI4
axis AXI4-stream 去掉了地址项,允许无限制的数据突发传输规模: 摘自http://xilinx.eetrend.com/blog/11443
- cxf Webservice 使用httpClient 调用
package com.wistron.wh.swpc.portal.uitl; import java.io.BufferedInputStream;import java.io.File;impo ...
- Laravel框架简单的用户管理[CURD]操作
一个基于laravel和bootstrap的简单的用户管理,适合刚入门的我们,在做的过程中可以加深自己对laravel基础理解,里面存在一些问题,还未修改,比如css和js的引入,表单提交地址等不规范 ...
- java 获取 T.class
转载:http://www.hankcs.com/program/t-class.html @Test public void Test() throws Exception{ Foo<User ...