`
tingshu
  • 浏览: 34489 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hessian学习手记

阅读更多

一、 Hessian原理简介:

           Hessian 是由 caucho 提供的一个 基于 Binary-RPC 协议实现 的远程通讯 library 。在使用过程中,请求端 通过 Hessian 本身提供的 API 来向服务端发起请求, Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流,然后 用Http 协议进行传输。 响应端根据 Hessian 提供的 API 来接收请求, 而后,Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。 处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。

 

二、 Hessian 调用实例

    1. 服务端实体类:

 

package com.shhx.model;

import java.io.Serializable;

public class PlaneBean implements Serializable {
	
	private String color;
	private String length;
	private String owner;
	
	private static final long serialVersionUID = 1L;

	public PlaneBean() {
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getLength() {
		return length;
	}

	public void setLength(String length) {
		this.length = length;
	}

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}
    
}

 2.服务端接口:

 

package com.shhx.service;

import com.shhx.model.PlaneBean;

public interface IBasic {
	
	public String getAirLine();

	public PlaneBean getPlaneBean();
}

   3.服务端接口实现类:

 

package com.shhx.service;

import com.caucho.hessian.server.HessianServlet;
import com.shhx.model.PlaneBean;

public class IBasicImpl extends HessianServlet implements IBasic {
	
	private String airline= "Shanghai - Shenzhen";  

	public String getAirLine() {
		return airline;
	}

	public PlaneBean getPlaneBean() {
		PlaneBean plane = new PlaneBean();
		plane.setColor("silver");
		plane.setLength("30");
		plane.setOwner("MU");
		
		return plane;
	}

}
 

      4. web.xml中的配置:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/remoting-servlet.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>


	<servlet>
		<servlet-name>hessian</servlet-name>
		<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
		<init-param>
			<param-name>home-class</param-name>
			<param-value>com.shhx.service.IBasicImpl</param-value>
		</init-param>
		<init-param>
			<param-name>home-api</param-name>
			<param-value>com.shhx.service.IBasic</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>hessian</servlet-name>
		<url-pattern>/hessian</url-pattern>
	</servlet-mapping>

</web-app>

   5.  WEB-INF下 remoting-servlet.xml 的配置:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<!--  定义普通bean实例-->
	<bean id="iBasicImpl" class="com.shhx.service.IBasicImpl" />

	<!--  使用HessianServiceExporter 将普通bean导出成Hessian服务-->
	<bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
	
		<!--  需要导出的目标bean-->
		<property name="service" ref="iBasicImpl" />
		
		<!--  Hessian服务的接口-->
		<property name="serviceInterface" value="com.shhx.service.IBasic" />
	</bean>
</beans>

  6. 客户端要有对应的实体类和接口,客户端代码:

 

package com.shhx.service;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;
import com.shhx.model.PlaneBean;

public class BasicClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "http://127.0.0.1:8080/hessianDemo/hessian";
		HessianProxyFactory factory = new HessianProxyFactory();
		
		try {
			IBasic basic = (IBasic) factory.create(IBasic.class, url);
			System.out.println(basic);
			System.out.println("airline: " + basic.getAirLine());
			
			PlaneBean plane = basic.getPlaneBean();
			System.out.println("color: " + plane.getColor());
			System.out.println("length: " + plane.getLength());
			System.out.println("owner: " + plane.getOwner());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}

}

   客户端运行结果如下:

      HessianProxy[http://127.0.0.1:8080/hessianDemo/hessian]
      airline: Shanghai - Shenzhen
      color: silver
      length: 30
      owner: MU

 

三、  在进行基于Hessian的项目开发时,应当注意以下几点:   

       ▲JAVA服务器端必须具备以下几点:  

                -包含Hessian的jar包;

                -设计一个接口,用来给客户端调用; 

                -实现该接口的功能;

                -配置web.xml,配好相应的servlet;  

                -对象必须实现Serializable 接口; 

                -对于复杂对像可以使用Map的方法传递;  

       ▲客户端必须具备以下几点:  

                -java客户端包含Hessian.jar的包; 

                -具有和服务器端结构一样的接口。包括命名空间都最好一样;

            -利用HessianProxyFactory调用远程接口。

四、   Hessian特点总结:

                -整个jar很小,200多K,3.1版本的,当然,我下载的for java的版本;

                -配置很简单,基本上不需要花什么经历就配置出来了;

                -功能强大,可以将soap抛开,也可以把EJB抛开,采用二进制来传递对象;

                -拥有多种语言支持,python c++  .net 甚至 flex 都可以做为client。


            下载地址: http://hessian.caucho.com/

 

分享到:
评论

相关推荐

    hessian学习基础篇——序列化和反序列化

    通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Java中,如果一个类实现了Serializable接口,那么该类...

    Hessian学习简单demo

    Hessian是一种二进制协议,它被设计用于提高远程调用的...通过学习和实践这个Hessian demo,你将能够更好地应对涉及远程调用和数据交换的问题。无论是Java开发者还是C++开发者,Hessian都是值得了解和掌握的一项技术。

    Hessian 学习 例子 实例

    下面我们将深入探讨Hessian的学习、实例以及其在实际应用中的使用。 首先,Hessian的吸引力在于它的二进制格式,这使得数据在网络上传输时占用更少的带宽。相比于XML或JSON等文本格式,二进制格式的数据通常更小,...

    hessian学习实例

    在这个“hessian学习实例”中,我们将深入探讨Hessian框架的使用,特别是如何将其与Spring框架集成,以及如何构建server端和client端。 首先,让我们理解Hessian的工作原理。Hessian基于HTTP协议,它将Java对象序列...

    Hessian学习入门实例

    这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...

    Hessian学习笔记

    4. **Hessian客户端和服务器实现**:理解如何在Java或其他支持的语言中实现Hessian客户端和服务端是学习的关键。这包括创建服务端的HessianServlet,以及客户端的HessianProxyFactory,用于创建远程服务的代理对象。...

    Hessian的学习笔记

    Hessian学习笔记 Hessian是一种基于Binary-RPC协议实现的远程通讯library,由Caucho提供。下面是Hessian的学习笔记: 一、简介 Hessian是基于Binary-RPC协议实现的远程通讯library,用于实现远程过程调用(RPC)...

    Flex + Hessian 学习笔记(二)

    在"Flex + Hessian 学习笔记(二)"中,我们可能涉及以下几个关键知识点: 1. **Flex客户端开发**:Flex项目通常使用MXML和ActionScript编写,MXML用于声明式地构建UI,而ActionScript则用于编写应用程序逻辑。开发者...

    Hessian

    在博客链接《iteye博客:550771》中,作者可能详细讨论了Hessian的使用方法、优缺点以及实战案例,可以作为学习Hessian的参考资料。 **六、Hessian的使用场景** 1. **微服务通信**:在微服务架构中,Hessian可以...

    WebService另一种轻量级实现—Hessian 学习笔记.rar

    **WebService的轻量级实现——Hessian学习笔记** 在IT行业中,WebService作为一种常见的跨平台、跨语言的通信机制,被广泛应用于系统间的交互。然而,传统的SOAP(Simple Object Access Protocol)协议实现的...

    Hessian 使用小结

    Hessian的设计目标是为了提供高效、简单的远程调用方式,使得客户端能够像调用本地方法一样调用远程服务。 **独立使用Hessian** 在不依赖任何框架的情况下,使用Hessian的步骤如下: 1. **添加依赖**:首先,...

    hessian案例,hessian案例

    Hessian是一种高效的二进制序列化协议,常用于实现轻量级的远程过程调用(RPC)。这个案例涉及到了Hessian在Java和Python之间的跨语言通信。以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian...

    Hessian多个版本打包下载

    这个压缩包包含了Hessian的多个版本,分别是Hessian3.1.6、Hessian3.2.1以及Hessian4.0.7。每个版本都有其特定的功能改进和优化,了解这些版本的区别和适用场景对于开发者来说至关重要。 Hessian3.1.6是Hessian的一...

    基于Hessian矩阵增强的心血管分割_hessian_hessian血管_hessian血管分割_血管分割_Hessian矩阵

    此外,还可以结合其他图像处理技术,如区域生长、水平集或者机器学习算法,进一步优化分割结果。 文件"基于Hessian矩阵增强的心血管分割"可能包含了实现这一方法的详细步骤、算法描述、实验结果以及与其他方法的...

    hessian

    Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...

    多尺度hessian滤波器图像增强

    在图像处理领域,多尺度Hessian滤波器是一种高级的图像增强技术,它主要用于检测图像中的线性结构,特别是对于微弱或者噪声较大的图像特征有很好的识别能力。这个技术是基于数学形态学的Hessian矩阵理论,由V.S. ...

    Hessian应用

    《Hessian应用详解》 Hessian,一种轻量级的二进制协议,因其高效、简单的特点,在分布式服务中被广泛应用。它允许开发者在HTTP上透明地调用远程方法,就像是本地方法调用一样,极大地提高了开发效率和系统性能。...

    dubbo-hessian协议http请求demo(java)

    - 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...

Global site tag (gtag.js) - Google Analytics