hessian

一、最简单的hessian调用--入门

一、远程通讯协议的基本原理

 

    Hessian是Caucho开发的一种二进制Web Service协议。支持目前所有流行的开发平台。

    优点:Hessian协议和web service常用的SOAP协议类似,也是将协议报文封装在HTTP封包中,通过HTTP信道传输的。因此Hessian协议具有与SOAP协议同样的优点,即传输不受防火墙的限制(防火墙通常不限制HTTP信道)。Hessian协议的优点在于:它采用二进制编码,因此传输数据量比SOAP协议要小得多。实践证明,传输同样的对象,Hessian协议传输的数据量比SOAP协议低一个数量级。因此在复杂网络环境下的分布式应用使用Hessian协议可以获得更好的性能和可靠性。

  网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络 IO ,主要有 bio 、 nio 、 aio 三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。

只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。

二、应用级协议Binary-RPC

  Binary-RPC(Remote Procedure Call Protocol,远程过程调用协议)是一种和RMI(Remote Method Invocation,远程方法调用)类似的远程调用的协议,它和RMI 的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ) ,这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。

  Binary -RPC 协议的一次远程通信过程:

  1 、客户端发起请求,按照 Binary -RPC 协议将请求信息进行填充;

  2 、填充完毕后将二进制格式文件转化为流,通过传输协议进行传输;

  3 、接收到在接收到流后转换为二进制格式文件,按照 Binary -RPC 协议获取请求的信息并进行处理;

  4 、处理完毕后将结果按照 Binary -RPC 协议写入二进制格式文件中并返回。

问题总结:

  1 、传输的标准格式是标准格式的二进制文件。

  2 、怎么样将请求转化为传输的流?将二进制格式文件转化为流。

  3 、怎么接收和处理流?通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入 XML 中返回。

  4 、传输协议是?http

三、Hessian介绍

服务端发布服务

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在Spring中的工作流程如下:
(1)客户端:
a.发送远程请求:
客户端程序-->调用公共接口的方法-->Hessian拦截器拦截请求-->封装远程调用请求-->Hessian代理-->通过HTTP协议发送远程请求代理到服务端
b.接收远程调用响应:
远程调用结果-->HTTP响应-->客户端
(2)服务端:
a.接收远程调用请求:
HessianServiceExporter接收请求-->将远程调用对象封装为HessianSkeleton框架-->HessianSkeleton处理远程调用请求
b.返回远程调用响应:
HessianSkeleton封装远程调用处理结果-->HTTP响应-->客户端
 

Hessian入门范例

4.1下载Hessian

去Hessian官网:http://hessian.caucho.com/下载最新的Hessian包

在进行基于Hessian的项目开发时,应当注意以下几点:

  JAVA服务器端必须具备以下几点:

  1. 包含Hessian的jar包。
  2. 设计一个接口,用来给客户端调用。
  3. 实现该接口的功能。
  4. 配置web.xml,配好相应的servlet。
  5. 对象必须实现Serializable 接口
  6. 对于复杂对像可以使用Map的方法传递。

  客户端必须具备以下几点:

  1. java客户端包含Hessian.jar的包。
  2. 具有和服务器端结构一样的接口。
  3. 利用HessianProxyFactory调用远程接口。

4.3、设计一个提供服务接口来给客户端调用

接口的代码如下:
实现:
复制代码

4.5、配置web.xml,添加对HessianServlet的配置

如下面的红色部分所示:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6     <welcome-file-list>
 7         <welcome-file>index.jsp</welcome-file>
 8     </welcome-file-list>
 910     <servlet>
11         <!-- 配置 HessianServlet,Servlet的名字随便配置,例如这里配置成ServiceServlet-->
12         <servlet-name>ServiceServlet</servlet-name>
13         <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
14         
15         <!-- 配置接口的具体实现类 -->
16         <init-param>
17             <param-name>service-class</param-name>
18             <param-value>gacl.hessian.service.impl.ServiceImpl</param-value>
19         </init-param>
20     </servlet>
21     <!-- 映射 HessianServlet的访问URL地址-->
22     <servlet-mapping>
23         <servlet-name>ServiceServlet</servlet-name>
24         <url-pattern>/ServiceServlet</url-pattern>
25     </servlet-mapping>2627 </web-app>
复制代码

   到此,Hessian的服务端编写就算是完成了。

  配置完成之后,启动项目,在地址栏输入:http://localhost:端口号/项目名/ServiceServlet,如果显示结果如下,说明配置和接口编写正确:

  Hessian Requires POST

4.6、编写Hessian的测试客户端

类打包成jar包提供给客户端进行调用,打成Jar包的过程如下图所示

编写HessianClient客户端,HessianClient类的代码如下所示:

 
--------------------------------------------------------------------------------------------------------------------------------------------------------
 
二、hessian与spring整合
首先,服务器端配置,web.xml配置
此处,dispatcherServlet两处相同,但是测试时可以通过,但是项目中应该只有一处。
再增加一个配置文件
hessianServiceExporter导出为hessian服务。
服务端配置好后,启动tomcat,浏览器打开如下,

HTTP Status 405 - HessianServiceExporter only supports POST requests

则说明正确。
客户端配置,增加一个配置文件。
完成。
注意:可能发生
1.对象的命名空间要一致 
2.注意传递的数据类型
原文地址:https://www.cnblogs.com/jingRegina/p/5175536.html