`
jzhua2006
  • 浏览: 304555 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hessian学习记录

阅读更多
简介
相比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];
解决方法:出现这个异常一般是因为服务端操作出现异常引起的
分享到:
评论
5 楼 UlsterBoy 2009-03-20  
问个 问题

5:客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。
1) 把服务器端的生成的jar包,放入工程中。

如果,我在服务端用Java ,客户端用C#, 怎么添加?
还是要在客户端,把server的interface 和 object 再定义一次 ?
4 楼 jzhua2006 2008-08-29  
其实,它采用的是第一种方式,是在远程执行,而非是你说的第二种
3 楼 bloodrate 2008-08-19  
我觉得RPC有两种方式,调用远程的方法:
1、方法在远程执行,将操作结果传回给客户端。优点:服务器负荷小,传输数据量小,客户端无需知道服务器端定义的服务接口。缺点:需要对数据进行拼装解析等复杂操作。
2、方法加载到客户端运行。优点:可以和缓存配合,每次运行只传输一次,可靠性高,有些方法没有返回值,只是进行例如print的打印语句能在客户端运行。缺点:传输数据大,客户端需要知道服务接口。

我猜想
IHello hello =(IHello)factory.create(IHello.class,url);
System.out.println(hello.sayHello());
它是第二种方式
2 楼 lkjust08 2008-08-19  
不懂,呵可
1 楼 reed7 2008-08-13  
谢谢,正在学习怎么搭建hessian服务,看了以后帮助很大!

相关推荐

    Flex + Hessian 学习笔记(二)

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

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

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

    Hessian学习笔记

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

    Hessian的学习笔记

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

    Flex + Hessian 留言本

    Flex + Hessian 学习笔记(一) http://wangcheng.javaeye.com/blog/141382 Flex + Hessian 学习笔记(二) http://wangcheng.javaeye.com/blog/141539 Flex + Hessian 学习笔记(三) ...

    Hessian学习简单demo

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

    Hessian笔记

    【标题】:“Hessian笔记”主要探讨的是Hessian这一技术在IT领域的应用,尤其是与源码和工具相关的知识。Hessian是一种二进制的Remoting...这些资料对于学习和掌握Hessian技术,提升分布式系统开发能力具有很高的价值。

    hessian-demo示例

    通过这个“hessian-demo”示例,开发者可以学习如何在实际项目中集成Hessian,实现高效、轻量级的远程服务调用。同时,结合Spring和Jetty,我们可以快速搭建和部署服务,提高开发效率。在实际应用中,还可以考虑使用...

    spring整合hessian进行远程通讯

    在生产环境中,对Hessian服务的监控和日志记录至关重要。可以使用Spring的AOP功能添加拦截器来收集调用统计信息,或者集成像ELK(Elasticsearch, Logstash, Kibana)这样的日志管理平台进行日志分析。 7. **版本...

    hessian php与java通讯demo源码

    需要注意的是,虽然Hessian简化了跨平台交互,但安全性、错误处理和日志记录等方面仍需要开发者仔细考虑和实现。 总之,这个"PHP与Java通信Demo源码"是一个很好的学习资源,帮助开发者理解如何在PHP和Java之间使用...

    Spring整合Hessian访问远程服务

    IoC使得我们可以解耦组件间的依赖,AOP则提供了面向切面的编程能力,让开发者可以方便地实现如日志记录、事务管理等通用功能。在Spring框架中,服务的暴露和消费可以通过Spring的`&lt;bean&gt;`标签进行配置,而整合...

    SSH学习笔记6 SSH学习笔记6

    SSH的学习笔记通常涵盖以下几个主要方面: 1. **安装与配置**:在不同的操作系统(如Linux、macOS或Windows)上安装SSH客户端和服务端软件,例如OpenSSH。配置SSH服务,包括修改`sshd_config`文件以设置端口号、...

    深度学习笔记:优化方法总结

    在本篇深度学习笔记中,我们主要总结了Momentum、RMSProp和Adam三种优化方法,同时简要介绍了病态曲率和牛顿法等概念。 #### 病态曲率 在优化过程中,我们会遇到病态曲率的问题,它指的是损失曲面上某个区域沿某个...

    路径规划-深蓝学院数值优化学习笔记(含PPT)

    深蓝学院的数值优化学习笔记提供了深入理解和掌握这一主题的关键资源。数值优化是寻找函数最小值或最大值的数学方法,它在路径规划中起到核心作用,帮助找到从起点到终点的最短或最优路径。 首先,我们要理解什么是...

    一份简短的深度学习数学笔记.pdf

    这份深度学习数学笔记主要涵盖了深度学习中常用的数学概念和运算,包括向量、矩阵、张量、线性代数运算、微积分、概率和信息论等基础内容,这些都是理解和实现深度学习模型的关键。 1. 向量、矩阵与张量: - 向量...

Global site tag (gtag.js) - Google Analytics