<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

    轉自http://cxshun.iteye.com/blog/1273147


    最近公司最近需要將以前提供出去的接口統一用一個標準來實現,考慮到webservice這個是標 準,因此我花時間大概學習了一下webservice,也對JAVA的幾個webservice框架進行了一些小例子的學習。

    JAVA調用webservice,當你剛開始接觸的時候你會覺得它是一個惡夢,特別是沒有一個統一的標準實現,比起.net的那些幾步就可以完成的webservice實現,我們看著JAVA的實現真是傷心啊。但就算是傷心,我們也還是要完成的。JAVA也不乏比較好的實現,如xfire,jersey,CXF。有人會說axis2,那個東西,看著就傷心,它不包括在比較好里面,比較差里面反倒有它的一席之位。怎么差,這里先不說,我們慢慢地來看看這幾個框架的實現。

    今天我們就先一起來看一下xfire的實現,接下來的幾天我們會慢慢一起來學習另外的框架。

    1)首先,當然是要下包啦,這個普通人都知道。http://xfire.codehaus.org/Download可以到這里去下,可以下all也可以下distribution。但建議還是下all的,免得一堆奇怪的問題搞得你一點信心都沒了。

    包弄下來了那么怎么辦呢?放進項目里啊。貌似廢話,但很多人就是不知道下下來要干什么用。

    建一個新項目,比較我的是xfireWebservice,這里當然是建web項目啦。



    我這里是把它所有的包都放到這里面了,畢竟我們寫例子,就沒必要挑三揀四了,隨便點吧,如果想看看異常信息的朋友可以不把全部放進去,慢慢地加入,以后遇到錯誤也好排除,但我們這里就不那么做了,畢竟一般缺少什么類那些的異常沒什么難看的,大家可以自己排除。

    2)我們首先來了解一下xfire與其他webservice框架的不同,它最大的不同之處在于它需要一個接口,而且如果需要用xfire來調用相應的webservice必須知道接口的定義,感覺這里有點限制了。但除了這點,xfire調用webservice,那是相當的方便,就跟調用本地方法一樣。我們直接來看例子:

    首先是最重要的接口:

    Java代碼  收藏代碼
    1. public interface IReaderService {  
    2.     public Reader getReader(String name,String password);  
    3.     public List<Reader> getReaders();  
    4. }  

    有接口,當然也要有實現類,不然接口就沒什么意義了。

    Java代碼  收藏代碼
    1. public class ReaderService implements IReaderService{  
    2.     public Reader getReader(String name,String password) {  
    3.         return new Reader(name,password);  
    4.     }  
    5.       
    6.     public List<Reader> getReaders(){  
    7.         List<Reader> readerList = new ArrayList<Reader>();  
    8.         readerList.add(new Reader("shun1","123"));  
    9.         readerList.add(new Reader("shun2","123"));  
    10.         return readerList;  
    11.     }  
    12. }  

    也看一下JAVABEAN,Reader類:

    Java代碼  收藏代碼
    1. public class Reader{  
    2.     private static final long serialVersionUID = 1L;  
    3.     private String name;  
    4.     private String password;  
    5.       
    6.     public Reader(){}  
    7.     public Reader(String name,String password) {  
    8.         this.name = name;  
    9.         this.password = password;  
    10.     }  
    11.         //Get/Set方法省略  
    12.     public String toString(){  
    13.         return "Name:"+name+",Password:"+password;  
    14.     }  
    15.       
    16. }  

    注意,我們這里的Reader類實現了Serializable接口,為什么呢?這里,首先我們需要了解webservice的原理,對于JAVA來講,如果我們需要在互聯網上傳對象,很多人當然會想到序列化,對了,這里就是序列化,因為我們需要把reader作為參數來傳遞。這在以前的版本中是需要強制實現,否則會報錯,但現在的最新的版本(其實最新的也是07年的,因為xfire已經停止開發,被apache合并為CXF項目,這個我們之后再講)已經不需要了,至于是用什么方式實現的,我們這里暫時不深究,因為它已經被合并到CXF中,我們如果要深入學習,應該學習CXF較好。

    3)當我們完成上面的接口和JAVABEAN的編寫后,很多人會問,我看很多webservice都會有WSDL文件,那你這個怎么來的?在講這個之前,我們來討論一下什么是WSDL。也許很多公司提供的接口都還是只是一個HTTP地址,返回XML這樣的格式,我們的也是。這有一個好處,也有一個壞處。好處是我們開發的難度小了,而壞處是我們需要提供給用戶一堆說明文件,每個返回的XML標簽是什么意思,這倒也沒啥,但就是比較煩而已。而webservice呢,壞處就是我們開發的東西稍微多了點,而好處是我們不用再寫那么多說明文件,因為有一個統一的說明,叫WSDL,這個是webservice的說明文檔,是統一的,無論什么語言都一樣,所以不存在誰看不懂的問題。

    而這里,當我們部署完成xfire后,它就可以幫我們生成WSDL文件。

    問題是怎么部署,這個其實也簡單。我們在src目錄下新建一個文件夾META-INF,再建它的一個字文件夾xfire,里面建立文件services.xml。之后的結構如下:


    有人會問為什么要建到src目錄下,其實不是規定建到這里的,但因為我們需要讓開發工具幫我們自己部署這幾個文件,所以我們放到這里,eclipse就可以幫我們自己部署到tomcat或者其他的容器中。注意,這個文件所在文件夾層次是固定的,不可以修改。

    我們直接看一下servics.xml:

    Xml代碼  收藏代碼
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
    3.     <service>  
    4.         <!-- webserviceq名稱,調用時需要指定這個 -->  
    5.         <name>readerService</name>  
    6.         <!-- 這個一般是自己公司的網址,意義不大 -->  
    7.         <namespace>http://test/HelloService</namespace>  
    8.         <!-- 接口類 -->  
    9.         <serviceClass>com.xfire.servlet.IReaderService</serviceClass>  
    10.         <!-- 實現類 -->  
    11.         <implementationClass>com.xfire.servlet.ReaderService</implementationClass>  
    12.     </service>  
    13. </beans>  



    看著注釋一般都沒問題的。

    4)很多人以為這樣就行了,不,還沒行,你指定了這個,那別人怎么訪問呢。怎么把相應的請求轉發到xfire那里,讓它進行處理呢。這里又需要修改web.xml了。
    修改后如下:

    Xml代碼  收藏代碼
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
    4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
    5.     id="WebApp_ID" version="3.0">  
    6.     <servlet>  
    7.         <servlet-name>XFireServlet</servlet-name>  
    8.         <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
    9.     </servlet>  
    10.   
    11.     <servlet-mapping>  
    12.         <servlet-name>XFireServlet</servlet-name>  
    13.         <url-pattern>/services/*</url-pattern>  
    14.     </servlet-mapping>  
    15. </web-app>  

    其實也就是添加了一個servlet和對應的mapping。接下來,我們在瀏覽器上直接輸入:
    http://localhost:8080/xfireWebService/services/readerService?wsdl

    我們可以看到:




    這里顯示的就是wsdl,它會顯示我們定義的方法,返回的類型,這個文件我們這里就不分析了,http://webservices.group.iteye.com/group/topic/11467這位朋友在這里寫得很清楚,想了解的朋友可以到這里看看。

    5)上面四步完成后,我們就完成了webservice的部署了。別人就可以調用相應的webservice來訪問我們的方法了。下面我們就用xfire提供的client來訪問一下我們剛才發布的webservice:

    Java代碼  收藏代碼
    1. public class ReaderClient {  
    2.     public static void main(String[] args) {  
    3.         //這里是創建一個service,需要傳入一個接口類,因為我們后面必須調用相應的接口方法  
    4.         Service srcModel = new ObjectServiceFactory().create(IReaderService.class);  
    5.         //代理工廠,這里是為了后面創建相應的接口類  
    6.         XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());  
    7.         //webservice地址,不需要加wsdl  
    8.         String readerServiceUrl = "http://localhost:8080/xfireWebService/services/readerService";  
    9.           
    10.         try {  
    11.             //利用工廠返回相應的接口類  
    12.             IReaderService readerService = (IReaderService)factory.create(srcModel,readerServiceUrl);  
    13.   
    14.             Reader reader = readerService.getReader("shun","123");  
    15.             System.out.println(reader);  
    16.         } catch (MalformedURLException e) {  
    17.             e.printStackTrace();  
    18.         }  
    19.     }  
    20. }  

    這樣,我們看到輸出結果為:


    很簡單的調用,當我們取得接口后,一切就跟本地一樣了。xfire發布和調用webservice相對其他框架來說是簡單很多的。接下來幾天,我們會繼續學習另外的幾個框架,CXF,axis2和jersey,axis2我們放到最后再講,因為相對其他來說,它的靈活性比較差,而且比較麻煩。


    另外問個小問題,有沒有朋友知道怎么修改博客字體大小,我修改完成后保存,它只會在代碼段那里加上<span>標簽,但字體沒有改變,其他的也是一樣,有知道的朋友麻煩跟我說下。

    posted on 2014-07-06 14:33 HUIKK 閱讀(249) 評論(0)  編輯  收藏 所屬分類: webservice
    主站蜘蛛池模板: 国产人在线成免费视频| 亚洲天堂一区二区三区| 亚洲国产婷婷六月丁香| 亚洲国产夜色在线观看| 男女猛烈无遮掩视频免费软件 | 亚洲日韩精品射精日| 亚洲欧洲久久精品| 亚洲三级在线免费观看| 国产性爱在线观看亚洲黄色一级片 | 亚洲GV天堂无码男同在线观看| 国产在线观看无码免费视频| 欧美最猛性xxxxx免费| 亚洲国产精品嫩草影院在线观看| 亚洲AV成人片无码网站| 五月亭亭免费高清在线| 亚洲日本国产精华液| 成年免费大片黄在线观看岛国| 亚洲成a人片在线观看无码 | 日韩一级免费视频| 亚洲另类古典武侠| 成人免费777777| 亚洲人成影院77777| 成人免费无码大片A毛片抽搐色欲| 日产亚洲一区二区三区| 高清永久免费观看| 亚洲gv白嫩小受在线观看| 国产精品成人免费观看| 国产一精品一aⅴ一免费| 77777亚洲午夜久久多喷| 777成影片免费观看| 亚洲AV无码一区东京热久久| 91在线手机精品免费观看| 亚洲人成77777在线观看网| 69堂人成无码免费视频果冻传媒| 亚洲资源在线观看| 国产卡一卡二卡三免费入口| 精品女同一区二区三区免费播放 | 亚洲成人在线免费观看| 亚洲高清美女一区二区三区| 久9久9精品免费观看| 亚洲国产一区二区三区青草影视|