hessian学习手记

一、 Hessian原理简介:

           Hessian 是由 caucho 提供的一个 基于 Binary-RPC 协议实现 的远程通讯 library 。在使用过程中,请求端 通过 Hessian 本身提供的 API 来向服务端发起请求, Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流,然后 用Http 协议进行传输。 响应端根据 Hessian 提供的 API 来接收请求, 而后,Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。 处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。

 

二、 Hessian 调用实例

    1. 服务端实体类:

 

package com.shhx.model;

import java.io.Serializable;

public class PlaneBean implements Serializable {
	
	private String color;
	private String length;
	private String owner;
	
	private static final long serialVersionUID = 1L;

	public PlaneBean() {
	}

	public String getColor() {
		return color;
	}

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

	public String getLength() {
		return length;
	}

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

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}
    
}

 2.服务端接口:

 

package com.shhx.service;

import com.shhx.model.PlaneBean;

public interface IBasic {
	
	public String getAirLine();

	public PlaneBean getPlaneBean();
}

   3.服务端接口实现类:

 

package com.shhx.service;

import com.caucho.hessian.server.HessianServlet;
import com.shhx.model.PlaneBean;

public class IBasicImpl extends HessianServlet implements IBasic {
	
	private String airline= "Shanghai - Shenzhen";  

	public String getAirLine() {
		return airline;
	}

	public PlaneBean getPlaneBean() {
		PlaneBean plane = new PlaneBean();
		plane.setColor("silver");
		plane.setLength("30");
		plane.setOwner("MU");
		
		return plane;
	}

}
 

      4. 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">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/remoting-servlet.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>


	<servlet>
		<servlet-name>hessian</servlet-name>
		<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
		<init-param>
			<param-name>home-class</param-name>
			<param-value>com.shhx.service.IBasicImpl</param-value>
		</init-param>
		<init-param>
			<param-name>home-api</param-name>
			<param-value>com.shhx.service.IBasic</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>hessian</servlet-name>
		<url-pattern>/hessian</url-pattern>
	</servlet-mapping>

</web-app>

   5.  WEB-INF下 remoting-servlet.xml 的配置:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<!--  定义普通bean实例-->
	<bean id="iBasicImpl" class="com.shhx.service.IBasicImpl" />

	<!--  使用HessianServiceExporter 将普通bean导出成Hessian服务-->
	<bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
	
		<!--  需要导出的目标bean-->
		<property name="service" ref="iBasicImpl" />
		
		<!--  Hessian服务的接口-->
		<property name="serviceInterface" value="com.shhx.service.IBasic" />
	</bean>
</beans>

  6. 客户端要有对应的实体类和接口,客户端代码:

 

package com.shhx.service;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;
import com.shhx.model.PlaneBean;

public class BasicClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "http://127.0.0.1:8080/hessianDemo/hessian";
		HessianProxyFactory factory = new HessianProxyFactory();
		
		try {
			IBasic basic = (IBasic) factory.create(IBasic.class, url);
			System.out.println(basic);
			System.out.println("airline: " + basic.getAirLine());
			
			PlaneBean plane = basic.getPlaneBean();
			System.out.println("color: " + plane.getColor());
			System.out.println("length: " + plane.getLength());
			System.out.println("owner: " + plane.getOwner());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}

}

   客户端运行结果如下:

      HessianProxy[http://127.0.0.1:8080/hessianDemo/hessian]
      airline: Shanghai - Shenzhen
      color: silver
      length: 30
      owner: MU

 

三、  在进行基于Hessian的项目开发时,应当注意以下几点:   

       ▲JAVA服务器端必须具备以下几点:  

                -包含Hessian的jar包;

                -设计一个接口,用来给客户端调用; 

                -实现该接口的功能;

                -配置web.xml,配好相应的servlet;  

                -对象必须实现Serializable 接口; 

                -对于复杂对像可以使用Map的方法传递;  

       ▲客户端必须具备以下几点:  

                -java客户端包含Hessian.jar的包; 

                -具有和服务器端结构一样的接口。包括命名空间都最好一样;

            -利用HessianProxyFactory调用远程接口。

四、   Hessian特点总结:

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

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

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

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


            下载地址: https://i-blog.csdnimg.cn/blog_migrate/031dcd3d19810ae66eb41ea748fa051b.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值