zoukankan      html  css  js  c++  java
  • Hessian介绍

    Hessian是什么
     
    Hessian类似Web Service,是一种高效简洁的远程调用框架。
    Hessian的主页:http://hessian.caucho.com/
     
    有关网上的对Hessian的评价很高,下面摘录了一段:
    相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。    

    Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。    

    Hessian处理过程示意图:    

    客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
     
     
    Hessian的有着不同语言的版本:Java、Flash、Python、C++、.NET C#、D、Erlang、PHP、Ruby,Delphi等等,以后也许会更多更多。
    Java版的Hessian性能稍逊于RMI。Hessian最大的优势就是简单而且强大!
     
    下面是我第一个Hessian应用的例子:
     
    环境:
    jdk1.5
    hessian-4.0.1.jar
    apache-tomcat-6.0.20.zip
     
    下载地址
     
    项目代码:
     
    开发web应用:
    Hessian与RMI机制类似,你需要先定义接口,通过接口规范服务,客户端也是用同样的接口来调用服务的。
    package lavasoft.suths.service; 

    /** 
    * 服务实现 

    * @author leizhimin 2009-8-14 11:45:44 
    */
     
    public class HelloService implements Hello { 
            public String sayHello(String name) { 
                    return "Hello " + name + "!"
            } 
    }
     
    服务的具体实现
    package lavasoft.suths.service; 

    /** 
    * 服务实现 

    * @author leizhimin 2009-8-14 11:45:44 
    */
     
    public class HelloService implements Hello { 
            public String sayHello(String name) { 
                    return "Hello " + "name" + "!"
            } 
    }
     
    配置web.xml,这个XML配置比较烦人,如果你有很多Service接口,你需要配置很多歌Servlet。但不用担心,Spring会为你解除烦恼。
    <?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" 
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
                     version="2.5"> 

            <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>lavasoft.suths.service.HelloService</param-value> 
                    </init-param> 
                    <init-param> 
                            <param-name>home-api</param-name> 
                            <param-value>lavasoft.suths.service.Hello</param-value> 
                    </init-param> 
                    <load-on-startup>1</load-on-startup> 
            </servlet> 

            <servlet-mapping> 
                    <servlet-name>hello</servlet-name> 
                    <url-pattern>/hello</url-pattern> 
            </servlet-mapping> 
    </web-app>
     
    部署web应用,并启动tomcat。
     
     
    写客户端代码:

    客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。

    package lavasoft.suths.service; 

    import com.caucho.hessian.client.HessianProxyFactory; 

    import java.net.MalformedURLException; 

    /** 
    * 客户端调用(会依赖服务接口) 

    * @author leizhimin 2009-8-14 11:52:33 
    */
     
    public class Client { 
            public static void main(String[] args) throws MalformedURLException { 
                    String url = "http://localhost:8080/hessianapp/hello"; 
                    HessianProxyFactory factory = new HessianProxyFactory(); 
                    Hello hello = (Hello) factory.create(Hello.class, url); 
                    System.out.println(hello.sayHello("Hessian")); 
            } 
    }
    远程客户端调用,其实可以是本地,也可以是远程,这里写个简单的main方法测试一把。
     
     
    从此可以看到,Hessian的伟大之处是:比WebService、RMI都简洁。
  • 相关阅读:
    1348:【例4-9】城市公交网建设问题
    1392:繁忙的都市(city)
    1381:城市路(Dijkstra)
    初识微积分
    进阶数论(1)逆元
    [题解] Codeforces Round #549 (Div. 2) B. Nirvana
    简单数论之整除&质因数分解&唯一分解定理
    [题解]ybt1365:FBI树(fbi)
    [题解]一本通1240:查找最接近的元素
    [题解]NOIP2018(普及组)T1标题统计(title)
  • 原文地址:https://www.cnblogs.com/duanxz/p/4494222.html
Copyright © 2011-2022 走看看