zoukankan      html  css  js  c++  java
  • 轻量级远程调用框架-Hessian学习笔记-Demo实现

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据

    .

    这两天有空把hessian接口也学习一下。由于学习是为了以后测试工作而进行的,所以对于hessian和soap机制孰优孰劣就没有深入的研究,这些问题还是留给我们架构师来研究吧。根据网上的文献:Hessian是采用二进制流进行通讯的,所以我想性能应该会好一些,既然通过二进制流传递,是不是对复杂对象的传递有问题呢,我想可能会有些难度,毕竟传递过程中没有象soap这样保留了对象的结构的。这个问题有待以后考证。今天我想把我第一次学习hessian的经历分享一下。

    和ICE,WebService一样,既然作为服务类那么必须有文档公布它的接口形式,客户端用户在通过这个文档来生成代理类。ICE是通过.Ice文件,WebService是通过wsdl,但是hessian没有这个类型的文档,hessian的代理类是直接通过factrory去生成的。所以在做hessian客户端代码之前,需要拿到接口文件interface。下面我们通过一个完整的例子看看hessian服务器端代码和客户端代码如何实现。

    服务器端代码和配置:

    1.  去http://hessian.caucho.com/#Java 下载hessian jar包。

    2.  新建服务器端工程(web工程:hessian),新增接口声明文件new->interface。代码如下:

     

    package com.ems.hessian.service;

    public interface IPrinter {
     public String printstr(); //与服务端的printstr方法对应
     public String printstr(String name); //与服务端的printstr方法对应
    }

     

     

    3.  新建服务器类实现代码,new->class,代码如下

     

    package com.ems.hessian.service.impl;

    import com.ems.hessian.service.IPrinter;

    public class PrinterService implements IPrinter {
     @Override
     public String printstr() {
       return "hello hessian demo.";
      }

     @Override
     public String printstr(String name) {
      // TODO Auto-generated method stub
      return "hello,"+name+", hessian demo.";
     }
    }

     

     

    4.  修改服务器端web.xml文件如下

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="
    http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
      <display-name>HessianDemo</display-name>
      <servlet>
        <servlet-name>hessianService</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
          <param-name>home-class</param-name>
          <param-value>com.ems.hessian.service.impl.PrinterService</param-value>
        </init-param>
        <init-param>
          <param-name>home-api</param-name>
          <param-value>com.ems.hessian.service.IPrinter</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>hessianService</servlet-name>
        <url-pattern>/service</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

     

    上述代码实现如下功能:

             * 指定接口的url

             * 指定API使用的inteface文件

        * 指定服务器类实现的代码

    5.  导出工程为hessian.war,部署到tomcat5的webapps目录下。

    6.  将hessian jar包拷贝到lib目录下。

     

    客户端代码:

    1.  新建客户端工程,新增测试类,代码如下

     

        

    package com.ems.client;

    import com.caucho.hessian.client.HessianProxyFactory;
    import com.ems.rmi.service.IPrinter;

    public class TestClient {

     public static void main(String[] args)

     throws Exception

     {

      String url = "http://127.0.0.1:8080/hessianDemo/service";
      // 创建factory实例

      HessianProxyFactory factory = new HessianProxyFactory();

    factory.setOverloadEnabled(true); //启用方法重载识别  

    // 客户端需实现Basic接口

      IPrinter printer = (IPrinter) factory.create(IPrinter.class, url);

      //System.out.println("Hessian: " + printer.printstr());
      System.out.println("Hessian: " + printer.printstr("Hurry"));

     }

    }

     

    运行客户端代码:可以看见:

     

    Hessian: hello hessian demo.
    Hessian: hello,Hurry, hessian demo.

    。初学者需要源代码的,请留言。

             如果读者有兴趣使用comview去捕捉实际传递的内容,发现根本看不懂传递的内容,因为是以二进制流进行传递的。

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    C++类型转换运算符
    今天开通了博客
    计算每天工时逻辑,去掉可能重叠交叉的数据(由于前端插件存储["11:30","12:00"] 这样的json字符串)
    初次涉及左右值算法(树结构)
    MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结
    关于使用JQuery追加Option标签时使用三元运算符添加选中属性的解决办法
    【Spring】关于SpringMvc监听的知识点
    关于使用三元运算符来判断下拉框选项是否选中的总结
    关于frameset的一些小总结
    关于上传文件的一点总结
  • 原文地址:https://www.cnblogs.com/iplus/p/4464718.html
Copyright © 2011-2022 走看看