天天看點

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>

      <param-name>home-api</param-name>

      <param-value>Hessian.Printer</param-value>

  </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.  建立用戶端工程,新增測試類,代碼如下

03     import com.caucho.hessian.client.HessianProxyFactory;

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去捕捉實際傳遞的内容,發現根本看不懂傳遞的内容,因為是以二進制流進行傳遞的。