`
woshixushigang
  • 浏览: 564210 次
  • 性别: 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例子,有代码,可以直接跑起来,一针见血的例子,相当 简单,有服务器端与客户端两个例子,相当好理解

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

    NULL 博文链接:https://topmanopensource.iteye.com/blog/836038

    hessian.jar 轻量级webservice实现

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

    基于spring+hessian框架的webservice实例

    webservice技术,基于spring+hessian框架开发的简单实例

    spring 集成 hessian例子

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

    Hessian-3.2.1.jar和源码

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

    hessian-4.0.37-src.jar

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

    hessian 源代码与jar包

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

    hessian3.1

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

    WebService, 轻量级WebService

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

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

    Hessian: 是由caucho提供的一个基于binary-RPC实现的远程通讯library。 webservice 是一种标准,不同的平台,不同的语言都可提供webservice开发实现。在java领域,webservice框架很多,axis,xfire,cxf

    Hessian的使用配置步骤

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

    Hessian资料(配置使用)

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

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

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

    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代码和配置文件集成配置说明 生成的所有文件存放在服务器...

    hessian 在PHP中的使用介绍

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

    多种webService的完整实例

    rest cxf hessian 3种webservice的例子 用了maven搭建 项目写了CXF的rest和soap两种方式 client采用多种方式实现。

    轻量级的remoting on http工具(最新):hessian-4.0.60

    Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。 只是它不使用SOAP协议,但相比webservice而言更简单、快捷。

    hessian的jar包

    webservice的一种轻量级实现,能在普通的web容器上运行

    不同于webservice的移动开发

    hessian是好东西,应用面广,前景应该不错

Global site tag (gtag.js) - Google Analytics