小试Hession

来源:互联网 发布:怎么开淘宝店啊 编辑:程序博客网 时间:2024/04/29 04:37

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{@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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);}}


0 0
原创粉丝点击