zoukankan      html  css  js  c++  java
  • Hessian学习记录

    简介 
    相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。 
    Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个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:客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。 
    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服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,该转发器将匹配/remoting/*的请求截获,转发给context的bean处理。而HessianServiceExporter提供bean服务。 
    所以Hessian与Spring整合主要就是一下两个工作: 
    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]; 
    解决方法:出现这个异常一般是因为服务端操作出现异常引起的  
  • 相关阅读:
    flash中网页跳转总结
    as3自定义事件
    mouseChildren启示
    flash拖动条移出flash无法拖动
    需要一个策略文件,但在加载此媒体时未设置checkPolicyFile标志
    Teach Yourself SQL in 10 Minutes
    电子书本地转换软件 Calibre
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes – Page 31 练习
  • 原文地址:https://www.cnblogs.com/chenying99/p/2555408.html
Copyright © 2011-2022 走看看