相比WebService,Hessian更簡單、快捷。采用的是二進制RPC協議,因為采用的是二進制協議,所以它很適合于發送二進制數據。下面演示一個簡單的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添加到環境變量里。
推薦采用面向接口編程,因此,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。
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”);