`
otom31
  • 浏览: 230371 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

我也来写一篇Hessian的学习笔记

阅读更多

似乎最近Hessian 很火?

昨天我用了,马上就喜欢上了他.

1- 整个jar很小,200多K,3.1版本的,当然,我下载的for java的版本.

2- 配置很简单,基本上不需要花什么经历就配置出来了

3- 功能强大,可以将soap抛开,也可以把EJB抛开,采用二进制来传递对象

4- 拥有多种语言支持,python c++  .net 甚至 flex 都可以做为client端

http://hessian.caucho.com/#Java 这里可以下载到for java的版本

任意JAVA的IDE新建一个JAVA WEB工程

将下载的.jar包引入工程中,创建一个接口,这个接口可以供客户端和服务器端使用如下:

java 代码
  1. public interface IBasic {   
  2.   
  3.     /**  
  4.      * 测试字符串  
  5.      * @return  
  6.      */  
  7.     public String hello();   
  8.   
  9.     /**  
  10.      * 取一辆汽车   测试对象传递  
  11.      * @return  
  12.      */  
  13.     public Car getCar();   
  14.   
  15. }  

 

当然接口中用到的Car 这个类是自己定义的包含任何属性的标准JAVABEAN;

接下来我们就开始做service端的程序了:

java 代码
  1. /**  
  2.  * Created by IntelliJ IDEA.  
  3.  * User: tangkf  
  4.  */  
  5. public class BasicService implements IBasic {   
  6.   private String hello= "Hello, world";   
  7.   
  8.   public String hello()   
  9.   {   
  10.     return hello;   
  11.   }   
  12.   
  13.     public Car getCar() {   
  14.         Car car = new Car();   
  15.         car.setColor("RED红色");   
  16.         car.setLength("2400");   
  17.         car.setName("HAHACHE");   
  18.         return car;   
  19.     }   
  20. }  

 

服务器端的程序写好后,要让client能够通过http协议访问到我们的service还需要配置servlet,当然这个过程是很简单的

xml 代码
  1. <servlet>  
  2.     <servlet-name>helloservlet-name>  
  3.     <servlet-class>com.caucho.hessian.server.HessianServletservlet-class>  
  4.     <init-param>  
  5.         <param-name>home-classparam-name>  
  6.         <param-value>study.hessian.BasicServiceparam-value>  
  7.     init-param>  
  8.     <init-param>  
  9.         <param-name>home-apiparam-name>  
  10.         <param-value>study.hessian.IBasicparam-value>  
  11.     init-param>  
  12. servlet>  
  13.   
  14. <servlet-mapping>  
  15.     <servlet-name>helloservlet-name>  
  16.     <url-pattern>/hellourl-pattern>  
  17. servlet-mapping>  

 

只需要将上面的代码加入到你的WEB.XML文件中,当然包路径是你自己的路径而已.

这时服务器段的工作就已经全部完成了.

 

接下来我们在做client端的工作,client需要用到IBasic 这个接口,还需要用到 Car 这个类

可以做一个简单的测试:

java 代码
  1. public class BasicClient {   
  2.     public static void main(String []args)   
  3.         throws Exception   
  4.       {   
  5.         String url = "http://127.0.0.1:8099/common/hello";   
  6.         HessianProxyFactory factory = new HessianProxyFactory();   
  7.         Basic basic = (Basic) factory.create(Basic.class, url);   
  8.           Car car   = basic.getCar();   
  9.           System.out.println("Hello: " + basic.hello());   
  10.         System.out.println("Hello: " + car.toString());   
  11.       }   
  12.   
  13.   
  14. }  

 

大功告成,启动我们的WEB服务器,然后在启动这个client的程序,是不是发现屏幕上输出了你想看到的结果!要是抛异常了怎么办?

不要急,检查下包路径,.xml文件的配置,没有什么神奇的地方.

我们离开了WSDL,离开了WSDD,也不需要AXIS,不需要什么W3C的大篇标准.

Hessian 简单就是美,实用就是强,好用就是王道!!!哈哈哈哈~~~

分享到:
评论
18 楼 otom31 2014-07-04  
美人如此多娇 写道
问下。如果A服务器做hessian的客户端,需要调用B服务器端的服务接口,客户端是怎么实现的,你上面的Demo中相当于客户端和服务器端在一个工程中,是可以拿到服务器端的API的(Basic),正常使用时无法拿到服务API的,那客户端怎么实现?

这个API可以看着是双方的协议,如果你不告诉客户协议,客户端肯定无法实现了,或者说实现起来很困难了。
17 楼 美人如此多娇 2014-06-30  
问下。如果A服务器做hessian的客户端,需要调用B服务器端的服务接口,客户端是怎么实现的,你上面的Demo中相当于客户端和服务器端在一个工程中,是可以拿到服务器端的API的(Basic),正常使用时无法拿到服务API的,那客户端怎么实现?
16 楼 viaco2love 2012-12-03  
他的web.xml有错
http://www.blogjava.net/ducklyl/archive/2008/10/09/154757.html
15 楼 netkiller.github.com 2012-08-23  
MQ 来的更直接
14 楼 netkiller.github.com 2012-08-23  
Hessian 仍然需要web server, web 服务器本身就有性能瓶颈,还有很多限制.

我更喜欢Socket直接 tcp/udp 调用
13 楼 wangjian95 2012-07-13  
这个可以哈
12 楼 otom31 2011-11-15  
aye_love 写道
服务器端是不是用Hessian 实现的不知道,只有服务端的wsdl地址,在客户端能不能使用Hessian 调用服务?

WSDL 那就是WEBSERVICE了,不能用hessian
必须服务端也是HESSIAN才行
11 楼 aye_love 2011-11-14  
服务器端是不是用Hessian 实现的不知道,只有服务端的wsdl地址,在客户端能不能使用Hessian 调用服务?
10 楼 otom31 2011-08-12  
leidengyan 写道
楼主,hessian传递的对象应该要序列化的,目前的程序跑起来确实有问题,将Car类进行序列化就没问题了。


是的,没想到这篇帖子过了这么多年了,还有人回复!
9 楼 leidengyan 2011-08-10  
楼主,hessian传递的对象应该要序列化的,目前的程序跑起来确实有问题,将Car类进行序列化就没问题了。
public class Car implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -2954223940367043694L;
	private String a1;
	private String a2;
	public String getA1() {
		return a1;
	}
	public void setA1(String a1) {
		this.a1 = a1;
	}
	public String getA2() {
		return a2;
	}
	public void setA2(String a2) {
		this.a2 = a2;
	}
}
8 楼 gqf2008 2007-11-22  
看不出这和RMI有啥区别?
7 楼 otom31 2007-11-22  
对是IBasic,这个是公用接口~~~~~~~~~~
6 楼 zhangsheng79 2007-11-22  
你客户端的Basic类哪来的?是IBasic?
5 楼 Chamjoneu 2007-11-22  
还是不成~ T_T

string on 8080 or 8099~~
4 楼 otom31 2007-11-21  
at $Proxy0.getCar(Unknown Source) 

这句.....有Car对象吗????

你把getCar的部分先测试 String 类型
3 楼 Chamjoneu 2007-11-21  
成功了~~

是不是端口问题

按理说 HessianServlet
<servlet>
	<servlet-name>HessianServlet</servlet-name>
	<servlet-class>
		com.caucho.hessian.server.HessianServlet
	</servlet-class>
	<init-param>
		<param-name>home-class</param-name>
		<param-value>org.hessian.study.BasicService</param-value>
	</init-param>
	<init-param>
		<param-name>home-api</param-name>
		<param-value>org.hessian.study.IBasic</param-value>
	</init-param>
</servlet>


听得的是8080 但该改成8080 又说FileNotFoundException

in BasicClient.java
String url = "http://localhost:8080/HessionTest/webservice";

Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: java.io.FileNotFoundException: http://localhost:8080/HessionTest/webservice
	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:182)
	at $Proxy0.getCar(Unknown Source)
	at org.hessian.study.BasicClient.main(BasicClient.java:19)
2 楼 otom31 2007-11-21  
你的WEB启动成功了没?有问题吗?
1 楼 Chamjoneu 2007-11-21  
晕 请教一下 为什么会有
Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: java.net.ConnectException: Connection refused: connect
这样的exception

in BasicClient.java

String url = "http://localhost:8099/HessianLearning/webservice";

in web.xml
<servlet>
	<servlet-name>HessianServlet</servlet-name>
	<servlet-class>
		com.caucho.hessian.server.HessianServlet
	</servlet-class>
	<init-param>
		<param-name>home-class</param-name>
		<param-value>org.hessian.study.BasicService</param-value>
	</init-param>
	<init-param>
		<param-name>home-api</param-name>
		<param-value>org.hessian.study.IBasic</param-value>
	</init-param>
</servlet>

<servlet-mapping>
	<servlet-name>HessianServlet</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

试过了jboss & tomcat 都是一样的 -_-!!

Plese Help, Thanks very much

相关推荐

    Hessian的学习笔记

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

    Flex + Hessian 学习笔记(二)

    这篇学习笔记将深入探讨这两个技术,并通过实例代码解析它们的工作原理。 Flex是Adobe开发的一个开源框架,主要用于创建交互式、高性能的RIA,通常基于ActionScript编程语言和Flash Player或Adobe AIR运行时。Flex ...

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

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

    Hessian学习笔记

    10. **源码阅读**:对于深入理解Hessian的工作原理,阅读源码是一个很好的学习途径。通过查看源码,可以理解数据如何被序列化和反序列化,以及如何处理远程调用的细节。 综上所述,学习Hessian需要掌握二进制序列化...

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

    通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Java中,如果一个类实现了Serializable接口,那么该类...

    Hessian学习简单demo

    Hessian是一种二进制协议,它被设计用于提高远程调用的效率,特别是在Java和C++之间进行跨语言通信时。Hessian的目标是提供一种快速、简洁的数据序列化和远程方法调用(RPC)机制。在这个简单的demo中,我们将探讨...

    Hessian 学习 例子 实例

    总的来说,Hessian是一个值得学习的技术,尤其对于那些需要构建高性能、低延迟的分布式系统或者服务间的通信。通过深入理解其原理和实践,你可以更好地利用Hessian来优化你的应用。在提供的链接中,博主otom31分享了...

    自己写了个Hessian

    标题 "自己写了个Hessian" 暗示了这是一个关于Hessian协议的个人实现项目,而描述中的"博文链接"提供了更多深入理解该主题的资源。Hessian是一种二进制的Remoting协议,由Caucho Technology开发,常用于分布式系统中...

    Flex + Hessian 留言本

    主要是将《Flex第一步》里使用FDS数据传输改为使用Hessian来实现,一些地方做了些简单的修改。 关于Flex使用Hessian进行远程调用,请参考: Flex + Hessian 学习笔记(一) ...

    Hessian学习入门实例

    这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...

    hessian学习实例

    Hessian是一种轻量级的RPC(远程过程调用)协议,它由Caucho公司开发,主要用于实现...同时,这也是一个很好的起点,帮助你进一步探索如何优化Hessian服务的性能,或者与其他技术(如负载均衡、安全控制等)进行集成。

    Hessian

    **Hessian:深入理解与应用** ...总的来说,Hessian是一个实用的、轻量级的RPC协议,尤其适合对性能有较高要求且希望简化通信复杂性的场景。通过理解和掌握Hessian,开发者可以更有效地构建和优化分布式系统。

    Hessian笔记

    【标题】:“Hessian笔记”主要探讨的是Hessian这一技术在IT领域的应用,尤其是与源码和工具相关的知识。Hessian是一种二进制的Remoting协议,它旨在提供高效的远程方法调用(Remote Method Invocation,RMI)能力,...

    Hessian 使用小结

    Hessian是一种轻量级的二进制远程过程调用(RPC)协议,它基于HTTP,并且通常通过Servlet来暴露Web服务。Hessian的设计目标是为了提供高效、简单的远程调用方式,使得客户端能够像调用本地方法一样调用远程服务。 *...

    hessian案例,hessian案例

    3. **Python中的Hessian**:Python也有对应的Hessian库,如`pyhessian`,它实现了Hessian协议,使得Python应用能够与Java Hessian服务进行通信。同样,服务端可以通过定义Python函数并包装为Hessian服务,客户端则...

    hessian

    Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...

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

    总的来说,这篇文章是一个深入了解Hessian框架及其相关工具Burlap的起点,对于想要在Java环境中开发高效Web服务的开发者来说,将是一个宝贵的资源。通过阅读和实践文中的示例,读者可以掌握Hessian的基本用法,并...

    Hessian应用

    Hessian,一种轻量级的二进制协议,因其高效、简单的特点,在分布式服务中被广泛应用。它允许开发者在HTTP上透明地调用远程方法,就像是本地方法调用一样,极大地提高了开发效率和系统性能。本文将深入探讨Hessian的...

Global site tag (gtag.js) - Google Analytics