15.4.2 通过 HTTP 访问服务
Last updated
Last updated
这听起来像打破记录,但是我还得告诉你,访问基于 HTTP invoker 的服务很类似于我们之前使用的其他远程服务代理。实际上就是一样的。如图 15.9 所示,HttpInvokerProxyFactoryBean 填充了相同的位置,正如我们在本章所看到的其他远程服务代理工厂 bean 一样。
为了把基于 HTTP invoker 的远程服务装配进我们的客户端 Spring 应用上下文中,我们必须将 HttpInvokerProxyFactoryBean 配置为一个 bean 来代理它,如下所示:
与 15.2.2 小节和 15.3.2 小节的 bean 定义相对比,我们会发现几乎没什么变化。serviceInterface 属性仍然用来标识 Spitter 服务所实现的接口,而 serviceUrl 属性仍然用来标识远程服务的位置。因为 HTTP invoker 是基于 HTTP 的,如同 Hessian 和 Burlap 一样,serviceUrl 可以包含与 Hessian 和 Burlap 版本中的 bean 一样的 URL。
难道你不喜欢对称美吗?
Spring 的 HTTP invoker 是作为两全其美的远程调用解决方案而出现的,把 HTTP 的简单性和 Java 内置的对象序列化机制融合在一起。这使得 HTTP invoker 服务成为一个引人注目的替代 RMI 或 Hessian/Burlap 的可选方案。
要记住 HTTP invoker 有一个重大的限制:它只是一个 Spring 框架所提供的远程调用解决方案。这意味着客户端和服务端必须都是 Spring 应用。并且,至少目前而言,也隐含表明客户端和服务端必须是基于 Java 的。另外,因为使用了 Java 的序列化机制,客户端和服务端必须使用相同版本的类(与 RMI 类似)。
RMI、Hessian、Burlap 和 HTTP invoker 都是远程调用的可选解决方案。但是当面临无所不在的远程调用时,Web 服务是势不可挡的。下一节,我们将了解 Spring 如何对基于 SOAP 的 Web 服务远程调用提供支持。