Hessian

系统 2197 0

一、 简介

         Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library

1 、是基于什么协议实现的 ?

          基于 Binary-RPC 协议实现。

2 、怎么发起请求 ?

          需通过 Hessian 本身提供的 API 来发起请求。

3 、怎么将请求转化为符合协议的格式的 ?

          Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。

4 、使用什么传输协议传输 ?

          Hessian 基于 Http 协议进行传输。

5 、响应端基于什么机制来接收请求 ?

          响应端根据 Hessian 提供的 API 来接收请求。

6 、怎么将流还原为传输格式的 ?

          Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。

7 、处理完毕后怎么回应 ?

          处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。

二、 Hessian  调用实例

a)           编写服务端代码

写一个接口:

public   interface   Hello  {

     public  String seeHello();

}

编写一个实现:

public   class  HelloImpl  implements  Hello {

 

     private  String  helloStr  =  “Hello World” ;

 

     public  String getHelloStr() {

        return   helloStr ;

     }

 

     public   void  setHelloStr(String helloStr) {

        this . helloStr  = helloStr;

     }

 

     public  String seeHello() {

        return   helloStr ;

     }

 

}

配置 WEB-INF.xml  部署到 Web 容器中:

          <servlet>   

               <servlet-name>hello</servlet-name>   

               <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>   

               <init-param>   

                   <param-name>home-class</param-name>   

                   <param-value>com.alisoft.enet.hessian.HelloImpl</param-value>   

               </init-param>   

               <init-param>   

                   <param-name>home-api</param-name>   

                   <param-value>com.alisoft.enet.hessian.Hello</param-value>   

               </init-param>   

          </servlet>          

  

          <servlet-mapping>   

               <servlet-name>hello</servlet-name>   

               <url-pattern>/hello.xsp</url-pattern>   

          </servlet-mapping>  

             Ok ,服务端代码编写完毕。

        

b)           编写客户端代码

 

public   class  HelloServiceTest {

 

   public   static   void  main(String[] args)  throws  Exception {

    

      String url =  “http://localhost/hessian/hello.xsp” ;

 

      HessianProxyFactory factory =  new  HessianProxyFactory();

      Hello hello = (Hello) factory.create(Hello. class , url);

 

      System. out .println( 远程调用结果 : “  + hello.seeHello());

 

   }

}

 

          执行客户端,即可返回相应的结果:

                    远程调用结果 : Hello World         

          上面的例子是基于  caucho  提供的 Hessian  包的基础上做的,实际上 Spring Hessian 调用只是对这个进行简单的封装,便于使用。

   

三、Hessian机制

 

 

 

Hessian

  那么 Hessian 就是把 Java 对象转变成   字节序列,然后通过 Http 传输到   目标服务器上(主机 2 ),主机 2 收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理。处理完成以后以同样的方式返回数据。

 

现在我们回头看看例子中的配置( WEB-INF.XML :

配置的 Servlet   com.caucho.hessian.server.HessianServlet

对应的参数:接口 (home-api) com.alisoft.enet.hessian.Hello

                             实现 (home-class): com.alisoft.enet.hessian.HelloImpl

 

 

 

HessianServlet  中的实现代码如下(略过部分代码):

 

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;

InputStream is = request.getInputStream();
OutputStream os = response.getOutputStream();

//输入流
Hessian2Input in = new Hessian2Input(is);
SerializerFactory serializerFactory = getSerializerFactory();
in.setSerializerFactory(serializerFactory);

//输出流
AbstractHessianOutput out;
int major = in.read();
int minor = in.read();
out = new Hessian2Output(os);

out.setSerializerFactory(serializerFactory);

_homeSkeleton.invoke(in, out);

 

整个执行步骤如下:

l    接收输入流,并通过 SerializerFactory 转化为  Hessian  特有的   Hessian2Input

l    设置输出流,并通过 SerializerFactory 转化为  Hessian  特有的   Hessian2Output

l    根据配置的接口和实现参数,调用服务,并把结果写入到输出流   Hessian2Output

l     Out.close()

 

Hessian 远程访问基于序列化和反序列化的方式。当程序运行时,程序所创建的各种对象都位于内存中,当程序运行结束,这些对象就结束了生命周期。对象的序列化主要有两种用途:

l    把对象的字节序列永久地保存到硬盘上,通常是放在一个文件中。

l    在网络上传输对象的字节序列

Hessian


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论