zoukankan      html  css  js  c++  java
  • Hessian简要入门

     
    原本系统之间通信采用Restful Web Service,但其中没有考虑安全性问题,因此决定使用稍微复杂点的二进制协议,Hessian服务。
     
    Hessian是一个轻量级的Remoting On HTTP工具,使用简单的方法提供了RMI的功能,相比Web Service,Hessian更简单,快捷,采用的是二进制RPC协议。
     
    Hessian处理过程的简要流程:
     
    客户端 - 序列化写到输出流 - 远程方法(服务器端) - 序列化写到输出流 - 客户端读取输入流 - 输出结果
     
    Hessian通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。如果集成到Spring中,可以通过DispatcherServlet完成此功能,DispatcherServlet可以将匹配模式的请求转发到Hessian服务。
     
    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
     
     
    配置web.xml,将任意请求都映射到该Dispatcher中。
     
    首先,使用SimpleUrlHandlerMapping,制定对应的service URL,和对应的服务接口,服务实现:
     
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="order" value="100"/>
        <property name="urlMap">
            <map>
                <entry key=“/remote/xxxService" value-ref="diabloService"/>
            </map>
        </property>
    </bean>
    
    <bean id="diabloService" class="org.springframework.remoting.caucho.HessianServiceExporter">
        <property name="service" ref="diabloTaskService"/>
        <property name="serviceInterface" value="com.xxxx.IXXXTaskService"/>
    </bean>
    
    <bean id="diabloTaskService" class="com.xxxx.framework.hessian.XXXTaskServiceImpl"/>
     
     
    在客户端和服务端之间,需要共享服务接口对象以及接口中使用的对象,注意自定义的对象由于要进行二进制传输,必须要实现java.io.Serializable接口。比较好的方式使用一个公用的maven私服,这样就可以避免接口改动造成的频繁jar包传输。
     
    在客户端中,需要知道Hessian服务对应的Url,这个是通过上面所说的service url以及服务器地址,端口得到的。
     
    客户端方面的方法也比较简单,通过Url得到对应的服务代理,来进行下一步操作:
     
     
    HessianProxyFactory factory = new HessianProxyFactory();
    try {
        String url = "http://127.0.0.1:8888/remote/xxxService";
        IXXXTaskService xxxTaskService = (IXXXTaskService) factory.create(IXXXTaskService.class, url);
        XXXResultStatus status = xxxTaskService.submitTask("211", contentBuilder.toString());
        System.out.println(status);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    
     
     
    如果服务已经启动,那么该服务肯定执行成功。
     
    在Spring中调用Hessian服务也非常简单和容易,只需要在任务中新建一个HessianProxyFactoryBean,并指定对应的服务url和服务接口即可。
     
     
    <bean id="testHessianService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
           <property name="serviceUrl" value="http://localhost:8888/spring2/hessian/hessianService"/>
           <property name="serviceInterface" value="com.cjm.webservice.hessian.HessianService"/>
    </bean>
     
     
    Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library,基于 Binary-RPC 协议实现,需通过 Hessian 本身提供的 API 来发起请求,Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流,Hessian 基于 Http 协议进行传输,响应端根据 Hessian 提供的 API 来接收请求,Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了,处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。
     
     
     
     
     
     
  • 相关阅读:
    Ngui使用随心记
    Ngui分辨率适配
    最大堆(优先队列)
    循环队列 & 栈的共用空间
    C#顺序表 & 单向链表(无头)
    IntelliJ Idea 常用快捷键列表
    写增删改查遇到的小问题总结
    用JS解决html页面间获取context-path问题
    html 页面如何获得url中的参数
    @RequestBody和@RequestParam区别
  • 原文地址:https://www.cnblogs.com/mmaa/p/5789889.html
Copyright © 2011-2022 走看看