天天看點

hessian  Hessian Requires POST

一、最簡單的hessian調用--入門

一、遠端通訊協定的基本原理

    Hessian是Caucho開發的一種二進制Web Service協定。支援目前所有流行的開發平台。

    優點:Hessian協定和web service常用的SOAP協定類似,也是将協定封包封裝在HTTP封包中,通過HTTP信道傳輸的。是以Hessian協定具有與SOAP協定同樣的優點,即傳輸不受防火牆的限制(防火牆通常不限制HTTP信道)。Hessian協定的優點在于:它采用二進制編碼,是以傳輸資料量比SOAP協定要小得多。實踐證明,傳輸同樣的對象,Hessian協定傳輸的資料量比SOAP協定低一個數量級。是以在複雜網絡環境下的分布式應用使用Hessian協定可以獲得更好的性能和可靠性。

  網絡通信需要做的就是将流從一台計算機傳輸到另外一台計算機,基于傳輸協定和網絡 IO 來實作,其中傳輸協定比較出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上為某類應用場景而擴充出的傳輸協定,網絡 IO ,主要有 bio 、 nio 、 aio 三種方式,所有的分布式應用通訊都基于這個原理而實作,隻是為了應用的易用,各種語言通常都會提供一些更為貼近應用易用的應用層協定。

隻是為了應用的易用,各種語言通常都會提供一些更為貼近應用易用的應用層協定。

二、應用級協定Binary-RPC

  Binary-RPC(Remote Procedure Call Protocol,遠端過程調用協定)是一種和RMI(Remote Method Invocation,遠端方法調用)類似的遠端調用的協定,它和RMI 的不同之處在于它以标準的二進制格式來定義請求的資訊 ( 請求的對象、方法、參數等 ) ,這樣的好處是什麼呢,就是在跨語言通訊的時候也可以使用。

  Binary -RPC 協定的一次遠端通信過程:

  1 、用戶端發起請求,按照 Binary -RPC 協定将請求資訊進行填充;

  2 、填充完畢後将二進制格式檔案轉化為流,通過傳輸協定進行傳輸;

  3 、接收到在接收到流後轉換為二進制格式檔案,按照 Binary -RPC 協定擷取請求的資訊并進行處理;

  4 、處理完畢後将結果按照 Binary -RPC 協定寫入二進制格式檔案中并傳回。

問題總結:

  1 、傳輸的标準格式是:标準格式的二進制檔案。

  2 、怎麼樣将請求轉化為傳輸的流?将二進制格式檔案轉化為流。

  3 、怎麼接收和處理流?通過監聽的端口擷取到請求的流,轉化為二進制檔案,根據協定擷取請求的資訊,進行處理并将結果寫入 XML 中傳回。

  4 、傳輸協定是?http

三、Hessian介紹

服務端釋出服務

Hessian是一個輕量級的remoting on http工具,采用的是Binary RPC協定,是以它很适合于發送二進制資料,同時又具有防火牆穿透能力。Hessian一般是通過Web應用來提供服務,是以非常類似于平時我們用的 WebService。隻是它不使用SOAP協定,但相比webservice而言更簡單、快捷。

Hessian官網:http://hessian.caucho.com/

Hessian 可通過Servlet提供遠端服務,需要将比對某個模式的請求映射到Hessian服務。也可Spring架構整合,通過它的 DispatcherServlet可以完成該功能,DispatcherServlet可将比對模式的請求轉發到Hessian服務。Hessian的server端提供一個servlet基類, 用來處理發送的請求,而Hessian的這個遠端過程調用,完全使用動态代理來實作的,,建議采用面向接口程式設計,Hessian服務通過接口暴露。

Hessian處理過程示意圖:用戶端——>序列化寫到輸出流——>遠端方法(伺服器端)——>序列化寫到輸出流 ——>用戶端讀取輸入流——>輸出結果

Hessian在Spring中的工作流程如下:
    (1)用戶端:
    a.發送遠端請求:
        用戶端程式-->調用公共接口的方法-->Hessian攔截器攔截請求-->封裝遠端調用請求-->Hessian代理-->通過HTTP協定發送遠端請求代理到服務端
    b.接收遠端調用響應:
        遠端調用結果-->HTTP響應-->用戶端
    (2)服務端:
    a.接收遠端調用請求:
        HessianServiceExporter接收請求-->将遠端調用對象封裝為HessianSkeleton架構-->HessianSkeleton處理遠端調用請求
    b.傳回遠端調用響應:
        HessianSkeleton封裝遠端調用處理結果-->HTTP響應-->用戶端      

四、Hessian入門範例

4.1下載下傳Hessian

去Hessian官網:http://hessian.caucho.com/下載下傳最新的Hessian包

在進行基于Hessian的項目開發時,應當注意以下幾點:

  JAVA伺服器端必須具備以下幾點:

  1. 包含Hessian的jar包。
  2. 設計一個接口,用來給用戶端調用。
  3. 實作該接口的功能。
  4. 配置web.xml,配好相應的servlet。
  5. 對象必須實作Serializable 接口。
  6. 對于複雜對像可以使用Map的方法傳遞。

  用戶端必須具備以下幾點:

  1. java用戶端包含Hessian.jar的包。
  2. 具有和伺服器端結構一樣的接口。
  3. 利用HessianProxyFactory調用遠端接口。

4.3、設計一個提供服務接口來給用戶端調用

接口的代碼如下: 實作:

4.5、配置web.xml,添加對HessianServlet的配置

如下面的紅色部分所示:

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6     <welcome-file-list>
 7         <welcome-file>index.jsp</welcome-file>
 8     </welcome-file-list>
 910     <servlet>
11         <!-- 配置 HessianServlet,Servlet的名字随便配置,例如這裡配置成ServiceServlet-->
12         <servlet-name>ServiceServlet</servlet-name>
13         <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
14         
15         <!-- 配置接口的具體實作類 -->
16         <init-param>
17             <param-name>service-class</param-name>
18             <param-value>gacl.hessian.service.impl.ServiceImpl</param-value>
19         </init-param>
20     </servlet>
21     <!-- 映射 HessianServlet的通路URL位址-->
22     <servlet-mapping>
23         <servlet-name>ServiceServlet</servlet-name>
24         <url-pattern>/ServiceServlet</url-pattern>
25     </servlet-mapping>2627 </web-app>      

   到此,Hessian的服務端編寫就算是完成了。

  配置完成之後,啟動項目,在位址欄輸入:http://localhost:端口号/項目名/ServiceServlet,如果顯示結果如下,說明配置和接口編寫正确:

  Hessian Requires POST

4.6、編寫Hessian的測試用戶端

類打包成jar包提供給用戶端進行調用,打成Jar包的過程如下圖所示

編寫HessianClient用戶端,HessianClient類的代碼如下所示:

  --------------------------------------------------------------------------------------------------------------------------------------------------------   二、hessian與spring整合 首先,伺服器端配置,web.xml配置 此處,dispatcherServlet兩處相同,但是測試時可以通過,但是項目中應該隻有一處。 再增加一個配置檔案 hessianServiceExporter導出為hessian服務。 服務端配置好後,啟動tomcat,浏覽器打開如下,

HTTP Status 405 - HessianServiceExporter only supports POST requests

則說明正确。 用戶端配置,增加一個配置檔案。 完成。 注意:可能發生 1.對象的命名空間要一緻  2.注意傳遞的資料類型   參考來源:

http://www.cnblogs.com/yjmyzz/p/hessian-helloworld.html http://www.cnblogs.com/xdp-gacl/p/3897534.html http://blog.csdn.net/chjttony/article/details/6567511看不懂 http://blog.csdn.net/isea533/article/details/45038779 http://www.360doc.com/content/13/1217/09/14416931_337783880.shtml http://www.cnblogs.com/hzmark/archive/2012/11/27/Hessian.html

轉載于:https://www.cnblogs.com/jingRegina/p/5175536.html