Spring HTTP Invoker
2015-06-04 16:45
281 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/article/4514253.html
Spring HTTP Invoker一种JAVA远程方法调用框架实现,原理与JDK的RMI基本一致,所以我们先跟其它JAVA远程方法调用实现做下简单比较。
RMI:使用JRMP协议(基于TCP/IP),不允许穿透防火墙,使用JAVA系列化方式,使用于任何JAVA应用之间相互调用。
Hessian:使用HTTP协议,允许穿透防火墙,使用自己的系列化方式,支持JAVA、C++、.Net等跨语言使用。
Burlap: 与Hessian相同,只是Hessian使用二进制传输,而Burlap使用XML格式传输(两个产品均属于caucho公司的开源产品)。
Spring HTTP Invoker: 使用HTTP协议,允许穿透防火墙,使用JAVA系列化方式,但仅限于Spring应用之间使用,即调用者与被调用者都必须是使用Spring框架的应用。
为什么使用Spring HTTP Invoker?我们可以看下Spring源码中的注释说明:
Spring一定希望大家尽量使用它的产品,但实际项目中我们还是要根据需求来决定选择哪个框架,下面我们来看看Spring HTTP Invoker的使用。
既然通过是HTTP请求调用,那么客户端肯定需要一个代理用于帮忙发送HTTP请求,帮忙做对象系列化和反系列化等,Spring框架中的HttpInvokerServiceExporter类处理这些杂事;而服务器端需要一个HTTP请求处理器,帮忙处理HTTP请求已经对象系列化和反系列化工作,Spring框架中的HttpInvokerServiceExporter类就是干这活的,对于Sun
JRE 6 的HTTP Server,Spring还提供了SimpleHttpInvokerServiceExporter类供选择。
服务端配置:
服务声明:
在Spring配置文件中声明一个HttpInvokerServiceExporter类的bean,共三部分:
--服务名称(如helloExporter)
--服务类型(如com.stevex.demo.HelloService)
--服务实现类,一般引用其它bean(如helloService)
服务URL关联:
在web.xml中声明一个与服务与服务名称同名的Servlet(当然这个Servlet类Spring已经提供即HttpRequestHandlerServlet,这家伙的作用就是直接把强求扔给同名的bean),然后声明servlet-mapping将其map到指定URL,这样客户就可以通过这个URL访问到对应服务。
客户端配置:
在spring bean配置文件中创建一个类HttpInvokerProxyFactoryBean的bean,指定serviceUrl属性为服务器端的服务提供的URL,serviceInterface属性为服务器端配置的服务类型。
服务端实现:
因为服务端需要提供HTTP请求服务,而且是基于Servlet的,所以服务端需要跑在如Tomcat这样的Servlet Web容器上;服务类只要是普通的POJO即可,没有特殊要求:
客户端实现:
因为客户端依赖服务端的服务类,所以需要设置类路径依赖,可以将class文件(或者jar包)拷贝到客户端。
全部搞定后,将服务器先跑起来,然后运行客户端程序就可以看到调用结果了,不知道性能如何,有空测试测试!
本文出自 “力量来源于赤诚的爱!” 博客,请务必保留此出处/article/4514253.html
Spring HTTP Invoker一种JAVA远程方法调用框架实现,原理与JDK的RMI基本一致,所以我们先跟其它JAVA远程方法调用实现做下简单比较。
RMI:使用JRMP协议(基于TCP/IP),不允许穿透防火墙,使用JAVA系列化方式,使用于任何JAVA应用之间相互调用。
Hessian:使用HTTP协议,允许穿透防火墙,使用自己的系列化方式,支持JAVA、C++、.Net等跨语言使用。
Burlap: 与Hessian相同,只是Hessian使用二进制传输,而Burlap使用XML格式传输(两个产品均属于caucho公司的开源产品)。
Spring HTTP Invoker: 使用HTTP协议,允许穿透防火墙,使用JAVA系列化方式,但仅限于Spring应用之间使用,即调用者与被调用者都必须是使用Spring框架的应用。
为什么使用Spring HTTP Invoker?我们可以看下Spring源码中的注释说明:
既然通过是HTTP请求调用,那么客户端肯定需要一个代理用于帮忙发送HTTP请求,帮忙做对象系列化和反系列化等,Spring框架中的HttpInvokerServiceExporter类处理这些杂事;而服务器端需要一个HTTP请求处理器,帮忙处理HTTP请求已经对象系列化和反系列化工作,Spring框架中的HttpInvokerServiceExporter类就是干这活的,对于Sun
JRE 6 的HTTP Server,Spring还提供了SimpleHttpInvokerServiceExporter类供选择。
服务端配置:
服务声明:
在Spring配置文件中声明一个HttpInvokerServiceExporter类的bean,共三部分:
--服务名称(如helloExporter)
--服务类型(如com.stevex.demo.HelloService)
--服务实现类,一般引用其它bean(如helloService)
在web.xml中声明一个与服务与服务名称同名的Servlet(当然这个Servlet类Spring已经提供即HttpRequestHandlerServlet,这家伙的作用就是直接把强求扔给同名的bean),然后声明servlet-mapping将其map到指定URL,这样客户就可以通过这个URL访问到对应服务。
在spring bean配置文件中创建一个类HttpInvokerProxyFactoryBean的bean,指定serviceUrl属性为服务器端的服务提供的URL,serviceInterface属性为服务器端配置的服务类型。
因为服务端需要提供HTTP请求服务,而且是基于Servlet的,所以服务端需要跑在如Tomcat这样的Servlet Web容器上;服务类只要是普通的POJO即可,没有特殊要求:
因为客户端依赖服务端的服务类,所以需要设置类路径依赖,可以将class文件(或者jar包)拷贝到客户端。
本文出自 “力量来源于赤诚的爱!” 博客,请务必保留此出处/article/4514253.html
相关文章推荐
- 访问HTTPS时SSL/TLS证书拒绝问题 : unable to find valid certification path to requested target
- 如何设置虚拟机网络
- 新浪微博开发平台地址 http://open.weibo.com/
- Java正则表达式(转载http://www.java3z.com/cwbwebhome/article/article8/Regex/Java.Regex.Tutorial.html#reg6)
- TCP/IP-------MTU、MSS、分片
- TCP 的那些事儿(下)
- iOS应用架构谈 网络层设计方案
- 使用ruby_Hpricot_httpclient 获取网页图片
- TCP 的那些事儿(上)
- TCP socket编程中send函数
- Android之Http通信——4.Android HTTP请求方式:HttpClient
- nginx HTTP模块组成
- 单机最大tcp连接数
- ListView加载网络数据和图片
- VMware虚拟机采用桥接方式不能上网——都是共享神盾惹的祸!
- Windows单机最大TCP连接数的问题
- CCNA学习指南 网络互联
- https
- ubuntu 恢复gnome-panel及恢复网络管理图标
- 网络流基础学习(Edmonds_Karp算法 )