15.4.2 通过 HTTP 访问服务
Last updated
Was this helpful?
Last updated
Was this helpful?
这听起来像打破记录,但是我还得告诉你,访问基于 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 服务远程调用提供支持。