Hessian 机制初探

Hessian 机制初探

 

作者:终南   <li.zhongnan@hotmail.com>

 

 

Hessian 这个轻量级 Web 服务框架的结构基本如下图所示:

1. Web 服务

Web 服务是通过在 Web 服务器上部署 Servlet 来提供的。在 HessianServlet 的初始化配置中,参数 home-api 用来指定该 Web service 能够提供的服务,参数 home-class 用来指定提供具体服务的类,也即实现了 home-api 所指定接口的类。如果需要提供多个服务,可以部署多个 HessianServlet,并指定相应的 home-api 和 home-class 参数。

HessianServlet 是一个普通的 Servlet。主要接收来自 Hessian 客户端的请求,并将来自客户端 InputStream 和 OutputStream 包装成 Hessian 自己的 Input 和 Output,然后调用 HessianSkeleton 类处理客户的请求、并将处理结果返回给客户端。在初始化的过程中,HessianServlet 会根据参数 home-class 创建一个相应的实例,作为背后真正的 Web 服务提供者相应客户端的请求。
HessianSkeleton 解析来自客户端所请求的方法和参数信息,利用 Java 中的反射机制,调用由 HessianServlet 在初始化过程中创建的 Web 服务实例中对应的方法,然后将结果返回给客户端。

2. 客户端

客户端主要使用了 Java 的动态代理机制。当客户端使用 HessianProxyFactory 创建一个实例时,并不是真正创建了一个 Web 服务接口类型的实力,而是创建了一个 Java 代理实例。随后在调用 Web 服务接口的方法时,实现了 InvocationHandler 接口的 HessianProxy 类将方法名称、参数等信息通过 HttpURLConnection 发送给 Web service 服务器,然后处理服务器的响应并将结果返回。

3. 序列化

客户端与 Hessian 服务通讯时,使用的是 Hessian 定义的二进制协议,除了简单数据类型的传递外,还涉及到对象信息的传递,因此就涉及到对象的序列化问题,也即将对象转换成实在的二进制流通过网络进行传递,以及将收到的二进制流重新转换成对象实例。Hessian 提供了对很多类型的序列化操作,如基本类型:int, double. char, string, 数组等,较为复杂的常用类型:Number, BigDecimal, java.sql.Date, Timestamp, File, Array,Throwable等。对于其他对象类型,Hessian 利用 JavaSerializer 和 JavaDeserializer 来进行序列化操作,不过这些类型需要实现 Serializable 接口,也就是不管这些类型是直接作为参数、还是作为返回值,还是参数或者返回值涉及到这些类型,都必须实现 Serializable。

4. 参考

(1)Hessian 简介

(2)在应用中使用 Hessian

(3)Hessian 官方网站

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值