Hessian 機制初探

Hessian 機制初探

 

作者:終南   <[email protected]>

 

 

Hessian 這個輕量級 Web 服務框架的結構基本如下圖所示:

1. Web 服務

Web 服務是通過在 Web 服務器上部署 Servlet 來提供的。在 HessianServlet 的初始化配置中,參數 home-api 用來指定該 Web service 能夠提供的服務,參數 home-class 用來指定提供具體服務的類,也即實現了 home-api 所指定接口的類。如果需要提供多個服務,可以部署多個 HessianServlet,並指定相應的 home-api 和 home-class 參數。

HessianServlet 是一個普通的 Servlet。主要接收來自 Hessian 客戶端的請求,並將來自客戶端 InputStream 和 OutputStream 包裝成 Hessian 自己的 Input 和 Output,然後調用 HessianSkeleton 類處理客戶的請求、並將處理結果返回給客戶端。在初始化的過程中,HessianServlet 會根據參數 home-class 創建一個相應的實例,作爲背後真正的 Web 服務提供者相應客戶端的請求。
HessianSkeleton 解析來自客戶端所請求的方法和參數信息,利用 Java 中的反射機制,調用由 HessianServlet 在初始化過程中創建的 Web 服務實例中對應的方法,然後將結果返回給客戶端。

2. 客戶端

客戶端主要使用了 Java 的動態代理機制。當客戶端使用 HessianProxyFactory 創建一個實例時,並不是真正創建了一個 Web 服務接口類型的實力,而是創建了一個 Java 代理實例。隨後在調用 Web 服務接口的方法時,實現了 InvocationHandler 接口的 HessianProxy 類將方法名稱、參數等信息通過 HttpURLConnection 發送給 Web service 服務器,然後處理服務器的響應並將結果返回。

3. 序列化

客戶端與 Hessian 服務通訊時,使用的是 Hessian 定義的二進制協議,除了簡單數據類型的傳遞外,還涉及到對象信息的傳遞,因此就涉及到對象的序列化問題,也即將對象轉換成實在的二進制流通過網絡進行傳遞,以及將收到的二進制流重新轉換成對象實例。Hessian 提供了對很多類型的序列化操作,如基本類型:int, double. char, string, 數組等,較爲複雜的常用類型:Number, BigDecimal, java.sql.Date, Timestamp, File, Array,Throwable等。對於其他對象類型,Hessian 利用 JavaSerializer 和 JavaDeserializer 來進行序列化操作,不過這些類型需要實現 Serializable 接口,也就是不管這些類型是直接作爲參數、還是作爲返回值,還是參數或者返回值涉及到這些類型,都必須實現 Serializable。

4. 參考

(1)Hessian 簡介

(2)在應用中使用 Hessian

(3)Hessian 官方網站

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章