Hessian入门

Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。只是它不使用SOAP协议,但相比webservice而言更简单、快捷。摘自:http://www.cnblogs.com/xdp-gacl/p/3897534.html

官网:http://hessian.caucho.com/

 

下面是基于eclipse和tomcat6做的一个实例:

服务端:

public interface IHelloService {
    /**
     * 打印Hello
     * @return
     */
    String printHello();
    
    /**
     * 加法计算
     * @param a
     * @param b
     * @return
     */
    int add(int a, int b);
    
    /**
     * 设置用户
     * @param isDefault:是否默认用户
     * @return
     */
    User setUser(boolean isDefault);
public class HelloServiceImpl extends HessianServlet implements IHelloService{//注意,这里继承了HessianServlet,所以可作为一个servlet被调用

    @Override
    public String printHello() {
        return "Hello Hessian";
    }

    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public User setUser(boolean isDefault) {
        if(isDefault){
            return new User();
        }else{
            return new User("新用户", "new new new");
        }
    }
}
public class User implements Serializable {
    String userName ="默认姓名";
    String address ="浙江杭州";
    
    public User() {
        super();
    }
    public User(String userName, String address) {
        super();
        this.userName = userName;
        this.address = address;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User [姓名=" + userName + ", 地址=" + address + "]";
    }
    
}

web.xml配置:

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>app.demo.HelloServiceImpl</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

然后在tomcat中启动项目。


 

客户端:

 

先将服务端的接口IHelloService和实体类User复制到客户端项目中。然后写Client类:

public class BasicClient {
    /**
     * @param args
     */
    public static void main(String[] args)throws Exception {
        String url ="http://localhost:8080/HessianServer/hello";
        HessianProxyFactory factory = new HessianProxyFactory();
        IHelloService service = (IHelloService)factory.create(IHelloService.class, url);
        
        /**下面调用接口的方法,发现可获取到服务端 impl实现类的处理结果,这就是hessia的一点好处了*/
        System.out.println("打印Hello:" + service.printHello());
        System.out.println("加法计算:10+20= " + service.add(10, 20));
        System.out.println("默认用户:" + service.setUser(true));
        System.out.println("非默认用户:" + service.setUser(false));
    }

}


打印结果:

打印Hello:Hello Hessian
加法计算:10+20= 30
默认用户:User [姓名=默认姓名, 地址=浙江杭州]
非默认用户:User [姓名=新用户, 地址=new new new]


 

posted @ 2016-12-07 17:09  艺言弈行  阅读(181)  评论(0编辑  收藏  举报