简介
相比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.RemoteAccessException: Cannot access Hessian service at [http://61.152.162.173/remote/remoteService];
解决方法:出现这个异常一般是因为服务端操作出现异常引起的
发表时间:2008-08-13 谢谢,正在学习怎么搭建hessian服务,看了以后帮助很大!
发表时间:2008-08-19 我觉得RPC有两种方式,调用远程的方法:
1、方法在远程执行,将操作结果传回给客户端。优点:服务器负荷小,传输数据量小,客户端无需知道服务器端定义的服务接口。缺点:需要对数据进行拼装解析等复杂操作。
2、方法加载到客户端运行。优点:可以和缓存配合,每次运行只传输一次,可靠性高,有些方法没有返回值,只是进行例如print的打印语句能在客户端运行。缺点:传输数据大,客户端需要知道服务接口。
我猜想
IHello hello =(IHello)factory.create(IHello.class,url);
System.out.println(hello.sayHello());
它是第二种方式
发表时间:2008-08-29 其实,它采用的是第一种方式,是在远程执行,而非是你说的第二种
5:客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。
1) 把服务器端的生成的jar包,放入工程中。
分享到:
相关推荐
基于加密技术的Hessian 远程调用的研究与实现
在开发过程中,有时需公用某个工程的接口,需要用到hessian实现远程调用
java项目中使用hessian框架实现远程调用,该资源内附hessian服务端,hessian客户端和使用说明文档,以供使用参考,轻松教会你hessian远程调用!
Hessian远程调用框架学习一,第一个JAVA使用hessian的入门demo,简单实用易理解
Hessian Binary Web Service Protocol远程接口调用入门Demo例子!
hessian简单demo,server发布服务+client调用服务,包含源码和hessian的jar包
使用eclipse maven工程搭建hessian远程服务demo 分服务端的整合和客户端 建议阅读相关博客http://blog.csdn.net/heisemuyangquan/article/details/79460528
用LR对hessian接口做性能测试,使用JAVA协议,没有界面的性能测试
一个简单实用的hessian框架的应用实例,用于实现分布式开发远程调用!
用spirng和hessian构建分布式应用(远程接口)的方法
NULL 博文链接:https://fhqllt.iteye.com/blog/776148
给予spring的框架。 封装了xfire、rmi、hessian、httpinvoker 客户端可以统一调用,省略了远程调用的编码。 服务通过服务ID和服务接口来调用。
hessian php与java通讯demo源码
本示例是hessian与spring整合的,客户端与服务端相互调用的最完整例子。
纯Hessian的入门例子教程,还有Hessian和Spring整合的例子教程。 代码上传之前都运行通过的
struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...
远程传输的轻量级处理,hessian示例
hessian-4.0.33.jar hessian-4.0.33.jar hessian-4.0.33.jar
Hessian 接口 Java Python
Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议。本人做了一个简单的应用,大家可以往更深的方向研究,共同进步,msn:yang-yang-90@hotmail.com