日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hessian學(xué)習(xí)/使用總結(jié)

 躍來躍去 2008-08-23
       前陣子頭兒讓寫一個(gè)webservice。說真的以前沒有寫過,還真是摸不著頭腦。后來頭兒就把hessian的地址給發(fā)了過來。給我指了一個(gè)方向。再學(xué)習(xí)2天后基本把項(xiàng)目要求的實(shí)現(xiàn)出來了。對于這種輕量級的東西還是很好學(xué)習(xí)也很容易上手的。
       其實(shí)剛看到的時(shí)候也是自己先上網(wǎng)找了很多篇?jiǎng)e人的學(xué)習(xí)筆記?;緦懙亩疾畈欢?,不過挺通俗易懂的。后來看官網(wǎng)的例子發(fā)現(xiàn)其實(shí)也很容易懂。
       官方地址:http://hessian./
       下載的jar包也在這里。我使用的是hessian-3.2.0-src.jar。事實(shí)證明3.1.5和3.1.6都有很多的bug不推薦使用。
       其實(shí)hessian很強(qiáng)大,但是我用的時(shí)候只用到了它很少的一部分功能,所以我也就說說這點(diǎn)吧。
       還是先定義一個(gè)供客戶端和服務(wù)器端使用的接口,里邊放上應(yīng)用需要的方法。
----------------------------------------------------------------------------------------------------------      
       public interface IBasic {
               //返回用戶的姓名,為了測試返回字符串
               public String getUserName();
               //返回一個(gè)用戶的對象,用來測試返回對象
               public User getUserInfo();
               //添加新用戶
               public boolean AddUser(User u);
       }
---------------------------------------------------------------------------------------------------------- 
       至于User就是一個(gè)標(biāo)準(zhǔn)的JAVABEAN。這里需要注意的一點(diǎn)是。因?yàn)樵谶h(yuǎn)程調(diào)用過程中兩邊都需要用到這個(gè)bean。所以這個(gè)bean一定要保持一樣。繼承序列的時(shí)候最好都一樣的號。
       然后來說一下服務(wù)器端的程序。這里要實(shí)現(xiàn)所有接口中的方法。
----------------------------------------------------------------------------------------------------------      
       public class BasicService implements IBasic {
               //根據(jù)自己的邏輯來返回一個(gè)字符串給客戶端
               public String getUesrName() {
                   String name = "hanxiaoyue";
                   return name;
               }
               //這里就可以獲取一個(gè)User然后返回給客戶端
               public User getUserInfo() {
                   User u = new User();
                   u.setUsername("hanxiaoyue");
                   u.setAge(22);
                   return u;
               }
               //這里就可以通過用戶傳遞過來的參數(shù)來進(jìn)行操作
               public boolean AddUser(User u) {
                   String name = u.getUsername();
                   boolean res = false;
                   if(name != null && !name.equals("")) {
                       res = true;
                   }
                   return res;
               }
       }
---------------------------------------------------------------------------------------------------------- 
 
        ok,服務(wù)器端寫好后就是客戶端了。如果想在服務(wù)器端測試的話就寫一個(gè)測試類就ok。其實(shí)跟在客戶端唯一不同的就是地址不一樣。
----------------------------------------------------------------------------------------------------------      
       public class BasicClient {
               public static void main() throw Exception {
                       //這里的端口號貌似是必須加上的。我當(dāng)時(shí)加上就報(bào)錯(cuò)了。后邊的TestHessian是項(xiàng)目名稱。test/usertest就是servlet的名字了。在后邊xml里配置一下就ok。
                       String url = http://localhost:80/TestHessian/test/usertest;
                       HessianProxyFactory factory = new HessianProxyFactory();
                       //通過這里構(gòu)建一個(gè)hessian的代理工廠來根據(jù)url和接口的類來返回給客戶端??蛻舳司涂梢允褂媒涌谥卸x的這些方法了。
                       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里是如何配置的。其實(shí)很簡單。
---------------------------------------------------------------------------------------------------------- 
    <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,到這里基本一套流程就都下來了。其實(shí)在實(shí)際用的時(shí)候比這個(gè)稍微復(fù)雜了一點(diǎn)。但是大概的流程都是一樣的。這里特別要說的就是之前提到的3.1.5和3.1.6的bug。我發(fā)現(xiàn)的最嚴(yán)重的一個(gè)就是這兩個(gè)版本在返回對象時(shí)候會出現(xiàn)異常。而且目前無法解決。所以選擇了使用bug修改過后的3.2.0。網(wǎng)上很多關(guān)于hessian的文章沒有提到這個(gè)事情是因?yàn)槟切┪恼卤容^早,寫的時(shí)候3.1.5和3.1.6都沒有出來。
        目前項(xiàng)目中使用hessian的部分還是比較穩(wěn)定的。以后有新的總結(jié)會及時(shí)更新。
 
 
補(bǔ)充:
---------------------------------------------------------------------------------------------------------- 2008-10-17
為什么服務(wù)器端是List對象,到了客戶端就是hashmap了呢?????
原因:我的list在上傳前保存的是對象,經(jīng)測試也不是map型,但到服務(wù)端從list獲取的變成了map型,經(jīng)分析是因?yàn)槟夸浗Y(jié)構(gòu)的原因,如果客戶端和服務(wù)器端package的名字不一樣的話,就會造成服務(wù)端反序列化時(shí)出現(xiàn)問題。所以在使用List的時(shí)候一定要讓bean的package的名稱在客戶端和服務(wù)器端是一致的。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多