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