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
- *
- */
- public interface HelloHessian {
- String sayHello();
- MyCar getMyCar();
- List myloveFruit();
- Map myBabays();
- }
package michael.hessian;
服务端接口的实现类:HelloHessianImpl.java
package michael.hessian.impl;
Xml代码
- <servlet>
- servlet-name>HelloHessianservlet-name>
- servlet-class>
- com.caucho.hessian.server.HessianServlet
- servlet-class>
- init-param>
- param-name>home-classparam-name>
- param-value>michael.hessian.impl.HelloHessianImplparam-value>
- init-param>
- >home-api>michael.hessian.HelloHessianload-on-startup>1load-on-startup>
- servlet>
- servlet-mapping>
- servlet-name>
- url-pattern>/HessianServiceurl-pattern>
- servlet-mapping>
- >
3.java客户端验证
package michael.hessian.client;
运行结果如下:
【二】、spring+hessian 实现服务端:
1.基本代码见上面的demo
>springhessian>
和上面的例子相似,只需要把访问的url替换成新的即可如下:
运行结果和上面例子一样。
4.spring配置客户端
增加一个spring的bean配置文件hessian-client.xml
Xml代码
xml version="1.0" encoding="UTF-8"?>
import java.util.Map;
运行结果和上面完全一致。
5.com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d异常处理
我在spring+hessian整合测试过程中,客户端调用时,发生了异常,而服务端错误内容如下:
Java代码
经查资料发现原始是hessian和spring的版本不兼容引起的,重新下载hessian-3.1.6.jar导入项目,一起运行正常,测试完全通过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。