使用Spring的HttpInvoker
Spring开发团队意识到RMI服务和基于HTTP的服务(例如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化机制,但是很难穿透防火墙。另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制。就这样,Spring的HTTP invoker应运而生了。HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,能够执行基于HTTP的远程调用(让防火墙不为难),并使用Java的序列化机制(让开发者也乐观其变)。使用基于HTTP invoker的服务和使用基于Hessian/Burlap的服务非常相似。为了开始学习HTTP invoker,让我们再来看一下Spitter服务——这一次我们将作为HTTP invoker服务来实现
1.1将bean导出为HTTP服务
要将bean导出为RMI服务,我们需要使用RmiServiceExporter;要将bean导出为Hessian服务,我们需要使用HessianServiceExporter;要将bean导出为Burlap服务,我们需要使用BurlapServiceExporter。把这种千篇一律的用法带到HTTP invoker上,应该也不会有任何意外的事情发生,那就是导出HTTP invoker服务,我们需要使用HttpInvokerServiceExporter。为了把Spitter服务导出为一个基于HTTP invoker的服务,我们需要像
下面的配置一样声明一个HttpInvokerServiceExporterbean:
是否有点似曾相识的感觉?我们很难找出这个bean的定义和那些在15.3.2小节中所声明的bean有什么不同。唯一的区别在于类名:HttpInvokerServiceExporter。否则的话,这个导出器和其他的远程服务的导出器就没有任何区别了
如图15.8所示,HttpInvokerServiceExporter的工作方式与HessianService-Exporter和BurlapServiceExporter很相似。HttpInvokerServiceExporter也是一个Spring的MVC控制器,它通过DispatcherServlet接收来自于客户端的请求,并将这些请求转换成对实现服务的POJO的方法调用。
因为HttpInvokerServiceExporter是一个Spring MVC控制器,我们需要建立一个URL处理器,映射HTTP URL到对应的服务上,就像Hessian和Burlap导出器所做的一样:
同样,像之前一样,我们需要确保匹配了DispatcherServlet,这样才能处理对“*.service”扩展的请求。参考15.3.1小节了解如何设置映射。我们已经知道如何访问由RMI、Hessian或Burlap所创建的远程服务,现在我们再次让Spitter客户端使用刚才所导出的基于HTTP invoker的服务。
通过HTTP访问服务
为了把基于HTTP invoker的远程服务装配进我们的客户端Spring应用上下文中,我们必须将 HttpInvokerProxyFactoryBean 配置为一个bean来代理它,如下所示
要记住HTTP invoker有一个重大的限制:它只是一个Spring框架所提供的远程调用解决方案。这意味着客户端和服务端必须都是Spring应用。并且,至少目前而言,也隐含表明客户端和服务端必须是基于Java的。另外,因为使用了Java的序列化机制,客户端和服务端必须使用相同版本的类(与RMI类似)。RMI、Hessian、Burlap和HTTP invoker都是远程调用的可选解决方案。但是当面临无所不在的远程调用时,Web服务是势不可挡的。下一节,我们将了解Spring如何对基于SOAP的Web服务远程调用提供支持。
使用Spring的HttpInvoker的更多相关文章
- Java学习之路-Spring的HttpInvoker学习
Hessian和Burlap都是基于HTTP的,他们都解决了RMI所头疼的防火墙渗透问题.但当传递过来的RPC消息中包含序列化对象时,RMI就完胜Hessian和Burlap了. 因为Hessian和 ...
- spring之HttpInvoker
一.HttpInvoker是常用的Java同构系统之间方法调用实现方案,是众多Spring项目中的一个子项目.顾名思义,它通过HTTP通信即可实现两个Java系统之间的远程方法调用,使得系统之间的通信 ...
- Spring中HttpInvoker远程方法调用总结
Spring为各种远程訪问技术的集成提供了工具类.Spring远程支持是由普通(Spring)POJO实现的,这使得开发具有远程訪问功能的服务变得相当easy. 眼下,Spring支持四种远程技术: ...
- Spring远程调用技术<3>-Spring的HTTP Invoker
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙. 另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invke ...
- cxf+spring+数字签名开发webservice(二)
场景 上一章中的webservice接口,因为现场正式环境的项目与外部单位网络不通,是通过前置机与外部进行数据交换,所以我们将webservice部署在前置机,在使用HttpURLCo ...
- Spring 4 bak
IOC (参考<Spring企业开发>.<Spring实战 第三版 第四版>) IoC概述 1. 控制反转 2.依赖注入 控制反转:大多数情况下,想要 ...
- Dubbo和Spring Cloud微服务架构'
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
转自:https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc 微服务架构是互联网很热门的话题,是互 ...
随机推荐
- HihoCoder1049 后序遍历 分治水题
水题,是为了给难题(树形DP)做铺垫 描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思的玩具——一棵由小球和木棍连接起来的二叉树! 小Ho对 ...
- perspective透视设置
目前只适用于webkit内核 一:当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身. #div1{position: relative;height: 150px; ...
- SpringBoot @ConfigurationProperties报错
idea报错如下: Not registered via @EnableConfigurationProperties or marked as Spring component less... (C ...
- drone 学习一 几个核心组件
1. clone 这个是内置的,实际上就行进行代码clone的 参考配置,同时我们可以使用自定义的插件 clone: + git: + image: plugins/git pipeline: bui ...
- Navicat Premium 连接Oracle 出现ora-12505 错误解决方案
找到listener.ora文件:我的Oracle是安装在F盘, 路径为:F:\oracle\product\10.2.0\db_1\network\admin\listener.ora 改动前的配 ...
- ffmpeg/ffplay 添加实时的时间水印 (转)
右上角添加时间水印 ffmpeg -i 0.ts -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:te ...
- CentOS部署NetCore - 3. 部署站点
一. CentOS 安装FTP linux 安装 ftp第一步 使用如下命令#rpm -qa |grep vsftpd可以检测出是否安装了vsftpd软件, 如果没有安装,使用YUM命令进行安装. y ...
- (转)Inno Setup入门(六)——在程序目录下创建文件夹
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250789 创建文件夹可以使用[dirs]段实现,代码如下: [s ...
- (转)Inno Setup入门(五)——添加readme文件
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250771 这个实现起来很简单,就是在[files]段中的某个预先 ...
- appium+python自动化37-adb shell模拟点击事件(input tap)
前言 appium有时候定位一个元素很难定位到,或者说明明定位到这个元素了,却无法点击,这个时候该怎么办呢? 求助大神是没用的,点击不了就是点击不了,appium不是万能的,这个时候应该转换思路,换其 ...