hessian简介:
优点:【摘自网上】hessian类似于Webservice,但是它不使用soap协议,它把协议报文封装到http封包中,通过HTTP信道传输。是一种高效简洁的远程调用框架,它采用的是二进制RPC协议(Binary),具有轻量、传输量小、平台无关的特点,特别适合于目前网络带宽比较小的手机网络应用项目。 Hessian是通过servlet提供远程服务,完全使用动态代理来实现的,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。hessian已经支持Java,Flash/Flex,Python,C++,.NET C#,D,Erlang,PHP,Ruby,Objective C。其中我最喜欢的就是它不需要我们与xml“打交道”,直接操作对象,省去了很多麻烦。
缺点:如果service层中返回的对象是复杂对象,使用它就会削弱Hessian的传输量小的优点,而且也会增加Hessian客户端的代码量。既然它是把对象序列化为二进制流的形式在http信道中传输,那么对于安全性高的应用不应该采用hessian(比如网上支付等)、
hessian的学习很简单且容易上手,下面给一个简单的列子:
新建一个项目hessianTest,建立一个JavaBean,且必须实现序列化接口(对象需要序列化为二进制流在网络上传输)。
import java.io.Serializable;
public class Car implements Serializable{
private String name;
private String card;
setter and getter。。。
}
建立一个对外暴露的接口,以供客户端进行调用。
public interface CarInter {
public String getName();
public Car getCar();
}
在服务器端建立一个接口的实现类,对接口中的方法进行业务操作。
public class CarService implements CarInter {
public Car getCar() {
Car car = new Car();
car.setCard("京A25450");
car.setName("宝马");
return car;
}
public String getName() {
return "我是奥巴马!";
}
}
最后建立一个客户端,实例化一个hessian的代理工厂,调用接口方法,返回需要数据。[这里我把客户端调用和服务器端的业务操作都写在了一个项目中,你可以分离客户端和服务器端,实现远程调用。即把服务端发布到web服务器,在另一个程序中利用客户端(可以是个Java项目)调用接口方法]
public class CarClient {
/**
* @param args
* @throws MalformedURLException
*/
public static void main(String[] args) throws MalformedURLException {
//该地址是服务端提供给你的接口调用地址
String url = "http://localhost:8080/hessianTest/hello";
HessianProxyFactory factory = new HessianProxyFactory();
CarInter basic =(CarInter)factory.create(CarInter.class,url);
Car car =basic.getCar();
System.out.println("车的牌号:"+car.getCard());
System.out.println("车的品牌:"+car.getName());
System.out.println("我打印的字符串:"+basic.getName());
}
}
最重要的就是服务端对web.xml的配置,
<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.hessian.service.CarService</param-value> </init-param> <!-- 接口 --> <init-param> <param-name>home-api</param-name> <param-value>com.hessian.inter.CarInter</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
据了解,Spring已经完美的实现了hessian,以后研究一下、