小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 躍來躍去 2008-08-23
       前陣子頭兒讓寫一個(gè)webservice。說真的以前沒有寫過,還真是摸不著頭腦。后來頭兒就把hessian的地址給發(fā)了過來。給我指了一個(gè)方向。再學(xué)習(xí)2天后基本把項(xiàng)目要求的實(shí)現(xiàn)出來了。對(duì)于這種輕量級(jí)的東西還是很好學(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 {
               //返回用戶的姓名,為了測(cè)試返回字符串
               public String getUserName();
               //返回一個(gè)用戶的對(duì)象,用來測(cè)試返回對(duì)象
               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í)候最好都一樣的號(hào)。
       然后來說一下服務(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ù)器端測(cè)試的話就寫一個(gè)測(cè)試類就ok。其實(shí)跟在客戶端唯一不同的就是地址不一樣。
----------------------------------------------------------------------------------------------------------      
       public class BasicClient {
               public static void main() throw Exception {
                       //這里的端口號(hào)貌似是必須加上的。我當(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和接口的類來返回給客戶端。客戶端就可以使用接口中定義的這些方法了。
                       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í)很簡(jiǎn)單。
---------------------------------------------------------------------------------------------------------- 
    <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è)版本在返回對(duì)象時(shí)候會(huì)出現(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é)會(huì)及時(shí)更新。
 
 
補(bǔ)充:
---------------------------------------------------------------------------------------------------------- 2008-10-17
為什么服務(wù)器端是List對(duì)象,到了客戶端就是hashmap了呢?????
原因:我的list在上傳前保存的是對(duì)象,經(jīng)測(cè)試也不是map型,但到服務(wù)端從list獲取的變成了map型,經(jīng)分析是因?yàn)槟夸浗Y(jié)構(gòu)的原因,如果客戶端和服務(wù)器端package的名字不一樣的話,就會(huì)造成服務(wù)端反序列化時(shí)出現(xiàn)問題。所以在使用List的時(shí)候一定要讓bean的package的名稱在客戶端和服務(wù)器端是一致的。

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多