`
阅读更多
Spring + Hessian
背景;
优点:【摘自网上】hessian类似于Webservice,但是它不使用soap协议,它把协议报文封装到http封包中,通过HTTP信道传输。是一种高效简洁的远程调用框架,它采用的是二进制RPC协议(Binary),具有轻量、传输量小、平台无关的特点,特别适合于目前网络带宽比较小的手机网络应用项目。Hessian是通过servlet提供远程服务,完全使用动态代理来实现的,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。hessian已经支持Java,Flash/Flex,Python,C++,.NET C#,D,Erlang,PHP,Ruby,Objective C。其中我最喜欢的就是它不需要我们与xml“打交道”,直接操作对象,省去了很多麻烦。
缺点:如果service层中返回的对象是复杂对象,使用它就会削弱Hessian的传输量小的优点,而且也会增加Hessian客户端的代码量。既然它是把对象序列化为二进制流的形式在http信道中传输,那么对于安全性高的应用不应该采用hessian(比如网上支付等)、
官司方简介:Hessian 是一个二进制协议,提供web 服务就像创建Servlet一样简单. 使用服务就像使用JDK代理接口一样简单
com.caucho.hessian.client
com.caucho.hessian.server  并不是必须的,可以使用简单的客户端,比如applets.


如何开发Hessian:
1. 下载Spring[2.56]包和Hessian[3.1.6包
2. 新建一个项目,并把spring和Hessian的架包加入到项目当中.
3. 新建web.xml,并加入Hessian和Spring支持,配置如下:
加载Spring
<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>

拦截请求,使用Hessian发布服务
<servlet>
<!--  配置Servlet名,后面根据该名完成远程服务映射-->
<servlet-name>remoting</servlet-name>
<!--  Hessian远程服务需要HessianServlet暴露Hehes-->
<servlet-class>
			<!--集成到Spring 在Spring-webmvc-2.5.6里面-->
					org.springframework.web.servlet.DispatcherServlet
			    </servlet-class>
			<!--  随应用启动而启动 -->
			    <load-on-startup>1</load-on-startup>
</servlet>

		<!--  映射Servlet的url,该Servlet的url就是Hessian服务名-->
<servlet-mapping>
<servlet-name>remoting</servlet-name>
<!--  远程服务名为hessianService-->
<url-pattern>/remoting/*</url-pattern>
			</servlet-mapping>


remoting-servlet.xml配置如下:
<bean id="hello" class="com.module.impl.HelloImpl"/> 
	<bean name="/Hello" 
	class="org.springframework.remoting.caucho.HessianServiceExporter">
		<!— Hessian服务的实现类--> 
        <property name="service" >
        		<ref bean="hello" />
        </property> 
        <!--  Hessian服务的接口--> 
        <property name="serviceInterface" value="com.module.Hello"/>  
	</bean>


现在我们准备在客户端连接这个业务。我们使用BeanNameUrlHandlerMapping,就不需要指定处理器映射将请求(url)映射到业务上,因此业务提供在
${ServletMapping}/Hello上。
com.module.Hello接口定义:
public interface Hello {
    public String hello(); 
}

com.module.HelloImpl实现类定义:
public class HelloImpl implements Hello {
	public String hello() {
		return "hello "  + "欢迎学习Hessian"; 
	}
}

很简单的一个服务,把程序发布的Web服务器下,然后启动服务.
访问网址: http://localhost/Hessian/remoting/Hello
你会得到一个错误信息: HTTP Status 405 - HessianServiceExporter only supports POST requests说明已经发布成功!.
Hessian缺少的,服务列表的提供,这个可以自己写一个方法展示全部的Hessian服务,并写TestCase来测试所有服务,最后把服务发布到服务器上.
因为Hessian是基于Binary-RPC协议实现的,他的请求是通过Hessian本身提供的API来发起请求.并通过其自定义的串行化机制将请求信息序列化,产生二进制流,其基于HTTP协议进行传输,他的响应是根据Hessian提供的API接收请求,Hessian根据其私有的串行化机制将请求进行反序列化,传递给使用者时已经是相应的请求信息对象了. 处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。

下图展示了Hessian是怎么发送对象到返回对象的数据流:
  • 大小: 23.5 KB
分享到:
评论

相关推荐

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

    理解并掌握Hessian的基本概念和使用方法,能够提升我们的开发效率,优化应用程序的性能。在实际项目中,结合标签中的“源码”和“工具”,深入研究Hessian的源码和相关工具,可以帮助我们更好地应用这一技术。而...

    Hessian HelloWorld篇

    "Hessian HelloWorld篇"可能是指一篇教程或示例,介绍如何使用Hessian进行简单的远程调用。 这篇博文可能涵盖了以下知识点: 1. **Hessian协议**:解释了Hessian协议的基本原理,包括其二进制格式如何节省带宽和...

    闲着没事Hessian开发WebService的总结(一)

    标题中的“闲着没事Hessian开发WebService的总结(一)”表明这是一篇关于使用Hessian框架开发Web服务的文章,作者可能在其中分享了个人的经验和理解。Hessian是一种轻量级的远程调用协议,它允许Java和.NET之间进行...

    Hessian实战应用之获取客户端请求URL和重新转发客户端请求

    本篇将详细探讨Hessian在实战中的应用,特别是如何获取客户端请求的URL以及如何重定向或转发客户端请求。 首先,我们需要了解Hessian的基本原理。Hessian是基于HTTP的,它将Java对象序列化为二进制格式,从而减少...

    基于python的Hessian Frangi滤波算法设计与实现

    以上代码展示了基本的Hessian Frangi滤波算法在Python中的实现过程。当然,实际应用中可能需要对参数进行调整,以适应不同场景的需求。此外,还可以结合其他图像处理技术,如形态学操作,进一步优化结果。 总的来说...

    Hessian调用

    在本篇中,我们将深入探讨Hessian调用的相关知识点。 首先,我们要理解Hessian调用的核心概念。Hessian协议是一种序列化协议,它将Java对象转换为二进制流,从而在网络上传输,到达目的地后再反序列化回原来的对象...

    Training Deep and Recurrent Networks with Hessian-Free Optimization

    在给定的文件信息中,我们看到了标题“Training Deep and Recurrent Networks with Hessian-Free Optimization”,这意味着文章将探讨一种不使用海森矩阵(Hessian)的优化方法,用于训练深度网络和循环网络。...

    Spring整合Hessian访问远程服务

    本篇文章将深入探讨如何将Spring与Hessian整合,实现远程服务的访问。 首先,我们要理解Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性。IoC使得我们可以解耦组件间的依赖,AOP则...

    Hessian入门引路

    本篇文章将带你入门Hessian,了解其基本概念、工作原理以及如何在实际项目中应用。 首先,我们来理解一下Hessian的核心概念。Hessian是基于HTTP的,它使用一种高效的二进制格式来序列化和反序列化Java对象,这样就...

    Flex + Hessian 学习笔记(二)

    总的来说,这篇学习笔记将帮助读者掌握Flex与Hessian的结合使用,从而更好地构建高效、响应式的跨平台Web应用程序。通过实际代码示例和详细的解释,读者可以深化对这两种技术的理解,并提升开发技能。

    dubbo精品课程-基础篇

    通过这门《Dubbo精品课程-基础篇》,你将能够全面掌握Dubbo的基本使用和核心功能,为进一步的分布式系统开发打下坚实的基础。同时,提供的PPT和源代码将作为辅助资料,帮助你在实践中巩固所学知识。

    matlab开发-教学数字半径和学生

    这篇教程可能旨在帮助学生理解和应用MATLAB进行数值分析,特别是计算导数和Hessian矩阵,这些都是科学计算中的基本概念。 首先,让我们理解“数字半径”在数值计算中的含义。在数学中,数字半径是指一个复数或向量...

    dubbo_rpc_hession_rmi

    本篇将深入解析这些技术及其在实际应用中的示例。 首先,Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了服务注册与发现、负载均衡、容错机制等核心功能。在“dubbo的消费者demo”中,我们将了解...

    hession之经典入门例子

    本篇文章将深入探讨Hession的基础知识,并通过一个经典的入门示例,帮助你快速理解并掌握Hession在实际应用中的使用。 首先,我们要了解Hession的基本原理。Hession基于二进制协议,它的设计目标是提高远程服务调用...

    matlab优化算法基础篇

    1. 优化算法的基本概念:理解梯度、Hessian矩阵、搜索方向和步长的概念。 2. 函数的性质:了解凸函数、凹函数及其对优化的重要性。 3. 不动点迭代法:包括梯度下降法、拟牛顿法(如BFGS和L-BFGS)的实现细节。 4. ...

    有关sift算法的几篇文章

    2. **关键点定位**:对找到的极值点进行精确定位,通常采用二阶导数矩阵(Hessian矩阵)来确定关键点的位置,同时去除边缘响应和噪声。 3. **关键点方向分配**:为每个关键点分配一个或多个方向,通常基于关键点...

    源码OpenCV特征点提取surf特征点提取

    本篇将详细介绍如何利用OpenCV库实现SURF特征点的提取,并探讨其背后的原理及实际应用场景。 #### 二、SURF特征点提取原理 ##### 2.1 Hessian矩阵与尺度空间 SURF算法的核心思想之一是基于Hessian矩阵的特征点...

    流形学习技术自学材料(全包括)

    流形学习方法是模式识别中的基本方法,分为线性流形学习算法和非线性流形学习算法,线性方法就是传统的方法如主成分分析(PCA)和线性判别分析(LDA),非线行流形学习算法包括等距映射(Isomap),拉普拉斯特征映射...

Global site tag (gtag.js) - Google Analytics