打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Hessian学习/使用总结
       前阵子头儿让写一个webservice。说真的以前没有写过,还真是摸不着头脑。后来头儿就把hessian的地址给发了过来。给我指了一个方向。再学习2天后基本把项目要求的实现出来了。对于这种轻量级的东西还是很好学习也很容易上手的。
       其实刚看到的时候也是自己先上网找了很多篇别人的学习笔记。基本写的都差不多,不过挺通俗易懂的。后来看官网的例子发现其实也很容易懂。
       官方地址:http://hessian.caucho.com/
       下载的jar包也在这里。我使用的是hessian-3.2.0-src.jar。事实证明3.1.5和3.1.6都有很多的bug不推荐使用。
       其实hessian很强大,但是我用的时候只用到了它很少的一部分功能,所以我也就说说这点吧。
       还是先定义一个供客户端和服务器端使用的接口,里边放上应用需要的方法。
----------------------------------------------------------------------------------------------------------      
       public interface IBasic {
               //返回用户的姓名,为了测试返回字符串
               public String getUserName();
               //返回一个用户的对象,用来测试返回对象
               public User getUserInfo();
               //添加新用户
               public boolean AddUser(User u);
       }
---------------------------------------------------------------------------------------------------------- 
       至于User就是一个标准的JAVABEAN。这里需要注意的一点是。因为在远程调用过程中两边都需要用到这个bean。所以这个bean一定要保持一样。继承序列的时候最好都一样的号。
       然后来说一下服务器端的程序。这里要实现所有接口中的方法。
----------------------------------------------------------------------------------------------------------      
       public class BasicService implements IBasic {
               //根据自己的逻辑来返回一个字符串给客户端
               public String getUesrName() {
                   String name = "hanxiaoyue";
                   return name;
               }
               //这里就可以获取一个User然后返回给客户端
               public User getUserInfo() {
                   User u = new User();
                   u.setUsername("hanxiaoyue");
                   u.setAge(22);
                   return u;
               }
               //这里就可以通过用户传递过来的参数来进行操作
               public boolean AddUser(User u) {
                   String name = u.getUsername();
                   boolean res = false;
                   if(name != null && !name.equals("")) {
                       res = true;
                   }
                   return res;
               }
       }
---------------------------------------------------------------------------------------------------------- 
 
        ok,服务器端写好后就是客户端了。如果想在服务器端测试的话就写一个测试类就ok。其实跟在客户端唯一不同的就是地址不一样。
----------------------------------------------------------------------------------------------------------      
       public class BasicClient {
               public static void main() throw Exception {
                       //这里的端口号貌似是必须加上的。我当时加上就报错了。后边的TestHessian是项目名称。test/usertest就是servlet的名字了。在后边xml里配置一下就ok。
                       String url = http://localhost:80/TestHessian/test/usertest;
                       HessianProxyFactory factory = new HessianProxyFactory();
                       //通过这里构建一个hessian的代理工厂来根据url和接口的类来返回给客户端。客户端就可以使用接口中定义的这些方法了。
                       IBasic basic = (IBasic)factory.create(IBasic.class,url);
                       User u = basic.getUserInfo();
                       User u2  = new User();
                       u2.setUsername("hanxiaoyue");
                       boolean res = basic.AddUser(u2);
                       String username = basic.getUserName();
               }
       }
---------------------------------------------------------------------------------------------------------- 
 
        最后我们来说说在web.xml里是如何配置的。其实很简单。
---------------------------------------------------------------------------------------------------------- 
    <servlet>
        <servlet-name>usertest<servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet<servlet-class>
        <init-param>
            <param-name>home-class<param-name> 
            <param-value>study.hessian.BasicService<param-value>
        </init-param>
        <init-param>
            <param-name>home-api<param-name>
            <param-value>study.hessian.IBasic<param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>usertest<servlet-name>
        <url-pattern>/test/usertest<url-pattern>
    <servlet-mapping>
---------------------------------------------------------------------------------------------------------- 
 
        ok,到这里基本一套流程就都下来了。其实在实际用的时候比这个稍微复杂了一点。但是大概的流程都是一样的。这里特别要说的就是之前提到的3.1.5和3.1.6的bug。我发现的最严重的一个就是这两个版本在返回对象时候会出现异常。而且目前无法解决。所以选择了使用bug修改过后的3.2.0。网上很多关于hessian的文章没有提到这个事情是因为那些文章比较早,写的时候3.1.5和3.1.6都没有出来。
        目前项目中使用hessian的部分还是比较稳定的。以后有新的总结会及时更新。
 
 
补充:
---------------------------------------------------------------------------------------------------------- 2008-10-17
为什么服务器端是List对象,到了客户端就是hashmap了呢?????
原因:我的list在上传前保存的是对象,经测试也不是map型,但到服务端从list获取的变成了map型,经分析是因为目录结构的原因,如果客户端和服务器端package的名字不一样的话,就会造成服务端反序列化时出现问题。所以在使用List的时候一定要让bean的package的名称在客户端和服务器端是一致的。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
hessian教程
webservice之hessian
用spirng和hessian构建分布式应用(远程接口)的方法[原] - Spring -...
Hessian入门(与Spring集成)
spring和hessian整合
Hessian
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服