原本系统之间通信采用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 将结果对象进行序列化,传输至调用端。
 
 
 
 
 
 

Hessian简要入门的更多相关文章

  1. 远程调用——hessian使用入门

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...

  2. Hessian基础入门案例

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...

  3. 网络简要<入门篇>对应配置代码

    交换机的配置 (1)交换机的模式: switch>    用户模式,可以查看设备的部分内容 SW-3ceng>enable SW-3ceng#          进入特权模式,可以查看更多 ...

  4. YAML简要入门

    这是一篇简单的YAML入门教程,目的是让你知晓什么YAML,以及YAML的基础语法.方便接下来学习如何使用Golang解析YAML.如果想获得更多YAML的知识,请查看http://yaml.org ...

  5. Docker 基础命令 简要入门

    本文出自:http://www.cnblogs.com/scoter2008,本文将持续更新所有docker都可以通过man查看帮助:man docker [ps|top|run|...]1.列出正在 ...

  6. 网络简要<入门篇>

    OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...

  7. Hessian最佳实践

    前言:本文主要介绍‘独立的Hessian技术’与‘结合Spring技术’的两种Hessian接口开发模式及代码示例. 一.独立的Hessian技术开发步骤 Hessian-Java服务器端必须具备以下 ...

  8. GIT入门篇-基本概念与操作

    GIT 首先必须说明的是, 这篇文章不是阐述GIT原理性和比较深入的文章.只是对于日常开发中比较常用的需求的总结和GIT这些命令大体的原理解释.所以掌握这个只能说能够应付一定的开发需求.但是如果你是个 ...

  9. Mac电脑C语言开发的入门帖

    本文是写给Mac电脑开发新手的入门帖,诸神请退散. C语言 C语言可说是电脑环境中的"镇国神器",从发明至今,虽然C语言的使用者缓慢的减少,但从当前市场应用情况看,尚无一台电脑能够 ...

随机推荐

  1. ansible配置文件 ansible.cfg的一点说明

    ansible配置文件 ansible.cfg的一点说明 > ansible --version ansible 2.1.1.0 config file = /etc/ansible/ansib ...

  2. Flask-WTF表单

    Web表单 Web 表单是 Web 应用程序的基本功能. 它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过表单 ...

  3. Android程序员学WEB前端(4)-HTML(4)-注册页面-Sublime

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/76576031 觉得博文有用,请点赞,请评论,请关注,谢谢!~ 注册页面1: <! ...

  4. Gradle2.0用户指南翻译——第二章. 概述

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  5. css实现加载中的效果

    那天闲着,学习了一下样式效果,自己实现了一个简单的加载中的效果 废话不多说,开始吧!! 一.实现一个圆环       要实现圆环,首先我们需要知道盒模型里面border的本质,先来看一个效果吧 从上面 ...

  6. 機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答 (续)

    这里写的是  习题1 中的    18 , 19, 20 题的解答. Packet 方法,我这里是这样认为的,它所指的贪心算法是不管权重更新是否会对train data有改进都进行修正,因为这里面没有 ...

  7. Ubuntu 16.04安装QQ国际版

    QQ国际版wine-qqintl的下载链接:http://pan.baidu.com/s/1jIwKdXs sudo apt install  libgtk2.0-0:i386 sudo apt in ...

  8. linux 文件上传&软件安装(rpm)

    文件的上传与下载(linux -linux ) 实例1:从远处复制文件到本地目录命令:scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /o ...

  9. centos7最小化安装后配置笔记

    一.安装wget(步骤2备用) yum install wget -y 二.切换yum源为阿里云 备份旧源: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum ...

  10. 【解题报告】13级个人结业赛(二) ——动(dou)态(bu)规(hui)划(zuo)专场

    额.果然是动(dou)态(bu)规(hui)划(zuo)专场... A: 翻倍序列 dp[i][j]表示第i个位置是j的情况的个数那么dp[i][j]=∑dp[i-1][k]   (j%k==0)初始 ...