<a target="_blank" href="http://hessian.caucho.com/doc/hessian-overview.xtp">原文連結點這裡</a>
hessian 是一個用于連接配接網絡服務的二進制協定,他的com.caucho.hessian.client 和 com.caucho.hessian.server包不依賴于任何其他resin的類(resin是caucho公司的一個很快的web伺服器,hessian是他的一部分),是以他能夠應用于更小的用戶端,比如java applet。其實也是因為不依賴是以也可以在任何容器比如tomcat,jetty中很友善的使用。
因為他是一個短小的協定,它能夠應用于手機端,來連接配接resin這樣的web伺服器。 因為它比較精悍,是以他能夠使用在ejb中。
就算hessian規範内容的本身,也是短小而令人關注的。 這個是說很多通訊架構其實都可以使用這個規範來序列化及反序列化類。
從一個java用戶端使用hessian服務就像調用一個方法。 hessianproxyfactory建立的代理可以看為一個普通的java對象,隻不過這個對象有可能在遠端連接配接錯誤的時候抛出協定異常。
hessianproxyfactory依賴于jdk1.3及以上版本。
每一個服務将有一個java接口用于描述這個服務。下面的這個hello ,world 示例僅僅傳回了string, 因為hessian支援java的序列化,一次直接使用java的類型。
下面是一個單獨的hessian client, 這個client建立了hessianproxyfactory, 用戶端使用factory根據給定的url及java
api接口建立一個stub. 這個存根是一個該java api的實作類。
這樣就夠了,不需要任何額外的操作了。服務還可以添加其他的方法,其可以包含任何java類型的傳回值,或者是任何java類型的參數。
hessian service
雖然大多數的hessian服務都将使用resin-cmp 和 resin-ejb,已充分利用ejb的優點。 但是hessian庫使得它能夠通過hessianservlet進行擴充。
任何共有的方法都會識别為一個服務方法,是以建立服務方法跟寫一個普通的方法是一樣的。
因為服務是使用servlet來實作的,是以可以像普通的servlet一樣使用servletcontext中的内容。
在resin3.0中的配置:
通用的web.xml的配置:
hessian類可以被用來做序列化和反序列化。
應用程式使用hessian來做序列化是很高效的。
當序列化的接口比簡單類型和string更負責的時候請確定該類實作了java.io.serializable接口。
當應用程式想需要傳輸大量的二進制資料時,可以使用流來避免建立很大的位元組數組。
隻有方法的最後一個參數可以是inputstream,因為資料食雜方法調用的時候讀取的。
例如,一個檔案下載下傳伺服器也是可以有效的使用hessian來搭建的
在下面的例子中,使用者需要直接的控制hessian協定,因為在方法傳回前需要緩存這個檔案。
如果傳回值是一個inputstream, 那麼在finally塊中調用inputstream.close()是非常必要的,
因為在所有資料讀取完且關閉stream前,hessian不會關閉底層的httpstream.
hessian debugging
hessian debug功能需要3.1.3或者更高版本
開啟hessian servlet debug攏共需要兩步。首先,"debug" init-param必須設定在web.xml中,hessianservlet的日志級别必須為fine.resin上的配置如下:
日志内容:
hessian3.1.3介紹了流api, 用戶端可以使用流api發送周期性資料,例如在comet-style顯存監控項目中持續接收資料
hessian client for a cell-phone
hessian甚至能夠使用在小型java裝置中,通過如下的類,hessian能夠在j2me中進行使用:
microhessianinput
microhessianoutput
hessianremote
hessianserviceexception
hessianprotocolexception
下面的代碼示例了使用手機作為一個用戶端: