最近在项目中接触到了Hessian,发现这是一个比较好的东西。官方地址:http://www.caucho.com/hessian/
下面是网络上的一些说明资料:
相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。
Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。
Hessian处理过程示意图:
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
简单来说:
客户端拥有与服务器相同(兼容)的接口,客户端通过Hession请求就可以调用服务器的方法,客户端包括:Java,Objective C,Flex 等等
简单例子:
第一种配置方式(在Hession的Servlet中配置接口和现实类,服务器返回普通参数):
服务端
/** * 服务器给客户端的暴露的接口 * * @author ZhangMingxue * */ public interface IHello { public String sayHello(); }
/** * 服务器实现有接口 * * @author ZhangMingxue * */ public class HelloImple implements IHello { public String sayHello() { return "Hello Hession !"; } }
服务端的配置:在WEB-INF/web.xml添加
<servlet> <servlet-name>HelloServlet</servlet-name> <!-- Hession提供的Servlet --> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <init-param> <param-name>home-class</param-name> <!-- 服务器对接口的现实,供客户端调用 --> <param-value>com.mengya.imple.HelloImple</param-value> </init-param> <init-param> <param-name>home-api</param-name> <!-- 客户端接口 --> <param-value>com.mengya.inter.IHello</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping>
客户端测试(本实例客端也是用Java):
public static void main(String[] args) { // 服务器访问路径 String url = "http://127.0.0.1:8080/HessionDemos/HelloServlet"; HessianProxyFactory hessianProxyFactory = new HessianProxyFactory(); try { // IHello是客户端的接口,与服务器接口一致(客户端的语言包括:Java,Objective C,Flex 等) IHello iHello = (IHello) hessianProxyFactory.create(IHello.class, url); // 客户端调服务器的接口实现 System.out.println("Result == " + iHello.sayHello()); } catch (MalformedURLException e) { e.printStackTrace(); } }
以上就是一个简单的例子。服务器与客户端共用的接口是:IHello,服务器现实的接口是: HelloImple,客户端通过Hession根据客户端接口调用服务器方法并接受返回参数。经过测试,客户端与服务器端的接口不一定要一样!如下:
服务器端接口:
/** * 服务器给客户端的暴露的接口 * * @author ZhangMingxue * */ public interface IHello { public String sayHello(); public void clientNotMethod(); }
客户端接口:
/** * 客户端与服务器相同(或兼容)的接口 * * @author ZhangMingxue * */ public interface IHello { public String sayHello(); public String serverNotMehtod(); }
以上接口也可以在客户端通过IHello接口调用服务器的 sayHello()方法,不赞成这样,只是测试发现这样也可以调用。
第二种配置方式(继承Hession的Servlet,服务器返回Bean):
1、调用参数Bean与结果参数Bean
/** * 客户端与服务端传输的JavaBean,必须Serializable * * @author ZhangMingxue * */ public class Person implements Serializable { private static final long serialVersionUID = 3400062242004002707L; private String userId; private String userName; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
服务端接口:
/** * 服务端接口 * * @author mingxue.zhang@163.com * @company http://www.brilliance.com.cn * @date 2013-4-14 * @version 1.0 * @JDK 1.5 */ public interface IPersonServer { public Person getPerson(Person bean); }
服务端Servlet:
/** * 服务端访问Servlet,继承HessianServlet并实现服务端接口 * * @author ZhangMingxue * */ public class PersonServlet extends HessianServlet implements IPersonServer { private static final long serialVersionUID = -343120217079779622L; /** * 实现服务端接口的方法 */ public Person getPerson(Person bean) { System.out.println("客户端参数:" + bean.getUserId() + "\t" + bean.getUserName()); bean.setUserName("Server:" + bean.getUserName()); return bean; } }
服务端的配置:在WEB-INF/web.xml添加
<servlet> <servlet-name>PersonServlet</servlet-name> <servlet-class>com.mengya.servlet.PersonServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PersonServlet</servlet-name> <url-pattern>/PersonServlet</url-pattern> </servlet-mapping>
客户端接口 与服务端接口一致(不一定是Java语言,接口名与接口的方法一致),客户端测试如下:
public class PersonTest { public static void main(String[] args) { // 服务器访问路径 String url = "http://127.0.0.1:8080/HessionDemos/PersonServlet"; HessianProxyFactory hessianProxyFactory = new HessianProxyFactory(); try { // IHello是客户端的接口,与服务器接口一致(客户端的语言包括:Java,Objective C,Flex 等) IPersonServer iPersonServer = (IPersonServer) hessianProxyFactory .create(IPersonServer.class, url); // 客户端调服务器的接口实现 Person person = new Person(); person.setUserId("1001"); person.setUserName("mingxue.zhang@163.com"); Person resultBean = iPersonServer.getPerson(person); System.out.println(resultBean.getUserId() + "\t" + resultBean.getUserName()); } catch (MalformedURLException e) { e.printStackTrace(); } } }
源代码见附件!
后记:
把Hession用于移动发现,客户端可以直接调用服务端的方法非常方便!
相关推荐
这个“Hessian入门小例子”是帮助开发者理解如何在实际项目中应用Hessian的一种方式。下面我们将深入探讨Hessian协议、它的特点、以及如何在Java环境中设置和使用Hessian服务和客户端。 首先,让我们了解Hessian的...
这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...
这个"**hessian入门实例**"旨在帮助初学者快速理解并应用Hessian技术,通过导入到MyEclipse这样的集成开发环境中,可以直接运行示例代码,从而直观地了解Hessian的工作原理。 首先,我们要理解什么是RPC。RPC允许一...
在“Hessian入门案例源代码”中,我们可以通过分析HessianDemo这个项目来学习如何使用Hessian。源代码通常包括服务器端和客户端两部分,它们展示了如何定义服务接口、实现服务、发布服务以及如何调用这些服务。 1. ...
**Hessian入门介绍** 在IT领域,Hessian是一种二进制Web服务协议,它由Caucho Technology开发,主要用于提供轻量级、高效的远程过程调用(RPC)机制。Hessian的目标是简化分布式系统间的通信,减少网络传输的数据量...
Hessian是一种二进制Web服务协议,它提供了一种轻量级、高效的远程方法调用(RPC)方式。Hessian的出现旨在解决XML-RPC在数据传输时的效率问题,因为XML格式的数据在网络上传输时体积较大,解析速度较慢。下面我们将...
一、Hessian入门实例 Hessian的入门实例主要展示了如何创建一个简单的服务提供者和消费者。首先,我们需要定义一个服务接口,例如`HelloService`,包含一个或多个方法,这些方法将被远程调用。然后,我们需要实现这...
本教程将通过一个入门Demo来介绍如何使用Hessian进行远程接口调用。 首先,让我们理解Hessian的优势。与XML-RPC相比,Hessian使用二进制编码,因此在网络传输时占用的带宽更少,解析速度更快。此外,Hessian支持...
**Hessian:深入理解与应用** Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统...
Hessian是一种高效的二进制序列化协议,常用于实现轻量级的远程过程调用(RPC)。这个案例涉及到了Hessian在Java和Python之间的跨语言通信。以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian...
这个压缩包包含了Hessian的多个版本,分别是Hessian3.1.6、Hessian3.2.1以及Hessian4.0.7。每个版本都有其特定的功能改进和优化,了解这些版本的区别和适用场景对于开发者来说至关重要。 Hessian3.1.6是Hessian的一...
Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...
在图像处理领域,多尺度Hessian滤波器是一种高级的图像增强技术,它主要用于检测图像中的线性结构,特别是对于微弱或者噪声较大的图像特征有很好的识别能力。这个技术是基于数学形态学的Hessian矩阵理论,由V.S. ...
在IT领域,尤其是在医学图像分析中,Hessian矩阵是一个重要的数学工具,用于图像特征检测,特别是在血管分割的应用中。本文将深入探讨标题和描述中提到的"基于Hessian矩阵增强的心血管分割"这一主题。 Hessian矩阵...
《Hessian应用详解》 Hessian,一种轻量级的二进制协议,因其高效、简单的特点,在分布式服务中被广泛应用。它允许开发者在HTTP上透明地调用远程方法,就像是本地方法调用一样,极大地提高了开发效率和系统性能。...
- 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...
在IT行业中,Hessian是一种基于二进制协议的RPC(远程过程调用)框架,它使得客户端和服务端之间能够高效地进行数据交换。HessianServer指的是实现Hessian协议的服务端程序,通常用于构建分布式系统,使得不同的应用...
在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...
在Spring框架中,Hessian是一种轻量级的远程方法调用(RPC)协议,它能够实现Java对象到字节流的序列化,从而使得服务端的对象可以在客户端直接调用,仿佛对象就在本地一样。Hessian提供了高效的二进制RPC协议,使得...