`
woshixushigang
  • 浏览: 578632 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

webservice之hessian

 
阅读更多

一年前我做的项目中遇到了要给其他的几个系统提供接口实现远程调用,数据是二进制数据。那么用哪个好呢?

 

xfire?cxf?hessain?

 

XFire是codeHaus组织提供的一个开源框架,它构建了POJOSOA之间的桥梁,主要特性就是支持将POJO通过非常简

 

单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,

 

也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。

 

CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、

 

DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或

 

者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache

 

顶级项目。

 

Hessian是一个使用二进制Web服务协议的框架,它的好处在于免除了一大堆附加的API包,方便,简单,快速等特点。

 

例如XML的处理之类的jar包,这也就是为什么说它是一个轻量级的Web服务实现框架的原因,这个原因还在于手机上的应

 

用程序可以通过Hessian提供的API很方便的访问Hessian的Web服务。

 

我的项目中需要传输二进制数据,所以我选择了hessian。

 

个人总结了下hessian的使用:

 

两种方式:1、接口的实现类继承HessianServlet,web.xml中将接口的实现类做成servlet。

               2、接口的实现类无需继承HessianServlet,web.xml文件中直接引入HessianServlet,传入init-param指明传入的接口及实现类即可。

 

方法1是继承hessianservlet在程序里写死谁为服务接口和实现类,比较呆板,降低了可重用性不够灵活。

方法2是配置文件中指明哪个为接口哪个是需要传入的实现类,比较灵活。

 

具体的例子如下:

 

客户端的接口:

package com.future.client;

public interface BasicAPI {

	public String hello();
}

 

客户端调用服务端: 

 

package com.future.client;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;

public class TestHessian  {

	public static void main(String[] args) {
		String url = "http://localhost:8080/HessianRemotingOnHttp2/xu";
		HessianProxyFactory factory = new HessianProxyFactory();
		try {
			BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);
			System.out.println("hello()"+basic.hello());
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

服务端接口:

 

package com.future.server;

public interface BasicAPI {

	public String hello();
}

 

服务端的实现类: 

package com.future.server;

import javax.jws.WebService;

import com.caucho.hessian.server.HessianServlet;
@WebService
public class BasicService extends HessianServlet implements BasicAPI{

	private String _greeting = "Hello,world";
	public void setGreeting(String greeting)
	{
		_greeting = greeting;
	}
	
	
	public String hello() {
		// TODO Auto-generated method stub
		return _greeting;
	}

}

 

配置文件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>HessianServlet</servlet-name>
  <servlet-class>com.future.server.BasicService</servlet-class>
  
  </servlet>
  <servlet-mapping>
  <servlet-name>HessianServlet</servlet-name>
  <url-pattern>/xu</url-pattern>
  </servlet-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 以上是我提到的第二种方式。为了方便大家所以我选择了网上流行的例子,便于大家浏览。

 

第二种方式:

 

服务端接口:

 

package study.hessian;

public interface IBasic {    
  
    public String hello();    
 
    public Person getPerson();    
   
}  

 

服务端实现类:

 

 

package study.hessian;
 
public class BasicService implements IBasic {    
  private String hello= "Hello, 徐士刚";    
   
  public String hello()    
  {    
    return hello;    
  }    
   
    public Person getPerson() {    
        Person person = new Person();    
        person.setColor("red");    
        person.setLength("176cm");    
        person.setName("徐士刚");    
        return person;    
    }    
}  

 

 服务端model:

 

package study.hessian;

import java.io.Serializable;

public class Person {

	private static final long serialVersionUID = 3276641446246664L;
	private String name;
	private String length;
	private String color;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getLength() {
		return length;
	}

	public void setLength(String length) {
		this.length = length;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

}

 客户端接口如下:

 

package com.future.client;

public interface IBasic {    
  
    public String hello();    
 
    public Person getPerson();    
   
}  

 客户端model:

 

package com.future.client;

import java.io.Serializable;

public class Person implements Serializable{

	private static final long serialVersionUID = 3276641446246664L;
	private String name;
	private String length;
	private String color;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getLength() {
		return length;
	}

	public void setLength(String length) {
		this.length = length;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

}

 

客户端调用服务端:

 

package com.future.client;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;

public class TestHessian {
	public static void main(String[] args) {
		String url = "http://localhost:8080/HessianRemotingOnHttp3/hello";
		HessianProxyFactory factory = new HessianProxyFactory();
		try {
			IBasic basic = (IBasic) factory.create(IBasic.class,url);
			System.out.println("hello()"+basic.hello());
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

注意以上url为

String url = ("http://" + request.getServerName() + ":"+ request.getServerPort() +

 

request.getContextPath() + "/hello"); 相信大家肯定知道的。

 

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服务。

下面我就把我在做实例的一些相关步骤描述如下:
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> 

 

配置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> 

 

 

客户端定义一个remoting-client.xml文件

<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <property name="serviceUrl"> 
<value>http://localhost:8080/HessianSpring/remoteing/HessianRemoting</value> 
</property> 
<property name="serviceInterface"> 
<value>jzh.demospring.IHello</value> 
</property> 
</bean> 


 

 

客户端调用。

try 
{                                                               
ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml"); 

IHello hello =(IHello)context.getBean("myServiceClient"); 

System.out.println(hello.sayHello()); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

 

以上是本人粗浅的介绍,希望大家多多指正,共同进步,这里谢过了!!!

  

3
11
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    基于WebService的Hessian例子教程

    【标题】基于WebService的Hessian例子教程 在IT行业中,通信和数据交换是核心部分,尤其是在分布式系统中。WebService作为一种跨平台、跨语言的通信机制,广泛用于不同系统间的交互。而Hessian则是WebService的一种...

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

    标题中的“闲着没事Hessian开发WebService的总结(一)”表明这是一篇关于使用Hessian框架开发Web服务的文章,作者可能在其中分享了个人的经验和理解。Hessian是一种轻量级的远程调用协议,它允许Java和.NET之间进行...

    hessian.jar 轻量级webservice实现

    hessian.jar 轻量级webservice实现 hessian.jar 轻量级webservice实现 hessian.jar 轻量级webservice实现

    基于spring+hessian框架的webservice实例

    在"基于spring+hessian框架的webservice实例"中,我们将看到如何结合Spring和Hessian来创建和消费Web服务。首先,我们需要创建一个服务接口和服务实现。这个接口定义了可供远程调用的方法,而实现则提供了具体的功能...

    理解RESTful架构、Hessian简介、机制、Webservice及cxf介绍

    它提供了高效的远程调用能力,相比基于文本的协议(如SOAP),Hessian能更节省带宽和提高通信效率。Hessian库可以在不同平台上使用,支持多种编程语言,简化了跨语言的远程服务调用。 WebService是一种基于XML的、...

    spring 集成 hessian例子

    相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。参考文档地址为:http://blog.csdn.net/likunwen_001/article/details/78119765

    hessian 源代码与jar包

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

    Hessian-3.2.1.jar和源码

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

    hessian-4.0.37-src.jar

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

    hessian3.1

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

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

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

    WebService, 轻量级WebService

    轻量级WebService,打包了轻量级WebService hessian的一个简单demo,还有Xfire的一个简单demo,还有一些PPT文档,相对来说,对于没有入门的童鞋们来说是个不错的资源,免费共享给大家,互相共勉(我也是菜鸟)。

    Hessian的使用配置步骤

    Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。只是它不使用SOAP协议,但相比webservice而言更简单、快捷。这个文件可以是hessian在spring项目和web项目的简单配置

    Hessian资料(配置使用)

    相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP...

    flex-hessian-java实例.rar

    ActionScript中,我们可以使用Flash Player的HTTPService或WebService类来实现Hessian调用,通过配置URL和方法名来连接到Hessian服务。 接着,我们来看看Java端。在Java服务器上,我们需要一个Hessian服务提供者,...

    bboss-gencode:这是一个自动为bboss mvc,ioc,persistent,jsp,i18n,sql配置文件,webservice,hessian服务等生成源代码的工具。Dev文档yin-bp.iteye.comblog2256948-mvc source code

    5.cxf webservice服务类文件 6.hessian服务类文件 7.sql配置文件 8.ioc / mvc组件装配部署和服务发布配置文件。 9.国际化属性文件和国际化配置 10.readme.txt代码和配置文件集成配置说明 生成的所有文件存放在服务器...

    不同于webservice的移动开发

    标题中的“不同于Web服务的移动开发”提示我们讨论的主题是移动应用开发的一种替代方式,而描述中的“Hessian是好东西,应用面广,前景应该不错”则将焦点指向了Hessian这种技术。Hessian是一种二进制的远程方法调用...

    hessian 在PHP中的使用介绍

    相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据 hessian是独立于语言的。 二、在PHP中怎么用的呢? 你是不是认为这个和soap一样在php.ini中...

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

    "**webservice**"是指Web服务,它是一种通过HTTP协议提供和使用的服务。Hessian可以被视为一种Web服务的实现方式,但相比于传统的SOAP Web服务,Hessian更加轻便和高效。 标签中的"**服务端**"和"**客户端**"是...

    Hessian的小例子

    Hessian是一种高效的二进制RPC(远程过程调用)协议,尤其在Java和.NET之间进行跨平台通信时广泛应用。这个小例子将带你了解如何在Java环境中实现Hessian服务的客户端和服务器端。让我们深入探讨Hessian的核心概念...

Global site tag (gtag.js) - Google Analytics