相比WebService,Hessian更簡單、快捷。采用的是二進制RPC協議,因為采用的是二進制協議,所以它很適合于發送二進制數據。下面演示一個簡單的Hessian示例程序。

14.5.1.1 Hessian的下載和安裝

Hessian的下載和安裝請按如下步驟進行:

(1)登陸http://www.caucho.com/hessian/下載Hessian的Java二進制包,筆者成書之時,Hessian的最新版本是Hessian 3.0.13。下載hessian-3.0.13.jar文件。

(2)將該文件復制到名為hessian的Web應用下,所有的jar文件都應該放在WEB-INF/lib下,該文件也不例外。

(3)為了編譯Hessian客戶端程序,建議將hessian-3.0.13.jar添加到環境變量里。

14.5.1.2 Hessian服務器端

推薦采用面向接口編程,因此,Hessian服務建議通過接口暴露。服務接口如下:

//服務接口

public interface Hello

{

         //方法聲明

    public String hello(String name);

}

接口的實現類如下:

//服務實現類,實現Hello接口

public class HelloImpl implements Hello

{

    public String hello(String name)

    {

           return "hello " + name + "歡迎學習Hessian";

    }

}

這個接口和實現類簡單得難以置信。它們沒有任何特別之處,這正是Hessian的魅力,代碼污染降低到最小。當然,只是示例程序,所以服務也相當簡單。Hessian要求遠程服務通過Servlet暴露出來,必須在web.xml文件中配置該Servlet。web.xml的詳細配置如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!--  Web配置文件的文件頭,包含dtd等信息-->

<!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<!--  Web配置文件的根元素-->

<web-app>

<servlet>

           <!--  配置Servlet名,后面根據該名完成遠程服務映射-->

            <servlet-name>hessianService</servlet-name>

                   <!--  Hessian遠程服務需要HessianServlet暴露Hehes-->

                   <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>

                   <!--  隨應用啟動而啟動>

            <load-on-startup>1</load-on-startup>

                   <!--  使用init-param配置服務的實現類-->

            <init-param>

                 <param-name>service-class</param-name>

                 <param-value>lee.HelloImpl</param-value>

            </init-param>

</servlet>

<!--  映射Servlet的url,該Servlet的url就是Hessian服務名-->

    <servlet-mapping>

            <servlet-name>hessianService</servlet-name>

                   <!--  遠程服務名為hessianService-->

            <url-pattern>/hessianService</url-pattern>

    </servlet-mapping>

</web-app>

將剛才的接口和實現放Web應用的WEB-INF/class路徑下,編譯它們。然后將此web.xml文件放在WEB-INF下,啟動Web服務器。筆者使用的Web服務器是Tomcat5.0.28,Tomcat的端口是8888。則遠程服務的url為:http://localhost:8888/hessian/hessianService。

14.5.1.3 Hessian客戶機端

Hessian的服務可以用HessianProxyFactory工具類調用,還可以在小型智能設備上調用。HessianProxyFactory的create方法,用于獲取Hessian服務的遠程引用。Hessian的客戶端如下:

public class HessianClient

{

    public static void main(String []args) throws Exception

    {

                   //Hessian服務的url

           String url = "http://localhost:8888/hessian/hessianService";

                   //創建HessianProxyFactory實例

           HessianProxyFactory factory = new HessianProxyFactory();

                   //獲得Hessian服務的遠程引用

           Hello d = (Hello) factory.create(Hello.class, url);

                   //調用遠程服務。

           System.out.println("下面調用Hessian服務: " + d.hello("yeeku"));

    }

}

客戶端僅僅需要Hello接口,而無須真實的實現類。如果使用小型智能設備作為客戶端的運行環境,客戶端代碼片段如下:

//創建Hessian輸入流,用于輸入請求

MicroHessianInput in = new MicroHessianInput();

//Hessian服務的url

String url = "http://localhost:8888/hessian/hessianService";

//創建HttpSConnection實例

HttpConnection c = (HttpConnection) Connector.open(url);

//設置參數提交方式

c.setRequestMethod(HttpConnection.POST);

//打開輸出流,準備調用服務器方法

OutputStream os = c.openOutputStream();

//以輸出流創建MicroHessianOutput對象,該對象用于調用hessian的方法

MicroHessianOutput out = new MicroHessianOutput(os);

//調用遠程方法:hello是方法名,yeeku是參數

out.call("hello", “yeeku”);

os.flush();

//打開輸入流,準備接收返回值

is = c.openInputStream();

以輸入流為參數,創建MicroHessianInput對象

MicroHessianInput in = new MicroHessianInput(is);

獲得返回值

Object value = in.readReply(“yeeku”);