`
dreamoftch
  • 浏览: 493158 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hessian 学习入门

阅读更多

 

注:

 

 如果调用到download方法的时候,出现 java.io.IOException: stream is closed    

 

 则此时应该是jar包的问题,貌似这是hessian的一个bug : 关于该bug

 

解决方法下载hessian.jar的源码包,修改 com.caucho.hessian.client.HessianProxy :

 

在   Object value = in.readReply(method.getReturnType()); 这一句话之后加上下面代码:

 

Java代码 
  1. if (value instanceof InputStream) {  
  2.        value = new ResultInputStream(conn, is, in, (InputStream) value);  
  3.        is = null;  
  4.        conn = null;  
  5. }  

 

然后重新打包,使用这个新的jar包就没问题了。。。

 

然后,就可以看到sayHello、下载、上传成功的结果了。。。

 

 最后提供一个我自己修改过之后的hessian.jar

 


转自百度百科:http://baike.baidu.com/view/2255290.htm

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据

在进行基于Hessian的项目开发时,应当注意以下几点:
  ▲JAVA服务器端必须具备以下几点:
  ·包含Hessian的jar包
  ·设计一个接口,用来给客户端调用
  ·实现该接口的功能
  ·配置web.xml,配好相应的servlet
  ·对象必须实现Serializable 接口
  ·对于复杂对象可以使用Map的方法传递
  ▲客户端必须具备以下几点:
  ·java客户端包含Hessian.jar的包。C#中引用hessianCSharp.dll
  ·具有和服务器端结构一样的接口。包括命名空间都最好一样
  ·利用HessianProxyFactory调用远程接口。
  简单JAVA客户端例子:
服务器端
  新建一个名EasyHession的webProject项目,将Hessian.jar放入web-inf下的lib中
  创建接口:

 

 

package com.tch.test.hessian;

import java.io.InputStream;

public interface BasicAPI {
	public void setGreeting(String greeting);

	public String hello();

	public User getUser();
	/**
	 *  Created on: 			2013-12-11 
	 * <p>Discription:			下载数据</p>
	 * @return 				InputStream
	 */
	public InputStream download(String path) throws Exception;
}

 

 

 

 


  实现接口:

 

 

package com.tch.test.hessian;

import java.io.FileInputStream;
import java.io.InputStream;

public class BasicService implements BasicAPI {
	private String _greeting = "Hello, world";

	public void setGreeting(String greeting) {
		_greeting = greeting;
		System.out.println("set greeting success:" + _greeting);
	}

	public String hello() {
		return _greeting;
	}

	public User getUser() {
		return new User("prance", "meshow");
	}
	public InputStream download(String path) throws Exception{
		System.out.println(path+"******************************");
		InputStream inputStream = new FileInputStream(path);
		return inputStream;
	}
}

 

 

 


  创建一个实现Serializable的projo类也可以是Bean。

 

 

package com.tch.test.hessian;

import java.io.Serializable;

public class User implements Serializable {
	
	private static final long serialVersionUID = 1L;
	String userName = "snoopy";
	String password = "showme";

	public User(String user, String pwd) {
		this.userName = user;
		this.password = pwd;
	}

	public String getUserName() {
		return userName;
	}

	public String getPassword() {
		return password;
	}
}

 

 

 

 


接下来是配置web.xml
  

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
		<init-param>
			<param-name>service-class</param-name>
			<param-value>com.tch.test.hessian.BasicService</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

 


  将一切配置成功后,将项目发布到web 服务器上去,可以是Tomcat,Rain等等。
  
java客户端
  创建一个名为HessianClient的JAVAProject,载入hessian.jar包
  创建与服务器端一样的接口,及基础类
  package hessian;

package com.tch.test.hessian;

import java.io.InputStream;

public interface BasicAPI {
	public void setGreeting(String greeting);

	public String hello();

	public User getUser();
	/**
	 *  Created on: 			2013-12-11 
	 * <p>Discription:			下载数据</p>
	 * @return 				InputStream
	 */
	public InputStream download(String path) throws Exception;
}

 

package com.tch.test.hessian;

import java.io.Serializable;

public class User implements Serializable {
	
	private static final long serialVersionUID = 1L;
	String userName = "snoopy";
	String password = "showme";

	public User(String user, String pwd) {
		this.userName = user;
		this.password = pwd;
	}

	public String getUserName() {
		return userName;
	}

	public String getPassword() {
		return password;
	}
}

 
  

 

 


创建客户端程序
  

 

package com.tch.test.hessian;

import java.io.InputStream;

import com.caucho.hessian.client.HessianProxyFactory;

public class BasicClient {
	public static void main(String[] args) throws Exception {
		String url = "http://127.0.0.1:8080/dubboprovider/hello";
		HessianProxyFactory factory = new HessianProxyFactory();
		BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
		System.out.println("Hello:" + basic.hello());
		System.out.println("Hello:" + basic.getUser().getUserName());
		System.out.println("Hello:" + basic.getUser().getPassword());
		basic.setGreeting("HelloGreeting");
		System.out.println("Hello:" + basic.hello());
		
		InputStream inputStream = basic.download("D:\\MyBackup\\我的文档\\Downloads\\a.txt"); // 执行远程方法
		byte b[] = new byte[1024];
		int n;
		try {
			while ((n = inputStream.read(b)) != -1) {
				System.out.print(new String(b,0,n,"utf-8"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			inputStream.close();
		}
	}
}

 

 

就可以看到结果信息了。。。就如同本地调用一样

 

分享到:
评论

相关推荐

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

    本文将深入探讨Hessian框架的基础知识,它是一个高效的二进制序列化协议,广泛应用于Java和.NET之间跨语言通信。通过学习Hessian,我们可以更有效地处理数据传输,提高应用性能。 首先,让我们理解什么是序列化。...

    Hessian学习入门实例

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

    hessian入门小例子

    Hessian是一种轻量级的...通过这个例子,开发者可以学习如何在Java项目中集成Hessian,提升服务间的通信效率,同时减少网络开销。在实际应用中,可以根据项目需求扩展服务端的功能,并编写更多的客户端来消费这些服务。

    Hessian

    在博客链接《iteye博客:550771》中,作者可能详细讨论了Hessian的使用方法、优缺点以及实战案例,可以作为学习Hessian的参考资料。 **六、Hessian的使用场景** 1. **微服务通信**:在微服务架构中,Hessian可以...

    轻量级远程服务调用Hessian的入门实例和与Spring整合的实例.zip

    总结,这个压缩包文件提供了一个完整的Hessian学习路径,包括基础的Hessian服务创建和更高级的与Spring框架的整合。通过实践这些实例,开发者能够快速掌握Hessian的核心概念,进而将其应用于实际项目中,提升远程...

    Hessian 入门介绍

    **Hessian入门介绍** 在IT领域,Hessian是一种二进制Web服务协议,它由Caucho Technology开发,主要用于提供轻量级、高效的远程过程调用(RPC)机制。Hessian的目标是简化分布式系统间的通信,减少网络传输的数据量...

    Hessian入门案例源代码

    在“Hessian入门案例源代码”中,我们可以通过分析HessianDemo这个项目来学习如何使用Hessian。源代码通常包括服务器端和客户端两部分,它们展示了如何定义服务接口、实现服务、发布服务以及如何调用这些服务。 1. ...

    springMVC hessian

    它使用依赖注入(DI)和面向切面编程(AOP)来简化应用开发,使得开发者可以专注于业务逻辑而不是底层基础设施。在 SpringMVC 中,Controller 是核心组件,负责处理客户端的请求,并将结果返回给客户端。 接下来是 ...

    Hessian实例下载

    要学习和使用Hessian,首先你需要了解Java基础和HTTP协议。然后,你可以通过下载提供的`Hessian`和`HessianClient`示例,研究其源代码,理解如何设置服务端和客户端,以及它们如何通过Hessian协议进行通信。此外,...

    hessian入门实例,导入就可以直接运行

    在本实例中,你将学习如何在服务端配置和发布Hessian服务,以及在客户端如何创建Hessian代理并调用远程方法。 在实际项目中,Hessian常用于内部系统间的通信,比如微服务架构中的服务间调用。由于其高效的特性,它...

    Hessian.rar+矩阵基础理论+矩阵的数值稳定性+在深度学习中的应用

    Hessian矩阵基础理论 Hessian在优化算法中的应用 Hessian与二阶导数的关系 Hessian矩阵的计算方法 Hessian矩阵的数值稳定性 Hessian在机器学习中的角色 Hessian矩阵的特征值分析 Hessian矩阵的秩与正定性 Hessian在...

    Hessian远程调用框架学习一

    本教程将引导你入门Hessian,通过一个简单的JAVA demo来理解其工作原理和应用。 首先,我们需要了解Hessian的基本概念。Hessian是由Caucho Technology开发的一种二进制Web服务协议,它提供了对Java对象序列化和反...

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

    在图像处理领域,Hessian Frangi滤波算法是一种用于血管检测和结构分析的高级技术,尤其在医学成像中...通过学习和实践这一算法,不仅可以提升图像分析技能,也能为医学影像分析、计算机视觉等领域的工作打下坚实基础。

    hessian jar包

    源代码还便于学习和研究Hessian如何处理数据编码、解码,以及如何优化网络通信性能。 Hessian的主要特点包括: 1. **二进制格式**:Hessian使用高效的二进制格式,而不是文本格式如XML或JSON,这减少了在网络上传输...

    hessian php与java通讯demo源码

    Hessian是一种二进制协议,它允许在不同的编程语言之间进行高效的远程方法调用(RPC)。...通过分析和实践这些示例代码,你可以更好地掌握Hessian的工作原理和使用方式,为你的跨语言项目打下坚实的基础。

    Hessian入门引路

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

    Jacobian矩阵和Hessian矩阵.pdf

    雅各比矩阵和Hessian矩阵是深度学习和数值计算中十分重要的概念。雅各比矩阵可以看作是多元函数微分的推广,它描述了多元函数在某点的局部线性逼近。Hessian矩阵则是雅各比矩阵的推广,它包含了多元函数的二阶偏导数...

    Hessian矩阵与牛顿法.pdf

    其中,梯度下降法是最基础也最常用的优化算法之一,但其在某些特定场景下面临局限性。为此,引入了更为高级的优化方法——牛顿法,它通过利用Hessian矩阵的信息来改进搜索方向,从而提高优化过程的效率。本文将深入...

    struts2+ibatis+spring+Hessian 整合项目

    struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...

    二进制Web服务Hessian刘骥讲座--(附源码)

    6. **PPT材料**:二进制Web服务Hessian.ppt很可能是讲座的幻灯片,其中可能涵盖了Hessian的基础概念、工作流程、优缺点以及实战案例等内容,是学习和复习Hessian的重要参考资料。 7. **压缩包资源**:Hessian.rar...

Global site tag (gtag.js) - Google Analytics