zoukankan      html  css  js  c++  java
  • Hessian简介

    Hessian

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据

    1介绍

    注意事项

    在进行基于Hessian的项目开发时,应当注意以下几点:
    ▲JAVA服务器端必须具备以下几点:
    ·包含Hessian的jar包
    ·设计一个接口,用来给客户端调用
    ·实现该接口的功能
    ·配置web.xml,配好相应的servlet
    ·对象必须实现Serializable 接口
    ·对于复杂对象可以使用Map的方法传递
    ▲客户端必须具备以下几点:
    ·java客户端包含Hessian.jar的包。C#中引用hessianCSharp.dll
    ·具有和服务器端结构一样的接口。包括命名空间都最好一样
    ·利用HessianProxyFactory调用远程接口。
    简单JAVA客户端例子:

    服务器端

    新建一个名EasyHession的webProject项目,将Hessian.jar放入web-inf下的lib中
    创建接口:
    package app.demo;
    public interface BasicAPI {
    public void setGreeting(String greeting);
    public String hello();
    public User getUser();
    }
    实现接口:
    package app.demo;
    public class BasicService implements BasicAPI {
    private String _greeting = "Hello, world";
    public void setGreeting(String greeting)
    {
    _greeting = greeting;
    System.out.println("set greeting success:"+_greeting);
    }
    public String hello()
    {
    return _greeting;
    }
    public User getUser() {
    return new User("prance", "meshow");
    }
    }
    创建一个实现Serializable的projo类也可以是Bean。
    package app.demo;
    import java.io.Serializable;
    public class User implements Serializable{
    String userName ="snoopy";
    String password ="showme";
    public User(Stringuser, String pwd) {
    this.userName =user;
    this.password= pwd;
    }
    public String getUserName() {
    return userName;
    }
    public String getPassword() {
    return password;
    }
    }
    接下来是配置web.xml
    <?xml version="1.0"encoding="UTF-8"?>
    <web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <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>app.demo.BasicService</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    </web-app>
    为了测试可以在编辑一个简单的test.jsp
    <%@ pageimport="com.caucho.hessian.client.HessianProxyFactory,
    app.demo.BasicAPI"%>
    <%@page language="java"%>
    <%
    HessianProxyFactory factory = newHessianProxyFactory();
    String url = ("http://" +request.getServerName() + ":" +request.getServerPort() +
    request.getContextPath() + "/hello");
    out.println(url);
    BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);
    out.println("Hello: " + basic.hello());
    out.println("Hello: " + basic.getUser() .getUserName() );
    out.println("Hello: " +basic.getUser().getPassword() );
    %>
    将一切配置成功后,将项目发布到web 服务器上去,可以是Tomcat,Rain等等。
    进入
    结果如下:
    Hello: Hello, world
    Hello: snoopy
    Hello: showme
    说明服务器端已经编写成功。

    java客户端

    创建一个名为HessianClient的JAVAProject,载入hessian.jar包
    创建与服务器端一样的接口,及基础类
    public interface BasicAPI{
    public void setGreeting(String greeting);
    public String hello();
    public User getUser();
    }
    import java.io.Serializable;
    public class User implements Serializable{
    String userName ="snoopy";
    String password ="showme";
    public User(Stringuser, String pwd) {
    this.userName =user;
    this.password= pwd;
    }
    public String getUserName() {
    return userName;
    }
    public String getPassword() {
    return password;
    }
    }

    创建客户端程序

    importcom.caucho.hessian.client.HessianProxyFactory;
    public class BasicClient {
    public static void main(String[] args)
    throwsException
    {
    String url ="http://127.0.0.1:8080/Hessian/hello";
    HessianProxyFactory factory = new HessianProxyFactory();
    BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
    System.out.println("Hello:" + basic.hello());
    System.out.println("Hello:" + basic.getUser().getUserName());
    System.out.println("Hello:" + basic.getUser().getPassword());
    basic.setGreeting("HelloGreeting");
    System.out.println("Hello:" + basic.hello());
    }
    }
    运行结果:
    Hello: Hello, world
    Hello: prance
    Hello: meshow
    Hello: Hello Greeting
  • 相关阅读:
    MySQL修改root密码的多种方法
    (转)云存储:阿里云OSS 、又拍云和 七牛 的比较
    微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
    Feed系统架构资料收集
    百万用户时尚分享网站feed系统扩展实践
    (转)浅谈MD5加密算法中的加盐值(SALT)
    json转换成list map集合
    android在假设绘制自己定义的bitmap,然后返回给ImageView
    APPCAN学习笔记003---原生开发与HTML5技术
    【问题解决】syntax error: unexpected end of file或-bash: ./full_build.sh: /bin/bash^M: bad interpreter: No
  • 原文地址:https://www.cnblogs.com/yangkai-cn/p/4017257.html
Copyright © 2011-2022 走看看