相比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”);