- 浏览: 13844 次
最新评论
WebService另一种轻量级实现―Hessian 学习笔记
- 博客分类:
- 技术杂绘
最近和同事聊天,得知他们在使用一种叫做Hessian的WebService实现方式实现远程方法调用,是轻量级的,不依赖JavaEE容器,同时也是二进制数据格式传输,效率比SOAP的XML方式要高。感觉像是RESTFUL方式类似,好奇之下到网上查阅相关资料,总结如下:
一、简介 Hessian是由caucho提供的一个基于binary-RPC实现的远程通讯library。
1、是基于什么协议实现的?
基于Binary-RPC协议实现。
2、怎么发起请求?
需通过Hessian本身提供的API来发起请求。
3、怎么将请求转化为符合协议的格式的?
Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。
4、使用什么传输协议传输?
Hessian基于Http协议进行传输。
5、响应端基于什么机制来接收请求?
响应端根据Hessian提供的API来接收请求。
6、怎么将流还原为传输格式的?
Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。
7、处理完毕后怎么回应?
处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。 二、Hessian 调用实例
a) 编写服务端代码 写一个接口:
public interface Hello {
public String seeHello();
}
编写一个实现:
public class HelloImpl implements Hello {
private String helloStr = "Hello World";
public String getHelloStr() {
return helloStr;
}
public void setHelloStr(String helloStr) {
this.helloStr = helloStr;
}
public String seeHello() {
return helloStr;
}
}
配置WEB-INF.xml 部署到Web容器中:
hello
com.caucho.hessian.server.HessianServ let
home-class
com.alisoft.enet.hessian.HelloImpl
home-api
com.alisoft.enet.hessian.Hello
hello
/hello.xsp
Ok,服务端代码编写完毕。
b) 编写客户端代码 public class HelloServiceTest { public static void main(String[] args) throws Exception { String url = "http://localhost/hessian/hello.xsp"; HessianProxyFactory factory = new HessianProxyFactory(); Hello hello = (Hello) factory.create(Hello.class, url); System.out.println("远程调用结果: " + hello.seeHello()); } } 执行客户端,即可返回相应的结果:
远程调用结果: Hello World
上面的例子是基于 caucho 提供的Hessian 包的基础上做的,实际上Spring的Hessian调用只是对这个进行简单的封装,便于使用。
三、Hessian机制
那么Hessian就是把Java对象转变成 字节序列,然后通过Http传输到 目标服务器上(主机2),主机2收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理。处理完成以后以同样的方式返回数据。
现在我们回头看看例子中的配置(WEB-INF.XML):
配置的Servlet: com.caucho.hessian.server.HessianServlet
对应的参数:接口(home-api):com.alisoft.enet.hessian.Hello
实现(home-class): com.alisoft.enet.hessian.HelloImpl
HessianServlet 中的实现代码如下(略过部分代码):
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
InputStream is = request.getInputStream();
OutputStream os = response.getOutputStream();
//输入流
Hessian2Input in = new Hessian2Input(is);
SerializerFactory serializerFactory = getSerializerFactory();
in.setSerializerFactory(serializerFactory);
//输出流
AbstractHessianOutput out;
int major = in.read();
int minor = in.read();
out = new Hessian2Output(os);
out.setSerializerFactory(serializerFactory);
_homeSkeleton.invoke(in, out);
整个执行步骤如下: l 接收输入流,并通过SerializerFactory转化为 Hessian 特有的 Hessian2Input
l 设置输出流,并通过SerializerFactory转化为 Hessian 特有的 Hessian2Output
l 根据配置的接口和实现参数,调用服务,并把结果写入到输出流 Hessian2Output中
l Out.close()
Hessian远程访问基于序列化和反序列化的方式。当程序运行时,程序所创建的各种对象都位于内存中,当程序运行结束,这些对象就结束了生命周期。对象的序列化主要有两种用途: l 把对象的字节序列永久地保存到硬盘上,通常是放在一个文件中。
l 在网络上传输对象的字节序列
四.Hessian的优点: 1- 整个jar很小,200多K,3.1版本的,当然,我下载的for java的版本.
2- 配置很简单,基本上不需要花什么经历就配置出来了
3- 功能强大,可以将soap抛开,也可以把EJB抛开,采用二进制来传递对象
4- 拥有多种语言支持,python c++ .net 甚至 flex 都可以做为client端
注:Hessian for java的相关资料下载地址:http://hessian.caucho.com/#Java 。
发表评论
-
数据库连接字符串详解
2012-07-06 09:52 745数据库连接字符串,这个东东,编程的时候总是能碰到它,一直没 ... -
spring aop学习笔记
2012-07-06 09:46 820在编程中经常会遇到些许可复用、开发意义不大、技巧性的代码段 ... -
Flamingo学习之 Ribbon组件的整体概述
2012-07-03 13:44 1280Flamingo学习之 Ribbon组件的整体概述 F ... -
使用Validator.validateAll对所有验证控件进行验证的例子
2012-07-02 12:59 843调用 validators 数组中的所有验证程序。返回一个 ... -
Web前端开发之“常见模块你真的很了解吗?”
2012-07-02 12:59 673标题和内容模 ... -
Using Valgrind to Find Memory Leaks
2012-07-02 12:59 646document.write ("he ... -
WPF拖拽效果实现
2012-07-02 12:59 2072Silverlight的版本不断更新.当然有些很不错的功能 ... -
CheckBox 列表的取值并用XML 对其进行赋值的例子
2012-07-02 12:59 804首先用一个XML对一组CheckBox进行赋值 然 ... -
flash.net.SharedObject共享对象
2012-07-01 10:32 847通过使用SharedObject数据可以被存储在用户的本地 ... -
Ubuntu配置笔记
2012-07-01 10:31 921#vi /etc/apt/sources.list 在打开 ... -
个人电脑数据维护
2012-07-01 10:31 615对于个人电脑用户而言,由于经常要上网,很多网站都存在各种安 ... -
flex启航
2012-06-30 16:55 701flex启航 2010年11月22日 ... -
Flex 学习资源
2012-06-30 16:55 544Flex 学习资源 2010年11月11日 一、国外站点 ... -
FLEX学习网站
2012-06-30 16:55 603FLEX学习网站 2010年07月15日 今天把收藏夹共 ... -
Hello,Flex
2012-06-30 16:55 417Hello,Flex 2010年07月26日 ... -
FLEX和Actionscript开发FLASH游戏5-2
2012-06-30 16:52 518FLEX和Actionscript开发FLASH游戏5-2 ...
相关推荐
WebService另一种轻量级实现—Hessian 学习笔记.rar
hessian.jar 轻量级webservice实现 hessian.jar 轻量级webservice实现 hessian.jar 轻量级webservice实现
轻量级WebService,打包了轻量级WebService hessian的一个简单demo,还有Xfire的一个简单demo,还有一些PPT文档,相对来说,对于没有入门的童鞋们来说是个不错的资源,免费共享给大家,互相共勉(我也是菜鸟)。
webService学习笔记
WebService学习笔记 比较经典
webservice学习笔记doc文档,喜欢或想要了解webservice的朋友可以下载学习一下。
webservice的一种轻量级实现,能在普通的web容器上运行
尚硅谷Webservice学习笔记,详情请参看文档,仅供个人学习
Webservice学习笔记
NULL 博文链接:https://topmanopensource.iteye.com/blog/836038
SAP与其他外围系统交互使用的一种通讯方式,具体讲述了WSDL文件的发布与在SAP中的部署,以及接口的测试和配置方式
軽量 Web サービスアーキテクチャ 轻量级webservice 架构的研究
NULL 博文链接:https://longdechuanren.iteye.com/blog/609303
webservice学习笔记,对掌握和理解webservice有很好的帮助,特此分享
webservice技术,基于spring+hessian框架开发的简单实例
ksoap2 android(轻量级 用于和WebService通信第三方开源库)
RESTful架构: (1)每一个URI代表一种资源; (2)客户端和服务器之间,传递这种资源的某种...是一种标准,不同的平台,不同的语言都可提供webservice开发实现。在java领域,webservice框架很多,axis,xfire,cxf
Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。 只是它不使用SOAP协议,但相比webservice而言更简单、快捷。
远程方法调用的比较,Hessian方法的介绍和相关配置.Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供...