`
esteem
  • 浏览: 156183 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hessian 使用小记

    博客分类:
  • SOA
阅读更多

想来想去还是把hessian的应用放到SOA栏目中来吧

hessian实现了远程调用,不需要学习WEB service的一些规范就可以直接上手, 它一个轻量级的Java远程访问的解决方案。Hessian很像WebService,只不过它不使用SOAP协议,而是使用它自己的binary协议

使用它只需要3个关键的类

1、stub(存根) 也就是服务器端和客户端的公共接口

2、服务器端对该接口的实现类serviceimpl

3、服务器端的sevlet ,hessian帮我们实习了个HessianServlet,当然我们可以直接让我们的serviceimpl继承HessianServlet

下面举例,例子在网络上,官方文档上都有的

stub

/**
* @author 付志超
* @time Sep 26, 2008 2:35:54 PM
*/
/**
 * 
 */
package com.alimama.function;

import com.alimama.bean.Student;

public interface SayHello {
	public String sayHello(String name);
	public Student getStudent() ;

}

 

serviceimpl

/**
* @author 付志超
* @time Sep 26, 2008 2:36:58 PM
*/
package com.alimama.function.impl;

import com.alimama.bean.Student;
import com.alimama.function.SayHello;
import com.caucho.hessian.server.HessianServlet;

public class SayHelloImpl extends HessianServlet implements SayHello {

	public String sayHello(String name) {
		return "hello "+name;
	}

	@Override
	public Student getStudent() {
	        Student  s=new Student();
	        s.setName("付志超");
	        s.setSchool("武汉理工大学");
	        return s;       
	}

}

 

本例中需要传输的序列化的bean

/**
* @author 付志超
* @time Sep 26, 2008 3:42:47 PM
*/
package com.alimama.bean;

import java.io.Serializable;

public class Student implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -9006571629757493042L;
	private String name;
	private String school;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSchool() {
		return school;
	}
	public void setSchool(String school) {
		this.school = school;
	}
	public String toString() {
		return name+"  "+school;
	}
	
	
}

 

最后是web.xml的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>
			com.alimama.function.impl.SayHelloImpl
		</servlet-class>
	</servlet>
  <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>com.alimama.function.impl.Test</servlet-class>
  </servlet>

	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>
</web-app>

 

当然如果我们的 serviceimpl没有实现 HessianServlet

 那么web.xml应该修改成为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<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>com.alimama.function.impl.SayHelloImpl</param-value>
		</init-param>
		<init-param>
			<param-name>home-api</param-name>
			<param-value>com.alimama.function.SayHello</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
</web-app>

 

 记住 Student一定要实习可序列化接口

最后是我们的客户端的调用

/**
* @author 付志超
* @time Sep 26, 2008 2:57:27 PM
*/
package com.alimama.test;

import java.net.MalformedURLException;

import com.alimama.function.SayHello;
import com.caucho.hessian.client.HessianProxyFactory;

public class HessianClientTest {
	public static void main(String[] args) {
		String url="http://127.0.0.1:8080/testHessian/hello";
		HessianProxyFactory factory=new HessianProxyFactory();
		try {
			SayHello say=(SayHello) factory.create(SayHello.class, url);
			System.out.println(say.sayHello("abc"));
			System.out.println(say.getStudent());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

  启动服务器,然后执行上面的客户端,就会看到输出

 hello abc
  付志超  武汉理工大学

 

还有点要注意 如果用最新的版本的 hessian-3.1.6.jar  hessian-3.2.0.jar  都出现问题 无法获得 出现IO异常

但是使用一个 hessian-3.0.20.jar 的老包 是没问题的

 

=====

OK 以后在进一部使用hessian了 

分享到:
评论
3 楼 carlos175 2008-12-03  
现在在两台linux的服务器上部署了两个应用。webserver都是resin3.1.5。
当时在一台机器上的时候用hessian通信传输数据没有问题,然后在本地用两台windows的机器测试时候也没有问题。现在分到了两台远程的linux服务器上却发现不行了。一直报下面的这个错误。

com.caucho.hessian.client.HessianConnectionException: 501: java.io.IOException: Server returned HTTP response code: 501 at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:197) at $Proxy22.readNews(Unknown Source) at _jsp._test_0hessian__jsp._jspService(test_hessian.jsp:7) at com.caucho.jsp.JavaPage.service(JavaPage.java:61) at com.caucho.jsp.Page.pageservice(Page.java:578) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:192) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:181) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:269) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:603) at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:721) at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:643) at java.lang.Thread.run(Thread.java:595) Caused by: java.io.IOException: Server returned HTTP response code: 501
2 楼 esteem 2008-10-31  
yellowb 写道

刚好找到这篇文章~~~~

欢迎讨论 呵呵 难得好 第一个留言的
1 楼 yellowb 2008-10-27  
刚好找到这篇文章~~~~

相关推荐

    Hessian 的字段序列化小记

    本文将围绕"Hessian的字段序列化小记"这一主题,深入探讨Hessian的工作原理、序列化过程以及其在实际应用中的价值。 Hessian的目标是通过减少数据传输的体积来提高网络通信的效率。相比于XML和JSON等文本格式,...

    hessian使用小例子

    同时,由于Hessian使用二进制格式,相比于基于文本的协议(如SOAP),它在网络传输上的效率更高。 总的来说,Hessian是一种强大的工具,特别适用于需要快速、低开销的Java远程调用场景。通过这个简单的示例,我们...

    Hessian 使用小结

    **独立使用Hessian** 在不依赖任何框架的情况下,使用Hessian的步骤如下: 1. **添加依赖**:首先,客户端和服务端都需要引入Hessian的jar包,以便使用其提供的API和功能。 2. **服务端设置**:在服务端,需要...

    hessian 使用实例

    在使用Hessian前,需要在项目中引入Hessian的相关依赖。对于Java项目,可以通过Maven或Gradle添加Hessian的jar包。例如,在Maven的pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;com.caucho&lt;/groupId&gt; ...

    Hessian

    1. **二进制编码**:Hessian使用高效的二进制编码,对数据类型进行压缩,减少了在网络上传输的数据量,从而提高了效率。 2. **简单类型支持**:Hessian支持基本的Java数据类型,如整型、浮点型、字符串、日期等,...

    C#中Hessian的使用例子

    本教程将详细介绍C#中Hessian的使用及其相关知识点。 首先,Hessian协议设计的目标是简洁高效,它能将常见的数据类型如字符串、整型、浮点型等转换为二进制格式,从而在网络传输时占用更少的带宽。这种协议特别适合...

    Hessian的使用配置步骤

    远程方法调用的比较,Hessian方法的介绍和相关配置.Hessian是一个轻量级的remoting on http工具,...只是它不使用SOAP协议,但相比webservice而言更简单、快捷。这个文件可以是hessian在spring项目和web项目的简单配置

    android端使用hessian跟web服务器通讯

    2. 处理结果:服务器执行完方法后,返回的数据会通过Hessian协议反序列化成对象,Android客户端可以直接使用。 五、错误处理与调试 1. 异常处理:在调用远程方法时,可能会出现网络异常或服务器异常,需要捕获并...

    hessian学习实例

    在这个“hessian学习实例”中,我们将深入探讨Hessian框架的使用,特别是如何将其与Spring框架集成,以及如何构建server端和client端。 首先,让我们理解Hessian的工作原理。Hessian基于HTTP协议,它将Java对象序列...

    hessian

    1. **二进制格式**:Hessian使用紧凑的二进制格式,相比基于文本的协议如XML-RPC或SOAP,数据传输量更小,解析速度更快。 2. **动态类型**:Hessian支持动态类型,这意味着服务端和客户端无需预先定义接口或数据结构...

    一个简单的Hessian示例

    一个简单的Hessian,简单介绍了Hessian的使用方式,介绍了Hessian和Spring集成的使用方式,以及单独使用Hessian的方式。

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

    这对于优化自定义序列化逻辑或者解决Hessian使用中遇到的问题非常有帮助。 总结起来,Hessian是一种高效、轻量级的二进制序列化协议,特别适合于跨语言的网络通信。理解并掌握Hessian的基本概念和使用方法,能够...

    hessian案例,hessian案例

    Hessian是一种高效的二进制序列化协议,常用于...通过使用Hessian,开发者可以轻松地构建分布式系统,实现服务之间的便捷调用。案例中的文件提供了不同角度的分析和实践指导,帮助我们更好地理解和应用Hessian技术。

    hessian包及一个简单的使用实例

    1. **二进制序列化**:Hessian使用高效的二进制格式进行序列化和反序列化,与XML或JSON相比,这种格式的数据体积更小,网络传输更快。 2. **类型安全**:Hessian支持各种数据类型,包括基本类型、对象、数组和映射...

    dubbo-hessian协议http请求demo(java)

    在IT行业中,分布式服务框架Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理方案,它使得服务提供者可以在一个系统中发布服务...在实际项目中,可以根据业务需求和安全考虑,灵活调整和优化Hessian协议的使用方式。

    Hessian多个版本打包下载

    在使用这些Hessian版本时,开发者还需要关注如何正确地配置和集成到自己的项目中。这包括设置服务器端和客户端的Hessian服务,定义服务接口,处理序列化和反序列化的过程,以及调试可能出现的问题。在进行版本升级时...

    使用hessian进行服务器-客户端通讯

    在这个案例中,提供的"压缩包子文件的文件名称列表"——"hessian使用案例",很可能包含了服务器端和客户端的代码示例。这些示例可能包括了服务器端的服务接口和实现、web.xml配置、客户端的HessianProxyFactory使用...

    springMVC hessian

    在给定的项目中,"springMVC-hessian" 压缩包很可能包含了一个使用 SpringMVC 构建的 Web 服务,以及一个使用 Hessian 实现的远程服务接口。Readme 文件应该提供了详细的步骤指导,解释了如何配置 SpringMVC 以支持 ...

    hessian 使用

    此例子有两个工程,hessianServer(服务端工程),hessianClient(客户端工程),把 hessianServer工程 启动之后就可以通过 hessianClient 访问 服务端的服务了。

    Hessian应用

    2. **生成代理**:在客户端,我们使用Hessian工具生成一个服务代理,这个代理可以像调用本地对象一样调用远程服务。 3. **网络通信**:当调用代理方法时,Hessian会自动将参数序列化,通过HTTP发送到服务端;服务端...

Global site tag (gtag.js) - Google Analytics