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