zoukankan      html  css  js  c++  java
  • Hessian的使用与介绍

    简介
    相比WebServiceHessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。
    Hessian
    通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。SpringDispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessianserver端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。
    Hessian
    处理过程示意图:
    客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果

    环境搭建
    Hessian
    的下载和安装请按如下步骤进行:
    1)登http://www.caucho.com/hessian/下载Hessian
    2)把Hessian相应的Jar包放到Web应用下,所有的jar文件都应该放在WEB-INF/lib下,该文件也不例外。
    两种方式
    Hessian
    这种方式主要是适用于工程中没有适用像spring框架的情况下,好处是配置方便,但是当内容多的情况下,配置的内容很多。
    下面我就把我在做实例的一些相关步骤描述如下:
    1
    :把Hessian相应jar包放入至工程中。
    2
    :由于Hessian是采用面向接口编程的,所以编写一个接口,因为客户端仅仅需要接口,而无须真实的实现类。
    package jzh.demo;
    public interface IHello {
    String sayHello();
    }
    3
    :编写一个类实现这个接口。
    package jzh.demo.impl;
    import jzh.demo.IHello;
    import com.caucho.hessian.server.HessianServlet;
    public class Hello extends HessianServlet implements IHello {
    public String sayHello() {
    return "Hello world";
    }
    }

     


    4

    web.xml的详细配置
    <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>jzh.demo.imple.Hello</param-value>
    </init-param>
    <init-param>
    <param-name>home-api</param-name>
    <param-value>jzh.demo.IHello</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>

     



    5

    :客户端远程调用服务器端提供的接口,利用的就是HessianHessianProxyFactory,来实现远程代理。
    1
    ) 把服务器端的生成的jar包,放入工程中。
    2
    ) 相应的片段程序如下:
    String url = "http://220.114.108.185:8080/Hessian/Hello";
    HessianProxyFactory factory = new HessianProxyFactory();
    try {
    IHello hello =(IHello)factory.create(IHello.class,url);
    System.out.println(hello.sayHello());
    } catch (MalformedURLException e) {
    e.printStackTrace();
    }

     


    6

    :功能完成。
    Hessian
    Spring整合
    相比上一种方式,这个方式就有点麻烦了。Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。SpringDispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了请求转发器,该转发器将匹配/remoting/*的请求截获,转发给contextbean处理。而HessianServiceExporter提供bean服务。
    所以HessianSpring整合主要就是一下两个工作:
    1
    :通过DispatcherServlet来拦截URL请求。
    2
    HessianServiceExporter提供bean服务,Spring使用HessianServiceExporter,将一个常规bean导出成Hessian服务。
    下面我就把我在做实例的一些相关步骤描述如下:
    1
    :和上面的一样。
    2
    :和上面的一样。
    3
    :和上面的一样。
    4
    web.xml的详细配置
    <servlet>
               <servlet-name>remoting</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
               <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
               <servlet-name>remoting</servlet-name>
               <url-pattern>/remoting/*</url-pattern>
    </servlet-mapping>
    5
    :配置remoting-servlet.xml文件
    <!-- 
    定义普通bean实例-->
        <bean id="hello" class="jzh.demospring.impl.Hello"/>
        <!-- 
    使用HessianServiceExporter 将普通bean导出成Hessian服务-->
        <bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
               <!-- 
    需要导出的目标bean-->
               <property name="service" ref="hello"/>
               <!--  Hessian
    服务的接口-->
               <property name="serviceInterface" value="jzh.demospring.IHello"/>
    </bean>
    6
    :客户端定义一个remoting-client.xml文件
    <bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
    <property name="serviceUrl">
    <value>http://220.114.99.62:8080/HessianSpring/remoteing/HessianRemoting</value>
    </property>
    <property name="serviceInterface">
    <value>jzh.demospring.IHello</value>
    </property>
    </bean>

     


    7
    :客户端调用。
    try
    {                                                              
    ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");

    IHello hello =(IHello)context.getBean("myServiceClient");

    System.out.println(hello.sayHello());
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    注意事项
    1
    :启动tomcat的时候,出现如下问题:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet。,而在工程中是可以找到相应的jar文件,这究竟是什么问题。
    解决方法:可能是在工程的WEB-INF/lib下面没有加载相应的jar文件
    2
    org.springframework.remoting.RemoteAccessException: Cannot access Hessian service at [http://61.152.162.173/remote/remoteService];
    解决方法:出现这个异常一般是因为服务端操作出现异常引起的

  • 相关阅读:
    Leetcode & CTCI ---Day 4
    Leetcode & CTCI ---Day 3
    Leetcode & CTCI ---Day 2
    Leetcode & CTCI ---Day 1
    编码格式坑之UTF-8
    15. 3Sum
    第十六周助教总结-第二组
    第十五周助教总结-第二组
    第十四周助教总结-第二组
    第十三周助教总结-第二组
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9332029.html
Copyright © 2011-2022 走看看