Hessian spring 整合 2012-05-03 21:12:27
分类: 系统运维
简介
相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,
所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。
只是它不使用SOAP协议。
Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。
Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。
Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,
完全使用动态代理来实现的,,推荐采用面向接口编程,
因此,Hessian服务建议通过接口暴露。
Hessian处理过程示意图:
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
环境搭建 Hessian的下载和安装请按如下步骤进行:
(1)登http://www.caucho.com/hessian/下载Hessian。
(2)把Hessian相应的Jar包放到Web应用下,所有的jar文件都应该放在WEB-INF/lib下,该文件也不例外。
两种方式 纯Hessian 这种方式主要是适用于工程中没有适用像spring框架的情况下,好处是配置方便,
但是当内容多的情况下,配置的内容很多。
下面我就把我在做实例的一些相关步骤描述如下:
1:把Hessian相应jar包放入至工程中。
2:由于Hessian是采用面向接口编程的,所以编写一个接口,因为客户端仅仅需要接口,而无须真实的实现类。
package jzh.demo;
public interface IHello { String sayHello(); }
3:编写一个类实现这个接口。
package jzh.demo.impl;
import jzh.demo.IHello;
import com.caucho.hessian.server.HessianServlet;
public class Hello extends HessianServlet implements IHello
{
public String sayHello()
{ return "Hello world";
}
}
4:web.xml的详细配置
<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>jzh.demo.imple.Hello</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>jzh.demo.IHello</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
5:客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。
1) 把服务器端的生成的jar包,放入工程中。
2) 相应的片段程序如下:
String url = "http://220.114.108.185:8080/Hessian/Hello";
HessianProxyFactory factory = new HessianProxyFactory();
try {
IHello hello =(IHello)factory.create(IHello.class,url);
System.out.println(hello.sayHello());
} catch (MalformedURLException e)
{
e.printStackTrace();
}
6:功能完成。
Hessian与Spring整合 相比上一种方式,这个方式就有点麻烦了。Hessian通过Servlet提供远程服务。
需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,
DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,
该转发器将匹配/remoting/*的请求截获,转发给context的bean处理。而HessianServiceExporter提供bean服务。
所以Hessian与Spring整合主要就是一下两个工作:
1:通过DispatcherServlet来拦截URL请求。
2:HessianServiceExporter提供bean服务,Spring使用HessianServiceExporter,将一个常规bean导出成Hessian服务。
下面我就把我在做实例的一些相关步骤描述如下:
1:和上面的一样。
2:和上面的一样。
3:和上面的一样。
4:web.xml的详细配置
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
5:配置remoting-servlet.xml文件
<!-- 定义普通bean实例-->
<bean id="hello" class="jzh.demospring.impl.Hello"/>
<!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务-->
<bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
<!-- 需要导出的目标bean-->
<property name="service" ref="hello"/>
<!-- Hessian服务的接口-->
<property name="serviceInterface" value="jzh.demospring.IHello"/>
</bean>
6:客户端定义一个remoting-client.xml文件
<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl">
<value>http://220.114.99.62:8080/HessianSpring/remoteing/HessianRemoting</value>
</property>
<property name="serviceInterface">
<value>jzh.demospring.IHello</value>
</property> </bean>
7:客户端调用。
try
{
ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");
IHello hello =(IHello)context.getBean("myServiceClient");
System.out.println(hello.sayHello());
} catch (Exception e)
{
e.printStackTrace();
}
注意事项
1:启动tomcat的时候,出现如下问题:
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet。,
而在工程中是可以找到相应的jar文件,这究竟是什么问题。
解决方法:可能是在工程的WEB-INF/lib下面没有加载相应的jar文件
2:org.springframework.remoting.RemoteAcces***ception:
Cannot access Hessian service at [http://61.152.162.173/remote/remoteService];
解决方法:出现这个异常一般是因为服务端操作出现异常引起的
我觉得RPC有两种方式,调用远程的方法:
1、方法在远程执行,将操作结果传回给客户端。
优点:服务器负荷小,传输数据量小,客户端无需知道服务器端定义的服务接口。
缺点:需要对数据进行拼装解析等复杂操作。
2、方法加载到客户端运行。
优点:可以和缓存配合,每次运行只传输一次,可靠性高,有些方法没有返回值,
只是进行例如print的打印语句能在客户端运行。
缺点:传输数据大,客户端需要知道服务接口。
我猜想
IHello hello =(IHello)factory.create(IHello.class,url);
System.out.println(hello.sayHello());
它是第二种方式其实,它采用的是第一种方式,是在远程执行,而非是你说的第二种
RPC
http://blog.csdn.net/billdavid/archive/2006/08/18/1095747.aspx
http://hi.baidu.com/jj229937432/blog/item/4885ba137edec8c7c3fd78a5.html
http://wenku.baidu.com/view/9cf83f1ba8114431b90dd8f3.html
分享到:
相关推荐
Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统之间的通信,通过减少网络传输的...
1. 部署Hessian Servlet:在Web服务器上,你需要部署一个Hessian Servlet,它将处理来自Android客户端的请求。这通常涉及到在Web应用的web.xml文件中配置Servlet。 2. 实现服务接口:在服务器端,你需要实现`...
1. **Hessian简介**:Hessian是由Caucho Technology开发的一种二进制Web服务协议,它提供了简洁、快速的数据传输方式,尤其适用于低带宽环境。Hessian支持RPC模式,允许服务端和客户端之间进行方法调用。 2. **Java...
Hessian是一种高效的二进制序列化协议,常用于远程过程调用(RPC)和服务之间的通信。这个压缩包包含了Hessian的多个版本,分别是Hessian3.1.6、Hessian3.2.1以及Hessian4.0.7。每个版本都有其特定的功能改进和优化...
1. **创建服务**:在服务端,我们需要创建一个实现了特定接口的类,并使用Hessian工具将其暴露为服务。 2. **生成代理**:在客户端,我们使用Hessian工具生成一个服务代理,这个代理可以像调用本地对象一样调用远程...
Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...
在图像处理领域,多尺度Hessian滤波器是一种高级的图像增强技术,它主要用于检测图像中的线性结构,特别是对于微弱或者噪声较大的图像特征有很好的识别能力。这个技术是基于数学形态学的Hessian矩阵理论,由V.S. ...
在IT领域,尤其是在医学图像分析中,Hessian矩阵是一个重要的数学工具,用于图像特征检测,特别是在血管分割的应用中。本文将深入探讨标题和描述中提到的"基于Hessian矩阵增强的心血管分割"这一主题。 Hessian矩阵...
Hessian是Apache的一个子项目,它是一种二进制的Remoting协议,常用于Java和.NET之间进行远程方法调用(RPC)。本示例将介绍如何在Java中利用Dubbo的Hessian协议进行HTTP请求的实现。 首先,我们需要理解Hessian...
1. 魔数字:magic number,用于标识 Hessian 协议,固定为 "Hessian" 的 ASCII 码。 2. 消息头:header,用于存储一些基本信息,如消息类型、消息长度等。 3. 方法名:method name,用于标识要调用的方法名。 4. ...
本文将深入探讨Hessian的核心概念、工作原理,并提供一个简单的使用示例。 ### Hessian核心概念 1. **二进制序列化**:Hessian使用高效的二进制格式进行序列化和反序列化,与XML或JSON相比,这种格式的数据体积更...
在图像处理领域,Hessian矩阵是一种非常重要的工具,尤其在边缘检测和纹理分析中发挥着关键作用...通过理解并实际操作这个“hessian_homework1”项目,你将能够更深入地掌握这一技术,并将其应用到其他图像处理任务中。
1. **Hessian协议**: Hessian是Adobe公司开发的一种高效的二进制Web服务协议。它将数据序列化为紧凑的字节流,比XML更加节省带宽和CPU资源,提高了网络通信的效率。Hessian支持多种类型的数据,包括基本类型、对象...
在给定的项目中,"springMVC-hessian" 压缩包很可能包含了一个使用 SpringMVC 构建的 Web 服务,以及一个使用 Hessian 实现的远程服务接口。Readme 文件应该提供了详细的步骤指导,解释了如何配置 SpringMVC 以支持 ...
1. **设置环境**:确保你已经在项目中引入了Hessian的库,对于Java,这可能是通过Maven或Gradle添加依赖。对于C++,可能需要下载并编译Hessian库。 2. **创建服务端**:定义一个要暴露的服务接口,比如一个计算两个...
1. **创建服务接口和服务实现:** 首先,你需要定义一个Java接口,其中包含你希望暴露给客户端的方法。然后实现这个接口,提供实际的业务逻辑。 2. **配置Hessian布署器:** 在Spring的配置文件中,定义一个...
hessian-4.0.33.jar是Hessian框架的一个版本,包含了实现Hessian协议的类库,用于创建和解析Hessian二进制流。它主要包括以下组件: 1. Hessian编解码器:提供对Hessian二进制格式的编码和解码,将Java对象转化为可...
1. **创建服务接口和服务实现**: 首先,你需要定义一个服务接口,然后实现这个接口。例如,我们有一个`HelloHessianService`接口,包含一个`sayHello`方法。 ```java public interface HelloHessianService { ...
在这个“hessian服务端 客户端 可运行”的压缩包文件中,很可能包含了一个完整的示例,让我们来详细探讨Hessian在服务端和客户端的实现及其重要性。 首先,我们来理解一下Hessian服务端。在Java中,Hessian服务端...
【S25-Hessian反序列化1】是一个关于Java中Hessian序列化库的讨论,主要涉及Hessian与原生Java序列化的差异以及在Spring框架中的应用。Hessian是一种二进制序列化协议,旨在提高远程过程调用(RPC)的效率。与原生Java...