Java 远程调用 Spring HTTP Invoker

一、简单介绍下:Spring HTTP invoker 是 spring 框架中的一个远程调用模型,执行基于 HTTP 的远程调用,具体实体类需要序

列化,如此才可以实现网络间对象的传递,以便客户端调用远程服务器上的对象。主要使用了三个重要对象:

HttpInvokerServiceExporter绑定接口及接口实现,由此可知spring需配置两个属性,serviceInterface及service。

HttpRequestHandlerServlet将客户端请求转给同名bean(即下面需要配置的服务名称)。

HttpInvokerProxyFactoryBean绑定服务端URL及服务端设定的接口,由此可知spring需配置两个属性,serviceUrl及

serviceInterface。废话不多说,看实现。

二、具体实现如下:

1、jar包准备:commons-logging-1.1.jar;spring-2.5.6.jar

2、服务端:

(1)新建个实体对象,实现serializable接口

package com.erayt.domain;

import java.io.Serializable;

public class User implements Serializable{

	private String userName;
	private String passWord;
	private int age;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [userName=" + userName + ", passWord=" + passWord
				+ ", age=" + age + "]";
	}
	
}

(2)新建接口类

package com.erayt.service;

import com.erayt.domain.User;

public interface IUserHttpService {

	public void addUser(User user);
}

(3)简单实现(2)中的接口

package com.erayt.service.impl;

import com.erayt.domain.User;
import com.erayt.service.IUserHttpService;

public class UserHttpServiceImpl implements IUserHttpService {

	public void addUser(User user) {
		System.out.println(user);

	}
}

(4)配置spring,在Spring配置文件中声明一个HttpInvokerServiceExporter类的bean,共三部分

     --服务名称(如userExporter)

    --服务类型(如com.erayt.service.IUserHttpService )

     --服务实现类,一般引用其它bean(如userHttpService)





	
	
		
		
	

(5)web.xml配置,在web.xml中声明一个与服务与服务名称同名的Servlet(当然这个Servlet类Spring已经提供即HttpRequestHandlerServlet,这家伙的作用就是直接把请求扔给同名的bean),然后声明servlet-mapping将其map到指定URL,这样客户就可以通过这个URL访问到对应服务。



	JavaRemoteCall
	
		contextConfigLocation 
		classpath:applicationContext.xml
	
	
		userExporter
		org.springframework.web.context.support.HttpRequestHandlerServlet
	
	
		userExporter
		/remoting/RMI
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
		index.html
		index.htm
		index.jsp
		default.html
		default.htm
		default.jsp
	

3、客户端

(1)在spring bean配置文件中创建一个类HttpInvokerProxyFactoryBean的bean,指定serviceUrl属性为服务器端的服务提供的URL,serviceInterface属性为服务器端配置的服务类型。



	
		
			http://localhost:8085/JavaRemoteCall/remoting/RMI
		
		
			com.erayt.service.IUserHttpService
		
	

(2)新建接口,需与服务端保持一致

package com.erayt.service;

import com.erayt.domain.User;

public interface IUserHttpService {

	public void addUser(User user);
}

(3)客户端测试类(前提服务端要部署到Tomcat并启动着)

package com.erayt.Test;

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

import com.erayt.domain.User;
import com.erayt.service.IUserHttpService;


public class RMITest {

	public static void main(String[] args) {
		try{
			ApplicationContext ctx= new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
			IUserHttpService batchService=(IUserHttpService)ctx.getBean("userProvider");
			User user = new User();
			user.setUserName("张三");
			user.setPassWord("123");
			user.setAge(18);
	      	batchService.addUser(user);
		}catch(Exception e){
			e.printStackTrace();
			System.exit(1);//同步调用失败
		}
	}
}

结果如下:User [userName=张三, passWord=123, age=18]

你可能感兴趣的:(Java 远程调用 Spring HTTP Invoker)