hession 个人理解类似于java里面的rmi,即远程调用,为什么有了rmi还会有hession呢 ,个人理解是rmi不跨平台,只能在java直接调用,但是hession可以做到跨平台,比如说后台是java写的,客户端是C#的,只要接口java和C#的定义成一致即可,包括如果传输的参数是对象的话,也保持对象一致(包括类名和属性名称)。这样开发起来相对于webservice而言比较快速,也是轻量级的,还有一个很重要的原因就是webservice不能传输二进制流但是hession可以传递二进制流,因为hessio的协议交互本身就是靠二进制流传输的。
下面是一个hession的列子:
服务断代码:
这是一个接口:
package com.djk.hession;
public interface ISay
{
void say(Person person);
}
这是接口的实现类:
package com.djk.hession;
public class SayImpl implements ISay
{
@Override
public void say(Person person)
{
System.out.println(person);
}
}
这是参数对象:
package com.djk.hession;
import java.io.Serializable;
public class Person implements Serializable
{
private static final long serialVersionUID = 794513777007240506L;
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}
}
接下来是web.xml里面的hession的servlet配置:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>com.djk.hession.SayImpl</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
这样hession的服务端就开发完成了,接下来是hession的客户端开发 这边也是用java开发的当然可以换成C#的。
首先是接口,这个接口要和服务端的接口保持一致:
package com.djk;
import com.djk.hession.Person;
public interface ISay {
void say(Person person);
}
传输的参数对象,这个对象也要和服务端的对象保持一致:
package com.djk.hession;
import java.io.Serializable;
public class Person implements Serializable
{
private static final long serialVersionUID = 794513777007240506L;
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}
}
客户端测试代码:
package com.djk;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.djk.hession.Person;
public class Test2
{
public static void main(String[] args) throws MalformedURLException {
// Hessian代理工厂
HessianProxyFactory factory = new HessianProxyFactory();
// 访问配置的Servlet路径
String url = "http://localhost:9998/HessionServer/hello";
// 使用Hessian工厂获得接口的具体实现类
ISay i = (ISay) factory.create(ISay.class, url);
Person person = new Person();
person.setId("1");
person.setName("djk");
i.say(person);
}
}