Spring远程调用技术<3>-Spring的HTTP Invoker
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙。 另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制。
Spring提供的http invker是一个新的远程调用模型,作为Spring框架的一部分,能够执行基于HTTP的远程调用(让防火墙不为难),并使用java的序列化机制(让开发者也乐观其变)。
Spring的HTTPinvoker把HTTP的简单性和java内置的对象序列化机制融合在一起。这使得HTTPinvoker成为替代RMI Hessian Burlap的可选方案
但是有一个限制:它只是一个Spring框架提供的远程调用方案,意味着客户端和服务端必须是Spring应用。并且表明客户端和服务端都是基于java的。另外使用了java的序列化机制,客户端和服务端必须使用相同版本的类。
将bean导出为RMI服务,我们使用RmiServiceExporter
将bean导出为Hessian服务,我们使用HessianServiceExporter
将bean导出为Burlap服务,我们使用BurlapServiceExporter
那么导出HTTP Invoker服务,使用HttpInvokerServiceExporter
配置流程和Hessian、Burlap的一模一样
服务端:
WebConfig.java (添加HttpInvokerServiceExporter的配置并绑定url映射 )
@Bean
public HandlerMapping mapping(){
System.out.println("-->Mapping");
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
Properties mappings = new Properties(); // mappings.setProperty("/burlap.ser", "burlapService");
//给bean绑定url,bean的名字(burlapService)必须对应
//mappings.setProperty("/hessian.ser", "hessianService"); mappings.setProperty("/httpInvoker.ser", "httpInvokerServer"); mapping.setMappings(mappings);
return mapping; } @Bean(name="httpInvokerServer")
public HttpInvokerServiceExporter httpInvokerServer(PersonServer personServer){
System.out.println("-->httpInvokerServer");
HttpInvokerServiceExporter invoker = new HttpInvokerServiceExporter();
invoker.setServiceInterface(PersonServer.class);
invoker.setService(personServer);
return invoker;
}
客户端:
package com.mvc.wzy; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; import com.mvc.server.PersonServer; @Configuration
public class HttpInvokerContext { @Bean
public HttpInvokerProxyFactoryBean httpProxyFactoryBean(){
HttpInvokerProxyFactoryBean b = new HttpInvokerProxyFactoryBean();
b.setServiceUrl("http://localhost:8080/Springmvc/httpInvoker.ser");
b.setServiceInterface(PersonServer.class); return b; }
}
测试:
//Spring 加载
ApplicationContext app =
// new AnnotationConfigApplicationContext(com.mvc.wzy.HessianContext.class);
// new AnnotationConfigApplicationContext(com.mvc.wzy.BurlapContext.class);
new AnnotationConfigApplicationContext(com.mvc.wzy.HttpInvokerContext.class);
PersonServer p = app.getBean(PersonServer.class);
System.out.println( p.getMsg());
System.out.println(p.getPerson());
结果:

Spring远程调用技术<3>-Spring的HTTP Invoker的更多相关文章
- Spring远程调用技术<2>-Hessian和Burlap
上篇谈到RMI技术,加上Spring的封装,用起来很方便,但也有一些限制 这里的Hessian和Burlap解决了上篇提到的限制,因为他们是基于http的轻量级远程服务. Hessian,和RMI一样 ...
- Spring远程调用技术<1>-RMI
在java中,我们有多种可以使用的远程调用技术 1.远程方法调用(remote method invocation, RMI) 适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务 ...
- 【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
一.远程调用概述 1.远程调用的定义 在一个程序中就像调用本地中的方法一样调用另外一个远程程序中的方法,但是整个过程对本地完全透明,这就是远程调用.spring已经能够非常成熟的完成该项功能了. 2. ...
- Spring 远程调用工具类RestTemplateUtils
Spring 远程调用Rest服务工具类,包含Get.Post.Put.Delete四种调用方式. 依赖jar <dependency> <groupId>org.spring ...
- WebService远程调用技术
1.---------------------------------介绍-------------------------------------------------- (1)远程调用:一个系统 ...
- C#远程调用技术WebService葵花宝典
一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你 ...
- C#远程调用技术WebService修炼手册
一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...
- Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)
转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...
- Spring远端调用的实现-Spring Http调用的实现
1:Spring Http设计思想 最近在研究公司自己的一套rpc远程调用框架,看到其内部实现的设计思想依赖于spring的远端调用的思想,所以闲来无事,就想学习下,并记录下. 作为spring远端调 ...
随机推荐
- MVC调试时遇到的URL问题
最近接手一个项目时遇到了点问题,事情是这样的,本人拿到源码准备F5准备试跑看一下,原本是应该打开 http:/localhost/Home/Login,结果程序直接跳到 http://localhos ...
- 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command)
[源码下载] 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command) 作者:webabcd 介绍背水一战 Windows 10 之 MVV ...
- php实现hack中的Shape特性
用php进行静态类型编程,估计是我的一个心结. 依次有几篇文章都记录了我的一些探索: 通过指定函数/方法形参类型提高PHP代码可靠性 http://www.cnblogs.com/x3d/p/4285 ...
- eclipse里打开SWT项目找不到source/design的图形UI设计界面
因为前天重新装了个新版的eclipse, 结果今天打开一个SWT的项目,突然找不到source/design的图形UI设计的两个切换按钮 我把SWT组件重新装了还是找不到.结果后来发现是因为重装ecl ...
- CSS3与页面布局学习笔记(五)——Web Font与CSS Sprites(又称CSS精灵、雪碧图)技术
一.web font web font是应用在web中的一种字体技术,在CSS中使用font-face定义新的字体.先了解操作系统中的字体: a).安装好操作系统后,会默认安装一些字体,这些字体文件描 ...
- window下 Sublime Text 3 安装
1.下载 官网 http://www.sublimetext.com/ 安装时,注意勾选Add to explorer context menu,这样Sublime Text可以被添加到右键中,在右键 ...
- 原生JS:全局属性、全局方法详解
全局属性.全局方法 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.html 首先普及几个我总结的非常实用又很基础的知识:(呵呵,仅 ...
- TypeScript的4种编译方式
1.手动编译 1.1.首先找到TypeScript的安装目录,我的在"C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0".
- ArcSDE给Oracle添加SDE函数包
SDE函数包中包含大量的空间计算分析函数,是我们做空间相关分析的一把利刃(目前好像我们只有这一把),有关SDE函数的使用,请见我空间另外的一篇帖子的附件.按照通常教程,过程是这样的1.找到listen ...
- VSALM 动手实验 - 持续集成
Visual Studio 应用生命周期管理(VSALM - Visual Studio Application Lifecycle Managemnet)是微软基于Visual Studio产品线所 ...