Hessian协议的使用
Hessian加密传输
由于项目需要需要研究下hessian的加密传输。
于是翻出hessian源码,发现com.caucho.hessian.security包下面有两个类X509Encryption和X509Signature,一个是用来加密解密的,一个是用来签名认真的。
很遗憾hessian虽然提供了这两项功能但是它并没有使用上去,甚至还没有给我们开了口子来使用它。
仍然不甘心,于google,baidu,bing多方搜索hessian的内置加密方式如何使用,仍然没有结果。
没有办法只能自己来提供对传输的数据进行加密和解密的方式了。
在这里提供了两套加密解密方式:非对称密钥的RSA和对称密钥的AES。
一、非对称密钥加密算法RSA非对称密钥算法需要一对密钥:公开密钥和私有密钥。
利用公开密钥进行加密后的信息,只有用对应的私有密钥才能解密。
因为加密和解密用的密钥是不一样的,因此,公开密钥是公开的,供所有人使用,并且不会威胁到传递信息和解密密钥的安全,不需要对密钥传递的额外保护。
首先,提供RSA的密钥生成算法,生成公有密钥和私有密钥存入文件中:且看RSAKeyCreater.javaRSAKeyCreater类中createKeyFile()方法生成公钥和私钥分别保存到public_key_file.rsa和private_key_file.rsa文件中,加密和解密时进行使用。
其次,提供加密解密算法,对byte[] 进行加密和解密:且看RSAEncryptionUtil.javaRSAEncryptionUtil的encryptWithPublicKey()方法对信息进行加密,decryptWithPrivateKey()方法对加密后的信息进行解密,分别需要传入公有和私有密钥。
由于提供的算法是对byte[]数组进行加密和解密返回新的byte[],因此我们需要提供一个普通object对象到byte[]之间转化的工具:且看SerializationUtil.javaSerializationUtil类中的serialize()方法将普通java对象序列化成byte[],deserialize()方法将byte[]反序列化成原来的对象。
hessian接口使用总结
Hessian接口使用示例总结一、使用hessian接口准备首先,hessian接口的使用,必须要准备hessian接口的jar包,本文使用的jar包如下:hessian-4.0.7.jarHessian接口的使用是在两个工程之间,工程A作为服务方,B作为使用方(客户端)c二、服务方的配置和服务类的编写A作为服务方,首先向A中导入hessian的jar包,若是maven工程,则直接添加hessian的依赖jar则可,否则直接将jar导入工程lib下面。
依赖添加如下:在A的pom.xml中添加<dependency><groupTd>com.caucho</groupld> <artifa匚tId >hessian actld> </dependency>添加完依赖之后,实现hessian的服务配置实现。
配置hessian的servlet,便于服务方可以解析hessian的服务请求。
在A中web.xml配置hessian的servlet如下:配置完servlet之后,客户端的.hs的方式请求,都会按照servlet的配置,会到hessian-servlet.xml文件中读取配置,找到对应的服务的类方法。
下面配置hessian-servlet.xml 文件。
本文件为spring的配置文件,主要存放hessian的服务方的配置多个hessian接口的配置均可以放到本文件中统一管理。
下面以/hessia nTestService.hs为例解释:配置如下<bean n class= ■匸网川曲宣昭・test ・片它百£存占刃7倉5亡4厂1/1巴兰''>町/12皂£1[17匕杠-』 n am &= *7側趕舊 sJ^rt F M r5ern/ire . h£ J |class = ^org. springfraf^^forkr renting. W?s5J ^nSjer^i cFfir/wr^r ,-><prop&rty name= ir s&rvic^ " ref= i " /><:property nam 轻二 n ^^rvl^inr^rf3c^tr mlu0= Vtw.占呦官.r^jr. I/^saw rfisrs^r^i " /><7bean>Bean name= “hessianTestService 此为"hessian 接口的服务类的 bean 配置,这个大家都懂的, Bean name = /hessianTestService.hs "服务名,以.hs 结尾,同时对应 hessian 的 servlet 的分发 配置 url mapping 女口上面的 servlert 的配置。
hessian服务原理
Hessian是一种轻量级的远程方法调用(RPC)协议,它基于HTTP协议进行传输。
Hessian服务原理主要包括以下几个方面:
1. 方法调用:Hessian允许客户端远程调用服务端的方法,就像调用本地方法一样。
客户端通过发送HTTP请求到服务端,请求中包含方法名和参数。
服务端接收到请求后,执行相应的方法,并将结果返回给客户端。
2. 数据序列化和反序列化:Hessian使用一种二进制序列化格式来编码和解码数据。
这种格式可以有效地处理各种数据类型,包括基本类型、对象和数组。
序列化和反序列化过程由Hessian库自动处理,无需开发者进行额外的编码。
3. 服务端实现:服务端需要实现Hessian服务,将远程调用的方法映射到实际的业务逻辑方法上。
这通常通过实现一个Hessian服务接口或者使用注解来完成。
服务端还需要部署一个Hessian服务容器,如Spring或Dubbo,来托管和管理Hessian服务。
4. 客户端调用:客户端需要使用Hessian客户端库来发起远程方法调用。
客户端库会将方法名和参数打包成HTTP
请求,发送到服务端。
服务端返回的结果会被客户端库解包并转换为本地对象。
5. 性能优化:Hessian协议使用二进制序列化格式,相对于基于文本的协议(如XML或JSON),可以提高数据传输的效率和性能。
此外,Hessian还支持压缩和缓存等优化技术,以减少网络传输的开销。
总之,Hessian服务原理是通过HTTP协议传输二进制序列化数据,实现轻量级的远程方法调用。
这使得分布式系统中的组件可以透明地进行交互,简化了系统的设计和开发。
hessian协议中文版
Hessian 2.0序列化协议规范翻译: Edison peng目录1.概述 (4)2.设计目标 (4)3. Hessian语法 (4)4. 序列化 (6)4.1. 二进制数据 (7)4.1.1. 压缩格式:短二进制 (7)4.1.2. Binary实例 (7)4.2. boolean (7)4.3.date (8)4.3.1. Date实例 (8)4.4. double (8)4.4.1. 压缩格式:double表示的0 (8)4.4.2. 压缩格式:double 表示的1 (8)4.4.3. 压缩格式:单字节double (9)4.4.4. 压缩格式:short型double (9)4.4.5. float型double (9)4.4.6. Double实例 (9)4.5. int (9)4.5.1. 单字节整型 (10)4.5.2. 双字节整型 (10)4.5.3. 三字节整型 (10)4.5.4. 整型实例 (10)4.6. list (11)4.6.1. 压缩格式: repeated list (11)4.6.2. List实例 (11)4.7. long (12)4.7.1. 压缩格式: 单字节long (12)4.7.2. 压缩格式: 双字节long (12)4.7.3. 压缩格式: 3字节long (12)4.7.4. 压缩格式: 四字节long (13)4.7.5. long实例 (13)4.8.map (13)4.8.1. Map实例 (13)4.9. null (14)4.10. 对象(object) (15)4.10.1. 压缩格式: class定义 (15)4.10.2. 压缩格式: 对象实例 (15)4.10.3. 对象实例 (15)4.11. 引用(ref) (16)4.11.1. 压缩格式: 双字节引用 (17)4.11.2. 压缩格式: 三字节引用 (17)4.11.3. 引用实例 (17)4.12. string (18)4.12.1. 压缩格式: 短字符串 (18)4.12.2 字符串实例 (18)4.13. 类型(type) (18)4.14. 压缩格式: 类型引用 (18)5. 引用表(Reference Map) (19)5.1. 值引用 (19)5.2. class引用 (19)5.3. type引用 (19)6. 字节码映射表(Bytecode map) (19)1.概述Hessian是一个轻量级的,自定义描述的二进制RPC协议。
Hessian协议解析
Hessian协议解析协议名称:Hessian协议解析一、背景介绍Hessian协议是一种基于二进制的轻量级远程调用协议,用于在分布式系统中进行跨语言的通信。
它使用简单的二进制格式来序列化和反序列化数据,并支持多种编程语言,如Java、C#、Python等。
本协议旨在详细解析Hessian协议的结构、数据类型和通信流程,以便更好地理解和使用该协议。
二、协议结构Hessian协议采用二进制格式进行数据传输,其结构可以分为请求部分和响应部分。
1. 请求部分请求部分由请求头和请求体组成。
1.1 请求头请求头包含以下字段:- 协议版本:指示所使用的Hessian协议的版本号。
- 请求类型:指示请求的类型,如调用远程方法、获取远程对象等。
- 请求方法:指示具体的远程方法名或对象名。
- 请求ID:用于标识请求的唯一ID,用于匹配请求和响应。
1.2 请求体请求体是实际的数据载荷,可以是方法参数、对象序列化数据等。
2. 响应部分响应部分由响应头和响应体组成。
2.1 响应头响应头包含以下字段:- 协议版本:指示所使用的Hessian协议的版本号。
- 响应类型:指示响应的类型,如成功、失败等。
- 请求ID:与请求部分的请求ID对应,用于匹配请求和响应。
2.2 响应体响应体是实际的数据载荷,可以是方法返回值、对象反序列化数据等。
三、数据类型Hessian协议支持多种数据类型的序列化和反序列化,包括基本数据类型、数组、字符串、日期、集合等。
1. 基本数据类型Hessian协议支持的基本数据类型包括整型、浮点型、布尔型、字符型等。
2. 数组Hessian协议支持一维和多维数组的序列化和反序列化,可以是基本数据类型的数组或对象数组。
3. 字符串Hessian协议支持字符串的序列化和反序列化,使用UTF-8编码。
4. 日期Hessian协议支持日期类型的序列化和反序列化,使用标准的ISO 8601日期格式。
5. 集合Hessian协议支持集合类型的序列化和反序列化,包括列表、集合、映射等。
hessian序列化null参数
hessian序列化null参数摘要:1.Hessian 简介2.Hessian 序列化null 参数的问题3.解决方案及原因分析4.总结正文:Hessian 是一个轻量级的二进制RPC 协议,其将方法调用的参数和返回值序列化为二进制数据,实现语言无关的调用。
在实际使用过程中,可能会遇到Hessian 序列化null 参数的问题。
当序列化null 参数时,Hessian 会抛出NullPointerException。
为了解决这个问题,可以采用以下方法:方案一:使用序列化过滤器。
通过实现Hessian 的Filter 接口,自定义一个序列化过滤器,对序列化null 参数进行处理。
在filter 方法中,可以返回一个默认值或者直接跳过null 参数的序列化。
例如:```javapublic class NullFilter implements Filter {@Overridepublic Object filter(Object value) {if (value == null) {return defaultValue;}return value;}}```方案二:修改Hessian 源码。
通过修改Hessian 源码,实现对null 参数的自动处理。
在Hessian 的序列化过程中,可以判断参数是否为null,如果为null 则不进行序列化。
例如:```javapublic static void writeObject(Output output, Object obj) throws IOException {if (obj == null) {output.writeNull();} else {// 其他序列化逻辑}}```原因分析:Hessian 在序列化过程中,会调用对象的toString 方法。
当参数为null 时,调用null 的toString 方法会抛出NullPointerException。
Hessian协议解析 (2)
Hessian协议解析一、协议目的本协议旨在规范Hessian协议的解析过程,确保数据的准确传输和解析。
二、协议范围本协议适用于所有涉及Hessian协议解析的场景,包括但不限于网络通信、数据传输等。
三、术语定义1. Hessian协议:一种基于二进制的轻量级网络协议,用于在不同平台之间进行数据传输和解析。
2. 序列化:将数据对象转换为二进制格式以便传输。
3. 反序列化:将二进制数据转换为数据对象以便解析和使用。
四、解析流程1. 接收数据1.1 从网络通信中接收到Hessian数据。
1.2 将接收到的数据存储为字节数组。
2. 解析数据2.1 创建Hessian解析器对象。
2.2 调用解析器的反序列化方法,将字节数组转换为数据对象。
2.3 根据数据对象的类型进行相应的处理。
2.3.1 如果是基本数据类型,直接使用。
2.3.2 如果是复杂数据类型,根据具体需求进行解析和处理。
3. 错误处理3.1 检查解析过程中是否出现错误。
3.2 如果有错误,根据错误类型进行相应的处理,如记录日志、返回错误信息等。
五、数据格式1. 基本数据类型1.1 字符串:使用UTF-8编码。
1.2 整数:使用4字节或8字节表示。
1.3 浮点数:使用4字节或8字节表示。
1.4 布尔值:使用1字节表示,0表示false,1表示true。
1.5 空值:使用特定的标记表示。
2. 复杂数据类型2.1 数组:使用特定的标记表示开始和结束,每个元素之间使用逗号分隔。
2.2 对象:使用特定的标记表示开始和结束,每个属性使用键值对表示,键和值之间使用冒号分隔,属性之间使用逗号分隔。
六、安全性考虑1. 数据校验:在解析过程中,对接收到的数据进行校验,确保数据的完整性和正确性。
2. 防止注入攻击:对接收到的数据进行严格的解析和验证,防止恶意数据的注入。
3. 权限控制:对解析过程进行权限控制,确保只有授权的用户可以进行解析操作。
七、性能优化1. 数据压缩:在传输过程中,对数据进行压缩,减少传输的数据量。
HISE协议
Hessian协议
Hessian二进制的网络协议使不需要引入大型框架下就可以使用,并且不需要学习其它的入门的协议。
因为它是二进制协议,它更擅长于发送二进制数据,而不需要引入其它附件去扩展它的协议。
Hessian是一个动态类型,二进制序列化,也是网络协议为了对象的定向传输。
Hessian协议有以下的设计目标:
1.它必须自我描述序列化的类型,即不需要外部架构和接口定义。
2.它必须是语言语言独立的,要支持包括脚本语言。
3.它必须是可读可写的在单一的途径。
4.它要尽可能的简洁。
5.它必须是简单的,它可以有效地测试和实施。
6.尽可能的快。
7.必须要支持Unicode编码。
8.它必须支持八位二进制文件,而不是逃避或者用附件。
9.它必须支持加密,压缩,签名,还有事务的上下文。
RPC框架——简单高效hessian的使用方式
RPC框架——简单⾼效hessian的使⽤⽅式RPC(Remote Procedure Call Protocol)RPC使⽤C/S⽅式,采⽤http协议,发送请求到服务器,等待服务器返回结果。
这个请求包括⼀个参数集和⼀个⽂本集,通常形成“classname.methodname”形式。
优点是跨语⾔跨平台,C端、S端有更⼤的独⽴性,缺点是不⽀持对象,⽆法在编译器检查错误,只能在运⾏期检查。
RPC是指远程过程调⽤,也就是说两台服务器A,B,⼀个应⽤部署在A服务器上,想要调⽤B服务器上应⽤提供的函数/⽅法,由于不在⼀个内存空间,不能直接调⽤,需要通过⽹络来表达调⽤的语义和传达调⽤的数据。
关于JAVA中hessian的使⽤:服务端配置(接收数据⽅):1. 讲述如何配置Hessian的服务器端(与Spring集成)2.定义接⼝类package cn.demo.hessian;/*** 服务端接⼝* @author xiao**/public interface ISayHello {public String sayHello(String arg1,String arg2);}3.接⼝实现类package cn.demo.hessian.impl;import cn.demo.hessian.ISayHello;/*** 服务端接⼝实现* @author xiao**/public class SayHelloImpl implements ISayHello {public String sayHello(String arg1, String arg2) {// TODO Auto-generated method stubreturn "arg1="+arg1+",arg2="+arg2;}}4.配置Web.xml<servlet><servlet-name>remote</servlet-name><!-- 使⽤Spring的代理Servlet --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>namespace</param-name><param-value>classes/remote-servlet</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>remote</servlet-name><url-pattern>/remote/*</url-pattern></servlet-mapping>5.配置remote-servlet.xml[该⽂件位于src⽬录下,即编译后存在与classes下]:<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/dtd/spring-beans.dtd"> <beans><!-- 接⼝的具体实现类 --><bean id="helloImpl" class="cn.demo.hessian.impl.SayHelloImpl"/><!-- 使⽤Spring的HessianServie做代理 --><bean name="/helloHessian"class="org.springframework.remoting.caucho.HessianServiceExporter"><!-- service引⽤具体的实现实体Bean--><property name="service" ref="helloImpl"/><property name="serviceInterface" value="cn.demo.hessian.ISayHello"/></bean><!-- 可以配置多个HessianServiceExporter代理Bean --></beans>服务器端配置完毕。
Hessian 简单使用方法
Hessian 简单使用方法
本来想琢磨一下werService来的,突然想起来了hessian,它号称是轻量级的webService ,在本地写了个小例子,供自己备忘。
本例子主要分为三个部分
一.创建使用到的jar文件
二.创建一个web工程。
三.创建一个java工程,本地运行调用服务器端方法。
具体如下
一.
创建java工程,编写服务中使用到的java文件。
ITalk接口和其实现类TalkImpl如下
ITalk:
TalkImpl:
然后将此工程打成jar包
二.创建web工程(我用的是tomcat)
这里我们需要导入两个jar包,一个是hessian.jar, 一个是我们在上一步骤当中导出的我们自己的服务jar包。
接下来就是来配置web工程的web.xml文件,添加servlet
由于我们对外提供URL就应该是
http://localhost:8080/HessianServer/hessianService
HessianServer:为我们的web工程名称。
hessianService:为web.xml中的servlet-name。
三.创建hessian客户端
这里我们仍然需要导入hessian.jar和我们自己的myHessian.jar 下面编写客户端调用方法
启动服务器,运行客户端结果:。
dubbo,hessian协议
dubbo,hessian协议竭诚为您提供优质文档/双击可除dubbo,hessian协议篇一:dubbo官方配置指南configurationReferenceconfigurationRelation:sla配置在此完成!servicelayeragreementapplicationconfig应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
Registryconfig注册中心配置,用于配置连接注册中心相关信息。
protocolconfig协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
serviceconfig服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
providerconfig提供方的缺省值,当protocolconfig 和serviceconfig某属性没有配置时,采用此缺省值。
Referenceconfig引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
consumerconfig消费方缺省配置,当Referenceconfig 某属性没有配置时,采用此缺省值。
methodconfig方法配置,用于serviceconfig和Referenceconfig指定方法级的配置信息。
argumentconfig用于指定方法参数配置。
configurationoverride:上图中以timeout为例,显示了配置的查找顺序,其它retries,loadbalance,actives等类似。
方法级优先,接口级次之,全局配置再次之。
如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,通过uRl经由注册中心传递给消费方。
建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。
理论上Referenceconfig的非服务标识配置,在consumerconfig,serviceconfig,providerconfig均可以缺省配置。
hessian使用方法
Java学习之Hessian通信基础(2011-11-29 19:37:29)转载▼标签:javahessian通信分类:javarmi基础it一、首先先说Hessian是什么?Hessian:hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能,相比WebService,Hessian更简单、快捷。
采用的是二进制RPC协议,因为采用了二进制协议,所以它很适合于发送二进制数据,Hessian 主要作面向对象的消息通信。
Hessian的初衷就是支持动态类型,格式紧凑,跨语言Hessian是使用自己的序列化机制实现的编组和反编组,其支持的数据类型是有限制的,不支持复杂的对象,可以穿透防火墙,在这里不得不说一下RMI:RMI是一组用户开发分布式应用程序的API。
他使用的是java序列化机制实现调用及返回值的编组于反编组。
它使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。
他可以被看做是RPC的Java版本,因为传统的RPC并不能很好的应用于分布式对象系统。
而Java RMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
他也有它的缺点,他只能通过RMI协议来进行访问无法通过HTTP协议访问,无法穿透防火墙。
还有一种远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的优点。
试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml 文本)的优点。
二、写一个简单的hessian通信所需要知道写哪些内容?Hessian:写一个Hessian需要注意的问题:1、JAVA服务器端必须具备以下几点:包含Hessian的jar包设计一个接口,用来给客户端调用实现该接口的动能配置web.xml,配置相应的servlet对象必须实现Serializable接口对于复杂对象可以使用Map的方法传递2、客户端必须具备以下几点:java客户端包含Hessian.jar包具有和服务器端结构一样的接口和实体类。
hessian用法
hessian用法
Hessian是一个基于HTTP协议的轻量级远程调用(RPC)框架,主要用于Java语言。
它实现了高性能和轻量级的RPC通信,可以轻松地实现远程方法调用。
以下是Hessian的使用步骤:
1. 添加Maven依赖:在项目的文件中添加Hessian的Maven依赖。
2. 创建服务接口和实现类:定义服务接口和相应的实现类,其中服务接口定义了远程调用的方法,实现类实现了这些方法。
3. 配置文件:在文件中配置服务接口、实现类及访问地址。
4. 客户端发起请求:客户端通过Hessian提供的API发起远程调用请求。
5. 将请求转化为符合协议的格式:Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。
6. 使用HTTP协议传输:Hessian基于HTTP协议进行传输。
7. 响应端接收请求:响应端根据Hessian提供的API来接收请求。
8. 将流还原为传输格式:Hessian根据其私有的串行化机制将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。
9. 处理完毕后回应:处理完毕后,Hessian将结果对象进行序列化,传输至调用端。
以上是Hessian的基本使用步骤,具体的实现细节和配置方式可能会因项目需求和环境而有所不同。
hessian2序列化原理
hessian2序列化原理Hessian2是一种二进制的远程调用协议,通常用于数据的序列化和反序列化。
它由Caucho Technology开发并维护,是Java语言中常用的序列化协议之一。
本文将为大家介绍Hessian2的序列化原理。
第一步:将Java对象转换为二进制流在Hessian2的序列化过程中,首先需要将Java对象转换为二进制流。
这个过程主要有以下几个步骤:1.1 根据对象类型生成序列化方案首先,Hessian2会根据对象的类型生成对应的序列化方案。
不同的类型会对应不同的序列化方案。
例如,基本数据类型和字符串等可以直接转换为二进制流,而对象类型则需要按照一定的规则转换。
1.2 将对象转换为二进制流在生成序列化方案之后,Hessian2会按照方案将Java对象转换为二进制流。
这个过程中,需要考虑一些细节问题,例如对象的含义和字段的顺序等,以保证转换的正确性和一致性。
第二步:将二进制流转换为Java对象在Hessian2的反序列化过程中,需要将二进制流转换为Java对象。
这个过程主要有以下几个步骤:2.1 读取对象类型和序列化方案首先,Hessian2会从二进制流中读取对象类型和序列化方案。
通过这些信息,Hessian2可以知道如何将二进制流转换为Java对象。
2.2 按照序列化方案将二进制流转换为Java对象在读取了对象类型和序列化方案之后,Hessian2会按照方案将二进制流转换为Java对象。
这个过程中,需要考虑一些细节问题,例如对象的含义和字段的顺序等,以保证转换的正确性和一致性。
总结Hessian2的序列化原理主要包括将Java对象转换为二进制流和将二进制流转换为Java对象两个过程。
在这个过程中,需要考虑对象类型、序列化方案、字段顺序等各种因素,以保证转换的正确性和一致性。
Hessian2作为一种高效、简洁的二进制协议,在Java语言中得到了广泛的应用。
Hessian使用流程及配置
Hessian一:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。
相比WebService,Hessian更简单、快捷。
采用的是二进制RPC(remote procedure call protocol:远程过程调用协议)协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
二:在进行基于Hessian的项目开发时,应当注意以下几点:1. ▲JAVA服务器端必须具备以下几点:2. ·包含Hessian的jar包3. ·设计一个接口,用来给客户端调用4. ·实现该接口的功能5. ·配置web.xml,配好相应的servlet6. ·由于使用二进制RPC协议传输数据,对象必须进行序列化,实现Serializable 接口7. ·对于复杂对象可以使用Map的方法传递8. ▲客户端必须具备以下几点:9. ·java客户端包含Hessian.jar的包。
C#中引用hessianCSharp.dll10. ·具有和服务器端结构一样的接口。
包括命名空间都最好一样11. ·利用HessianProxyFactory调用远程接口.3.客户端和服务器端配置:客户端Remote-xxx-client.xml文件配置:<bean id="action里声明hession对象的名称"class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <property name="serviceUrl"><value>http://127.0.0.1:8090/SENATOR-ORG-SERVER/remote/ISpecialtyHessian(即:部署在服务器端的后台访问地址/项目/后台配置文件第二个bean的name)</value></property><property name="serviceInterface"><value>.ISpecialtyHessian(前台hessian接口完全限定名)</value></property><property name="overloadEnabled"value="true"/></bean>服务器端remote-xxx-server.xml文件配置:<bean id="xxxHessian(一般是对应beanHessian)"class="自己hessian实现类"> <property name="specialtyService"ref="hessian实现类里的service名称"></property></bean><bean name="/ISpecialtyHessian(自定义名称)"class="org.springframework.remoting.caucho.HessianServiceExporter"><!-- 注入以上配置的bean的名称 --><property name="service"ref="specialtyHessian"/><!-- 此处的value对应后台hessian接口完全限定名 --><property name="serviceInterface"value=" .ISpecialtyHessian"/></bean>备注:属性名称没做说明即是固定写法4:后台之间资源相互调用:要调用那个后台,配置需要调用的hessian配置文件即可.。
hessian协议
hessian协议Hessian协议。
Hessian协议是一种基于HTTP的轻量级二进制协议,它可以用于在客户端和服务器之间进行远程调用。
Hessian协议的设计初衷是为了提高传输效率,减少网络带宽的占用,同时也能够简化开发人员的工作,使得远程调用变得更加便捷和高效。
Hessian协议的核心思想是采用二进制格式来进行数据传输,相比于传统的基于文本的协议,如SOAP和XML-RPC,Hessian协议可以更加高效地利用网络资源。
它采用了一种紧凑的二进制格式来表示数据,这样可以减少数据的传输量,提高传输速度,同时也能够降低服务器和客户端的负载。
在Hessian协议中,数据的序列化和反序列化是非常重要的环节。
Hessian协议使用了一种称为“二进制标记”的方式来表示不同类型的数据,包括基本类型、对象、数组等。
这种方式可以有效地减少数据的传输量,提高数据的传输效率。
另外,Hessian协议还支持对异常的处理。
在远程调用过程中,如果出现了异常,服务器端可以将异常信息序列化后传输给客户端,客户端可以根据异常信息进行相应的处理。
这种机制可以使得远程调用更加可靠,能够更好地保证系统的稳定性。
Hessian协议的实现也是比较简单的,目前已经有了多种语言的实现,包括Java、C++、C#等。
开发人员可以根据自己的需求选择合适的实现方式,从而更加方便地进行远程调用的开发工作。
总的来说,Hessian协议作为一种轻量级的远程调用协议,具有传输效率高、开发简单、可靠性强等特点。
它可以被广泛应用于各种分布式系统中,包括互联网应用、企业应用等领域。
通过使用Hessian协议,开发人员可以更加高效地进行远程调用的开发工作,提高系统的性能和可靠性。
总之,Hessian协议是一种非常值得推荐的远程调用协议,它可以帮助开发人员更加高效地进行远程调用的开发工作,提高系统的性能和可靠性。
希望越来越多的开发人员能够了解并使用Hessian协议,从而为分布式系统的开发工作带来更多的便利和效益。
hessian,序列化规范
竭诚为您提供优质文档/双击可除hessian,序列化规范篇一:hessian介绍hessian概述hessian是一个轻量级的remotingonhttp 工具,使用简单的方法提供了Rmi的功能。
相比webservice,hessian更简单、快捷。
采用的是二进制Rpc协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
hessian执行流程hessian一次完整调用hessian客户端时序hessianproxy是hessianclient处理客户端请求的核心类,它采用proxy的设计模式,代理客户端对远程接口的调用,hessianclient的主流程的时序图如下所示:hessian服务器端时序hessianskeleton是hessianserver端的核心类,从输入流中返序列化出客户端调用的方法和参数,对服务端服务进行调用,然后把处理结果返回给客户端,主要流程时序图如下所示:hessian序列化和反序列化结构类图1.2.3.4.serializer序列化的接口deserializer反序列化的接口abstracthessianinputhessian自定义的输入流,提供对应的read各种类型的方法abstracthessianoutputhessian自定义的输出流,提供对应的write各种类型的方法abstractserializerFactory介绍serializerFactory从字面意思上也看的出来,是管理和维护对应序列化/反序列化机制的工厂。
默认的几种实现serializerFactory标准的实现extserializerFactory我们可以设置自定义的序列化机制,通过该Factory可以进行扩展。
beanserializerFactory对serializerFactory的默认object的序列化机制进行强制指定,指定为beanserializer。
实际运行当中使用的unsafeserializer和unsafedeserializer作为默认实现,在其中会有内部类Fielddeserializer和Fieldserializer来对应的处理对象内部的字段,如果出现unsafe内部支持的Fielddeserializer实现则会递归的进行对象序列化和反序列化处理。
hessian 协议
hessian 协议Hessian 协议。
Hessian 协议是一种基于二进制的轻量级远程通信协议,它可以用于在客户端和服务器之间进行数据传输。
Hessian 协议的设计初衷是为了提高数据传输的效率和性能,尤其适用于移动设备和网络带宽有限的环境中。
Hessian 协议采用简单的数据结构和压缩算法,使得数据传输更加高效和快速。
Hessian 协议的特点之一是其简洁性。
相比于其他基于文本的协议,如 XML 和JSON,Hessian 协议使用二进制格式进行数据传输,因此可以减少数据的传输量,提高传输效率。
同时,Hessian 协议的数据结构也相对简单,只包含基本的数据类型和对象引用,不需要额外的标记符号或描述信息,使得数据的解析和处理更加高效。
另一个特点是 Hessian 协议的跨平台性。
由于 Hessian 协议使用的是二进制格式,不依赖于特定的编程语言或操作系统,因此可以在不同的平台上进行数据传输,实现跨语言的通信。
这使得 Hessian 协议成为了一种通用的远程通信协议,可以在不同的系统和环境中被广泛应用。
此外,Hessian 协议还具有良好的性能表现。
由于采用了二进制格式和简单的数据结构,Hessian 协议在数据传输和解析过程中的性能表现非常优秀。
相比于其他文本格式的协议,Hessian 协议可以更快地进行数据传输和解析,降低了系统的资源消耗,提高了整体的性能表现。
总的来说,Hessian 协议是一种高效、简洁、跨平台的远程通信协议,适用于移动设备和网络带宽有限的环境中。
它的设计初衷是为了提高数据传输的效率和性能,使得客户端和服务器之间的通信更加高效和快速。
在实际的应用中,可以根据具体的需求选择合适的协议,以实现更好的通信效果。
Hessian 协议作为一种轻量级的远程通信协议,可以为我们提供一种高效、简洁、跨平台的数据传输方案,为系统的性能优化和资源消耗提供了有力支持。
关于php hessian的详细介绍
关于 php hessian 的详细介绍
以下是我为大家整理的关于 php hessian 的详细介绍,希望对大家有所帮 助。 一、hessian 音标是[hes]读黑森. hessian 是一个轻量级的远程的数据交换工具,使用简单的方法提供了 rmi(远 程方法调用)的功能,相比 webservice,hessian 更简单、快捷,采用的是二进制 rpc 协议,因为采用的是二进制协议,所以它很适合于发送二进制数据. hessian 是独立于语言的. 二、在 php 中怎幺用的呢? 你是不是认为这个和 soap 一样在 php.ini 中开启一个就可以使用了,我也这 幺认为的,可是我要告诉你的是这样的想法是错误的. 需要去下载一个 hessianphp 的库来使用,下载地址 hessianphp.sourceforge/ 三、看看怎幺使用 1、服务器端,代码如下:
include_once(‘hessianphp/dist/hessianservice.php’); classhelloworldservice { publicfunction__construct() { } publicfunctionadd($a,$b) {//开源代码 phpfensi return$aБайду номын сангаас$b; } }
echo$sum; if(hessian::error()){ $errors=hessian::error(); print_r($erros->;message); //var_dump($errors); }//开源代码 phpfensi ?>; php hessian 的用法你会了吗?快来试试吧。
$wrapper=newhessianservice(); $wrapper->;registerobject(newhelloworldservice); $wrapper->;displayinfo=true; $wrapper->;service(); ?>; 2、客户端,代码如下: require_once’hessianphp/dist/hessianclient.php’; hessian::errorreporting(hessian_silent); $url=‘localhost/info.php’; $proxy=&newhessianclient($url); $sum=$proxy->;add(3,5);
hessian介绍
Hessian概述Hessian是一个轻量级的remotingonhttp工具,使用简单的方法提供了RMI的功能。
相比WebService,Hessian更简单、快捷。
采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
Hessian执行流程Hessian一次完整调用Hessian客户端时序HessianProxy是hessian client处理客户端请求的核心类,它采用proxy的设计模式,代理客户端对远程接口的调用,hessian client的主流程的时序图如下所示:Hessian服务器端时序HessianSkeleton是hessian server端的核心类,从输入流中返序列化出客户端调用的方法和参数,对服务端服务进行调用,然后把处理结果返回给客户端,主要流程时序图如下所示:Hessian序列化和反序列化结构类图1.Serializer 序列化的接口2.Deserializer反序列化的接口3.AbstractHessianInput hessian自定义的输入流,提供对应的read各种类型的方法4.AbstractHessianOutput hessian自定义的输出流,提供对应的write各种类型的方法AbstractSerializerFactory介绍serializerFactory从字面意思上也看的出来,是管理和维护对应序列化/反序列化机制的工厂。
默认的几种实现∙SerializerFactory标准的实现∙ExtSerializerFactory我们可以设置自定义的序列化机制,通过该Factory可以进行扩展。
∙BeanSerializerFactory对SerializerFactory的默认object的序列化机制进行强制指定,指定为BeanSerializer。
先看一下hesian提供的Serializer/Derializer几种默认实现实际运行当中使用的UnsafeSerializer和UnsafeDeserializer作为默认实现,在其中会有内部类FieldDeserializer和FieldSerializer来对应的处理对象内部的字段,如果出现Unsafe内部支持的FieldDeserializer实现则会递归的进行对象序列化和反序列化处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、在Hessian官网上下载Hessian的jar包,我下载了for java的;(如hessian-4.0.3.jar,
hessian-4.0.3-src.jar);
2、把Hessian协议导入到Eclipse工程中,(例如工程Test);
目录结构:
把下载的Hessian的jar包放在WEB-INF\lib文件夹下,选中Test工程,右键单击,选Refresh(or直接F5刷新)后,在project|propertise|Java Build Path|Librarise,单击ADD Jar添加jar包;
3、纯Java环境下例子:
(1)客户端接口
//客户端接口
package dhdemo;
public interface myHello {
String sayHello();//远程调用接口
}
////////////////////////////////////////
(2)
客户端接口实现类
//服务器端接口实现类IMyHello
package dhdemo;
import dhdemo.myHello;
import com.caucho.hessian.server.HessianServlet;
public class IMyHello extends HessianServlet implements myHello {
public String sayHello()
{
return "============Hello world!==========";
}
}
(3)配置tomcat下的root\web-inf下的web.xml
<!-- hessian协议的servlet配置-->
<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>dhdemo.IMyHello</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>dhdemo.myHello</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
(4)利用HessianProxyFactory从客户端输出向服务器端的请求
package dhdemo;
import com.caucho.hessian.client.HessianProxyFactory;
public class OutputHello
{
public static void main (String[] args) {
String url="http://localhost:8080/Hello";
HessianProxyFactory factory=new HessianProxyFactory();
try{
myHello hello=(myHello)factory.create(myHello.class,url);
System.out.println(hello.sayHello());
}catch(Exception e)
{System.out.print("无法访问远程服务"+e);}
}
}
///////////////////////////////////////
Jsp技术下实现浏览器输出
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<%@ page import="com.caucho.hessian.client.HessianProxyFactory"%>
<%@ page import="dhdemo.myHello"%>
<%
String url="http://localhost:8080/Hello";
HessianProxyFactory factory=new HessianProxyFactory();
try{
myHello hello=(myHello)factory.create(myHello.class,url);
out.println(hello.sayHello());
}catch(Exception e)
{out.print("无法访问远程服务"+e);}
%>
<body>
</body>
</html>
注:有时在“public class IMyHello extends HessianServlet implements myHello”这里会遇到错误,错误提示“the type javax servlet GeneralServlet not resolved,it indirect……”,这是因为没有把javax.servlet.jar包放在Test工程的WEB-INF\lib下,在MyEclipse\eclipse\plugins下找到javax.servlet.jar文件,放在lib文件夹下,按照导入Hessian的jar包一样的方法,导入到Test工程中就可以了。