Hessian接口学习笔记

简介:
昨天写了一篇关于ICE的接口如何实现的文章,突然想到我们今年接口测试过程中可能也会遇到hessian类型的接口,为此乘这两天有空把hessian接口也学习一下。由于学习是为了以后测试工作而进行的,所以对于hessian和soap机制孰优孰劣就没有深入的研究,这些问题还是留给我们架构师来研究吧。根据网上的文献:Hessian是采用二进制流进行通讯的,所以我想性能应该会好一些,既然通过二进制流传递,是不是对复杂对象的传递有问题呢,我想可能会有些难度,毕竟传递过程中没有象soap这样保留了对象的结构的。这个问题有待以后考证。今天我想把我第一次学习hessian的经历分享一下。
        和ICE,WebService一样,既然作为服务类那么必须有文档公布它的接口形式,客户端用户在通过这个文档来生成代理类。ICE是通过.Ice文件,WebService是通过wsdl,但是hessian没有这个类型的文档,hessian的代理类是直接通过factrory去生成的。所以在做hessian客户端代码之前,需要拿到接口文件interface。下面我们通过一个完整的例子看看hessian服务器端代码和客户端代码如何实现。
        服务器端代码和配置:
1.  去 http://hessian.caucho.com/#Java 下载hessian jar包。
2.  新建服务器端工程(web工程:hessian),新增接口声明文件new->interface。代码如下:
1       package Hessian;
2      
3       public interface Printer {
4                public String printstr(); //与服务端的printstr方法对应
5       }
 

3.  新建服务器类实现代码,new->class,代码如下
01     package Hessian;
02    
03     public  class PrinterService  implements Printer{
04    
05              public String printstr() {
06                       // TODO Auto-generated method stub
07                       return "helloworld";
08              }
09    
10     }

4.  修改服务器端web.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
   <servlet-name>aaa</servlet-name>
   <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    <init-param>
      <param-name>home-class</param-name>
      <param-value>Hessian.PrinterService</param-value>
    </init-param>
    <init-param>
      <param-name>home-api</param-name>
      <param-value>Hessian.Printer</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
 <servlet-name>aaa</servlet-name>
    <url-pattern>/aaa</url-pattern>
  </servlet-mapping>
</web-app>

上述代码实现如下功能:
         * 指定接口的url
         * 指定API使用的inteface文件
    * 指定服务器类实现的代码
 
5.  导出工程为hessian.war,部署到tomcat5的webapps目录下。
 
6.  将hessian jar包拷贝到lib目录下。
 
客户端代码:
1.  新建客户端工程,新增测试类,代码如下
01     package Hessian;
02    
03     import com.caucho.hessian.client.HessianProxyFactory;
04    
05     public class TestClient {
06                public static void main(String []args)
07                  throws Exception
08                {
09                  String url = " http://10.0.68.183:8080/Hessian/aaa";
10                  //创建factory实例
11                  HessianProxyFactory factory = new HessianProxyFactory();
12                  //客户端需实现Basic接口
13                  Printer printer = (Printer) factory.create(Printer.class, url);
14    
15                  System.out.println("Hessian: " + printer.printstr());
16                }
17    
18     }
 
运行客户端代码:可以看见Hessian helloworld。
         如果读者有兴趣使用comview去捕捉实际传递的内容,发现根本看不懂传递的内容,因为是以二进制流进行传递的。
 
 

本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/283222,如需转载请自行联系原作者
相关文章
|
5月前
|
Dubbo Java 应用服务中间件
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
|
10月前
|
存储 搜索推荐 API
如何设计 RPC 接口
如何设计 RPC 接口
182 0
|
Dubbo Java 应用服务中间件
Dubbo3实践:基于 IDL 的 Triple 协议 Pojo 序列化兼容模式
这篇教程会通过从零构建一个简单的工程来演示如何基于 POJO 方式使用 Dubbo Triple, 在应用不改变已有接口定义的同时升级到 Triple 协议。**此模式下 Triple 使用方式与 Dubbo 协议一样。** 具体用例可以参考:[dubbo-samples-triple/pojo](https://github.com/apache/dubbo-samples/tree/mast
315 0
|
设计模式 JSON Java
RPC框架(3 - 实现Netty传输和通用序列化接口)
RPC框架(3 - 实现Netty传输和通用序列化接口)
|
JSON Java 数据格式
RPC框架(4 - 实现一个基于 Kryo 的序列化器)
RPC框架(4 - 实现一个基于 Kryo 的序列化器)
|
存储 Java 程序员
Java学习笔记——dubbo服务之底层通讯协议Protocol
我们先来找到通讯协议的入口点吧。通过Protocol接口查找通讯协议入口点,我们根据接口的export方法搜索发现入口了,在ServiceConfig的doExportUrlsFor1Protocol方法,如下图: 然后我们进入 protocol.
1714 0
|
XML Java 数据格式
|
Dubbo 测试技术 应用服务中间件
|
XML Java 数据格式