Hello Hessian

简介:
有关网上的对Hessian的评价很高,下面摘录了一段:
相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。    

Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。    

Hessian处理过程示意图:    

客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
 
 
Hessian的有着不同语言的版本:Java、Flash、Python、C++、.NET C#、D、Erlang、PHP、Ruby,Delphi等等,以后也许会更多更多。
Java版的Hessian性能稍逊于RMI。Hessian最大的优势就是简单而且强大!
 
下面是我第一个Hessian应用的例子:
 
环境:
jdk1.5
hessian-4.0.1.jar
apache-tomcat-6.0.20.zip
 
下载地址
 
项目代码:
 
开发web应用:
Hessian与RMI机制类似,你需要先定义接口,通过接口规范服务,客户端也是用同样的接口来调用服务的。
package lavasoft.suths.service; 

/** 
* 服务实现 

* @author leizhimin 2009-8-14 11:45:44 
*/
 
public  class HelloService  implements Hello { 
         public String sayHello(String name) { 
                 return  "Hello " + name +  "!"
        } 
}
 
服务的具体实现
package lavasoft.suths.service; 

/** 
* 服务实现 

* @author leizhimin 2009-8-14 11:45:44 
*/
 
public  class HelloService  implements Hello { 
         public String sayHello(String name) { 
                 return  "Hello " +  "name" +  "!"
        } 
}
 
配置web.xml,这个XML配置比较烦人,如果你有很多Service接口,你需要配置很多歌Servlet。但不用担心,Spring会为你解除烦恼。
<? xml  version ="1.0"  encoding ="UTF-8" ?> 
< web-app  xmlns ="http://java.sun.com/xml/ns/javaee" 
                  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" 
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
                  version ="2.5" > 

         < servlet > 
                 < servlet-name >hello </ servlet-name > 
                 < servlet-class >com.caucho.hessian.server.HessianServlet </ servlet-class > 
                 < init-param > 
                         < param-name >home-class </ param-name > 
                         < param-value >lavasoft.suths.service.HelloService </ param-value > 
                 </ init-param > 
                 < init-param > 
                         < param-name >home-api </ param-name > 
                         < param-value >lavasoft.suths.service.Hello </ param-value > 
                 </ init-param > 
                 < load-on-startup >1 </ load-on-startup > 
         </ servlet > 

         < servlet-mapping > 
                 < servlet-name >hello </ servlet-name > 
                 < url-pattern >/hello </ url-pattern > 
         </ servlet-mapping > 
</ web-app >
 
部署web应用,并启动tomcat。
 
 
写客户端代码:
客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。
package lavasoft.suths.service; 

import com.caucho.hessian.client.HessianProxyFactory; 

import java.net.MalformedURLException; 

/** 
* 客户端调用(会依赖服务接口) 

* @author leizhimin 2009-8-14 11:52:33 
*/
 
public  class Client { 
         public  static  void main(String[] args)  throws MalformedURLException { 
                String url =  "http://localhost:8080/hessianapp/hello"; 
                HessianProxyFactory factory = new HessianProxyFactory(); 
                Hello hello = (Hello) factory.create(Hello.class, url); 
                System.out.println(hello.sayHello("Hessian")); 
        } 
}
远程客户端调用,其实可以是本地,也可以是远程,这里写个简单的main方法测试一把。
 


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/191803,如需转载请自行联系原作者
相关文章
|
存储 分布式计算 JavaScript
Fury系列(四):一个比Kryo/Hessian快30~40倍的类型前后兼容序列化器
问题背景类型前后兼容是复杂业务场景序列化的常见需求。在快速迭代的业务场景当中,读写端经常发生对象字段发生变更:在线应用场景:线上SOFA/HSF应用提供服务给多个调用方,服务的滚动升级以及各个调用方独立更新都可能导致对象类型不一致的情况;在线服务场景:在线服务框架常驻不更改对象类型,但调用方业务逻辑变动独立更新导致对象字段跟服务端不一致;对象持久化场景:对象数据序列化后持久化写入存储(如Spark
1379 2
Fury系列(四):一个比Kryo/Hessian快30~40倍的类型前后兼容序列化器
|
XML Java 数据格式
|
Java 测试技术 应用服务中间件
|
Java Spring 应用服务中间件
|
Java API 网络协议