Hessian實現遠端呼叫
阿新 • • 發佈:2018-12-26
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提供webservice:
純Hessian實現
配合Spring框架實現
在開始之前當然需要到官網上下載相關的lib包,放入專案的/WEB-INF/lib/下
【一】、純Hessian實現步驟:
1.基本程式碼
首先編寫一個服務的介面類:HelloHessian.java
Java程式碼
- package michael.hessian;
- import java.util.List;
- import java.util.Map;
- /**
- * @author michael
- *
- */
- publicinterface HelloHessian {
- String sayHello();
- MyCar getMyCar();
- List myLoveFruit();
- Map myBabays();
- }
一個java bean檔案MyCar.java:
Java程式碼
- package michael.hessian;
- import java.io.Serializable;
- /**
- * @author michael
- *
- */
- publicclass MyCar implements Serializable {
- /**
- *
- */
- privatestaticfinallong serialVersionUID = 4736905401908455439L;
- private String carName;
- private String carModel;
- /**
- * @return the carName
- */
- public String getCarName() {
- return carName;
- }
- /**
- * @return the carModel
- */
- public String getCarModel() {
- return carModel;
- }
- /**
- * @param pCarName the carName to set
- */
- publicvoid setCarName(String pCarName) {
- carName = pCarName;
- }
- /**
- * @param pCarModel the carModel to set
- */
- publicvoid setCarModel(String pCarModel) {
- carModel = pCarModel;
- }
- /**
- * @see java.lang.Object#toString()
- * @return
- */
- @Override
- public String toString() {
- return"my car name:[" + this.carName + "] model:[" + this.carModel
- + "].";
- }
- }
服務端介面的實現類:HelloHessianImpl.java
Java程式碼
- package michael.hessian.impl;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import michael.hessian.HelloHessian;
- import michael.hessian.MyCar;
- /**
- * @author michael
- *
- */
- publicclass HelloHessianImpl extends HessianServlet implements HelloHessian {
- public MyCar getMyCar() {
- MyCar car = new MyCar();
- car.setCarName("阿斯頓·馬丁");
- car.setCarModel("One-77");
- return car;
- }
- public Map myBabays() {
- Map map = new HashMap();
- map.put("son", "孫吳空");
- map.put("daughter", "孫小美");
- return map;
- }
- public List myLoveFruit() {
- List list = new ArrayList();
- list.add("apple");
- list.add("kiwi");
- list.add("orange");
- return list;
- }
- public String sayHello() {
- return"welcom to Hessian";
- }
- }
2.配置檔案web.xml修改
在web.xml配置檔案裡增加如下資訊:
Xml程式碼
- <servlet>
- <servlet-name>HelloHessian</servlet-name>
- <servlet-class>
- com.caucho.hessian.server.HessianServlet
- </servlet-class>
- <init-param>
- <param-name>home-class<param-name>
- <param-value>michael.hessian.impl.HelloHessianImpl<param-value>
- < /init-param>
- <init-param>
- <param-name>home-api<param-name>
- <param-value>michael.hessian.HelloHessian<param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>HelloHessian</servlet-name>
- <url-pattern>/HessianService</url-pattern>
- </servlet-mapping>
3.java客戶端驗證
Java程式碼
- package michael.hessian.client;
- import java.net.MalformedURLException;
- import java.util.Map;
- import michael.hessian.HelloHessian;
- import michael.hessian.MyCar;
- import com.caucho.hessian.client.HessianProxyFactory;
- /**
- * @author michael
- *
- */
- publicclass HessianClientTest {
- /**
- * @param args
- */
- publicstaticvoid main(String[] args) {
- String url = "http://localhost:8082/J2EE_sjsky/HessianService";
- HessianProxyFactory factory = <