<a target="_blank" href="http://hessian.caucho.com/doc/hessian-overview.xtp">原文链接点这里</a>
hessian 是一个用于连接网络服务的二进制协议,他的com.caucho.hessian.client 和 com.caucho.hessian.server包不依赖于任何其他resin的类(resin是caucho公司的一个很快的web服务器,hessian是他的一部分),因此他能够应用于更小的客户端,比如java applet。其实也是因为不依赖所以也可以在任何容器比如tomcat,jetty中很方便的使用。
因为他是一个短小的协议,它能够应用于手机端,来连接resin这样的web服务器。 因为它比较精悍,因此他能够使用在ejb中。
就算hessian规范内容的本身,也是短小而令人关注的。 这个是说很多通讯框架其实都可以使用这个规范来序列化及反序列化类。
从一个java客户端使用hessian服务就像调用一个方法。 hessianproxyfactory创建的代理可以看为一个普通的java对象,只不过这个对象有可能在远程连接错误的时候抛出协议异常。
hessianproxyfactory依赖于jdk1.3及以上版本。
每一个服务将有一个java接口用于描述这个服务。下面的这个hello ,world 示例仅仅返回了string, 因为hessian支持java的序列化,一次直接使用java的类型。
下面是一个单独的hessian client, 这个client创建了hessianproxyfactory, 客户端使用factory根据给定的url及java
api接口创建一个stub. 这个存根是一个该java api的实现类。
这样就够了,不需要任何额外的操作了。服务还可以添加其他的方法,其可以包含任何java类型的返回值,或者是任何java类型的参数。
hessian service
虽然大多数的hessian服务都将使用resin-cmp 和 resin-ejb,已充分利用ejb的优点。 但是hessian库使得它能够通过hessianservlet进行扩展。
任何共有的方法都会识别为一个服务方法,因此创建服务方法跟写一个普通的方法是一样的。
因为服务是使用servlet来实现的,因此可以像普通的servlet一样使用servletcontext中的内容。
在resin3.0中的配置:
通用的web.xml的配置:
hessian类可以被用来做序列化和反序列化。
应用程序使用hessian来做序列化是很高效的。
当序列化的接口比简单类型和string更负责的时候请确保该类实现了java.io.serializable接口。
当应用程序想需要传输大量的二进制数据时,可以使用流来避免创建很大的字节数组。
只有方法的最后一个参数可以是inputstream,因为数据食杂方法调用的时候读取的。
例如,一个文件下载服务器也是可以有效的使用hessian来搭建的
在下面的例子中,用户需要直接的控制hessian协议,因为在方法返回前需要缓存这个文件。
如果返回值是一个inputstream, 那么在finally块中调用inputstream.close()是非常必要的,
因为在所有数据读取完且关闭stream前,hessian不会关闭底层的httpstream.
hessian debugging
hessian debug功能需要3.1.3或者更高版本
开启hessian servlet debug拢共需要两步。首先,"debug" init-param必须设置在web.xml中,hessianservlet的日志级别必须为fine.resin上的配置如下:
日志内容:
hessian3.1.3介绍了流api, 客户端可以使用流api发送周期性数据,例如在comet-style显存监控项目中持续接收数据
hessian client for a cell-phone
hessian甚至能够使用在小型java设备中,通过如下的类,hessian能够在j2me中进行使用:
microhessianinput
microhessianoutput
hessianremote
hessianserviceexception
hessianprotocolexception
下面的代码示例了使用手机作为一个客户端: