分享

Spring HTTP Invoker使用介绍

 Lib4Kevin 2015-05-29

Spring HTTP Invoker使用介绍

Spring HTTP invokerspring框架中的一个远程调用模型,它的执行基于HTTP的远程调用,并使用JAVA的序列化机制在网络间传递对象,客户端可以很轻松的像调用本地对象一样调用远程服务器上的对象。

JAVA语言中实现远程方法调用的框架比较多,下面先来做一个对比:

1RMI: 使用JRMP协议(基于TCP/IP),不允许穿透防火墙,使用JAVA系列化方式,使用于任何JAVA应用之间相互调用。

2Hessian:使用HTTP协议,允许穿透防火墙,使用自己的系列化方式,支持JAVAC++.Net等跨语言使用。

3Burlap: Hessian相同,只是Hessian使用二进制传输,而Burlap使用XML格式传输(两个产品均属于caucho公司的开源产品)

4Web Service:跨平台、跨语言、支持SOAP(简单对象访问协议)、提供wsdlweb service描述性语言,他结构比较庞大,依赖特定的web service实现,例如cxfaxis框架等。

5Spring HTTP Invoker: 使用HTTP协议,允许穿透防火墙,使用JAVA系列化方式,但仅限于Spring应用之间使用,即调用者与被调用者都必须是使用Spring框架的应用。它的缺点也很明显,只支持JAVA语言,依赖于Spring框架本身。

注意:项目中使用哪种远程调用机制取决于项目本身的要求。

一、Spring HTTP invoker调用原理

首先通过一张序列图来了解一下Spring HTTP invoker的调用过程:

1  Spring HTTP invoker的调用过程

客户端

1)向服务器发送远程调用请求:
远程调用信息-->封装为远程调用对象-->序列化写入到远程调用HTTP请求中-->向服务器端发送

2)接收服务器端返回的远程调用结果:
服务器端返回的远程调用结果HTTP响应-->反序列化为远程调用结果对象

服务端

1)接收客户端发送的远程调用请:
客户端发送的远程调用HTTP请求-->反序列化为远程调用对象-->调用服务器端目标对象的目标方法处理

2)向客户端返回远程调用结果:
服务器端目标对象方法的处理结果-->序列化写入远程调用结果HTTP响应中-->返回给客户端。

二、服务端实现

1IRemoteSyncServertInfo.java接口:

 

public interface IRemoteSyncServerConvertInfo {

                public String syncConvertInfo(MessageLog tool) throws Exception;

}

 

2IRemoteSyncServertInfoImpl.java接口的实现类:

 

public class RemoteSyncServerConvertInfoImpl implements IRemoteSyncServerConvertInfo {

                   @Override

                public String syncConvertInfo(final MessageLog message) {     

                    //TODO

}

}

 

3MessageLog.java客户端和服务器所传递的序列化对象:

 

public class MessageLog implements Serializable{

 

                private static final long serialVersionUID = 1L;

                //TODO

}

 

注意:如果服务器端与客户端要传递的是对象,该对象必须是序列化对象,否则对应不上,例如 MessageLog implements Serializable;除了传递序列化对象还可以传递字符串等参数。

2)在spring.xml的配置文件里进行配置:

Spring配置文件中声明一个HttpInvokerServiceExporter类的bean,共四部分:

--服务名称(remoteSyncServerConvertInfoImpl)

--服务类型(com.assoft.dc.rmiserver.impl.RemoteSyncServerConvertInfoImpl)

--服务实现类,一般引用其它bean(serviceInterface)

--服务端口(registryPort)

2  服务器端spring.xml配置文件

3)在web.xml的配置文件里进行配置:

web.xml中声明一个服务与spring配置文件提供的服务名称同名的Servlet(当然这个ServletSpring已经提供即HttpRequestHandlerServlet,它作用就是去拦截url- pattern匹配的请求,如果匹配成功,去ApplicationContextremote-servlet.xml)中查找nameservlet-name一致的bean,完成远程方法调用。

3  服务器端web.xml配置文件

三、客户端实现

1)因为客户端依赖服务端的服务类,所以需要设置类路径依赖,可以将class文件(或者jar)拷贝到客户端。

2spring.xml的配置文件里进行配置:

spring配置文件中创建一个类HttpInvokerProxyFactoryBeanbean,指定serviceUrl属性为服务器端的服务提供的URLserviceInterface属性为服务器端配置的服务类型。

4  客户端spring.xml配置文件

3Client.java客户端调用类:

5  客户端调用类

4)先把服务器端启动,然后运行客户端程序进行调用服务器端提供的接口方法,实现JAVA的序列化机制在网络间传递对象。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多