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

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

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

    拾貝殼

    走過的路
    隨筆 - 39, 文章 - 1, 評(píng)論 - 14, 引用 - 0
    數(shù)據(jù)加載中……

    Sliding into WebDAV

    http://www.onjava.com/pub/a/onjava/2003/12/23/slide.html

    翻譯自:O'REILLY
    sliding into webdav
    by andrew anderson

    apache下面的jakarta項(xiàng)目提供了許多偉大的開源項(xiàng)目。其中一個(gè)很有名的子項(xiàng)目就是slide,slide由很

    多不同的模塊組成,他們用webdav協(xié)議來連接。這些模塊實(shí)現(xiàn)了大量有用的特性,比如webdav客戶端庫

    ,webdav服務(wù)段庫,和一個(gè)基于webdav的cms.別的不說,首先這些模塊將給開發(fā)者提供可以訪問webdav

    的客戶端。
    ? 這篇文章將介紹如何在java應(yīng)用中用slide客戶端庫來訪問 webdav服務(wù)。文章將首先介紹webdav的協(xié)

    議,接著介紹slide項(xiàng)目,最后,我們將著手來寫幾個(gè)用slide客戶端的例子。

    WebDAV
    WebDAV 代表了“Web-based Distributed Authoring and Versioning”。webdav是一套http協(xié)議的擴(kuò)展

    --允許用戶來協(xié)作編輯和管理在遠(yuǎn)程服務(wù)器上的文件。因?yàn)檫@個(gè)協(xié)議擴(kuò)展本身很簡(jiǎn)單而且很容易使用,

    所以他的能量是很強(qiáng)大的。效果上,webdav使http 服務(wù)器增強(qiáng)為一個(gè)文件系統(tǒng)。大家知道類似ftp的協(xié)

    議提供類似的協(xié)議很多年了,webdav's的特性比這些ftp協(xié)議更好,而且因此允許開發(fā)者使用webdav來創(chuàng)

    建更強(qiáng)大的系統(tǒng)。

    ?因?yàn)椴煌膚ebdav服務(wù)器實(shí)現(xiàn)提供不同層次上的協(xié)議支持,下列的特性是最基本的而且可以使webdav區(qū)

    別于ftp
    ?http-base:允許http的所有優(yōu)點(diǎn)。(文件權(quán)限,快速轉(zhuǎn)換,https支持,等等)
    ?put:可以上傳資源到服務(wù)器
    ?lock:可以設(shè)置/取消 連接依賴,long-duration exclusive 和共享鎖。
    ?Porperties:可以存儲(chǔ)資源的任意元數(shù)據(jù)。
    ?Namespace manipulations:可以移動(dòng)文件,拷貝文件,創(chuàng)建目錄和列表目錄。
    這些特性允許開發(fā)所有不同類別的有趣應(yīng)用,包括分布web-page authoring/editing 應(yīng)用,版本控制應(yīng)

    用,郵件服務(wù)器,和分布式日歷應(yīng)用,還有很多。當(dāng)開發(fā)者把webdav和“一次編寫,到處運(yùn)行”的java

    聯(lián)合時(shí),編寫多處理平臺(tái)的分布客戶端應(yīng)用變得十分簡(jiǎn)單了。
    WebDAV Tools and Resources
    ? 和http一樣,webdav需要服務(wù)段和客戶端組件。除了slide項(xiàng)目之外--既提供了服務(wù)段又提供了客戶端

    ,還有許多可用的 webdav 組件:
    ?1,apache的模塊mod_dav(已經(jīng)在apache2中包括了)
    ?2,microsoft的iis包含了webdav服務(wù)支持。
    ?3,mas os x允許mount一個(gè)webdav服務(wù)器作為一個(gè)網(wǎng)絡(luò)磁盤。
    ? ?4,Apple's提供的iDisk.
    更多的信息可以查看www.webdav.org
    The Slide Project
    ?如前所述,slide項(xiàng)目的首頁描述它為“a project composed of multiple modules tied together

    using WebDAV”。這些多模塊包括:
    ?1,一個(gè)CMS和她的Java API
    ?2,一個(gè)在cms之上用servlet實(shí)現(xiàn)的webdav協(xié)議。
    ?3,一個(gè)java版的webdav和http客戶端庫
    ?4,一個(gè)webdav命令行客戶端
    ?5,一個(gè)訪問webdav的swing組件(還沒實(shí)現(xiàn))
    和其他的jakarta項(xiàng)目一樣,slide提供了源文件和二進(jìn)制文件。用戶可以自己去下載。
    如果已經(jīng)下載并解壓了他的安裝文件,打開client/lib。這個(gè)目錄包含了在本文例子中需要用到的jar文

    件,包含了slide webdav的客戶端庫和許多額外包。doc/clientjavadoc下面有它的相關(guān)文檔。
    Using Slide
    現(xiàn)在,我們來關(guān)注業(yè)務(wù):應(yīng)用SLIDE WEBDAV客戶端庫來連接webdav服務(wù)器。slide客戶端封裝了所有的功

    能。我們需要通過WebdavResource 來訪問WebDAV 服務(wù)器。訪問一個(gè)WebDAV 服務(wù)器涉及到下面的3個(gè)基

    本的步驟:
    ?1,打開一個(gè)到WebDAV服務(wù)器的連接
    ?2,發(fā)布協(xié)議請(qǐng)求并接受來自服務(wù)器的應(yīng)答
    ?3,關(guān)閉連接。
    打開WebDAV 服務(wù)器的連接可以通過WebdavResource的構(gòu)造函數(shù)。有許多途徑來處理;最直接的就是給構(gòu)

    造函數(shù)傳遞一個(gè)org.apache.util.HttpURL 對(duì)象--包含服務(wù)器的url和用戶信息。
    連接一旦建立,我們就可以發(fā)布我們的請(qǐng)求。這些協(xié)議請(qǐng)求被WebdavResource的很多函數(shù)處理。特別如


    ?1,aclfindMethod:用來查找access control lists;很多webdav服務(wù)器沒有實(shí)現(xiàn)。
    ?2,aclMethod:用來設(shè)置acl,很多webdav服務(wù)器沒有實(shí)現(xiàn)。
    ?3,copyMethod:復(fù)制一個(gè)資源從服務(wù)器上的一個(gè)位置到另一個(gè)位置
    ?4,deleteMethod 刪除服務(wù)器上的一個(gè)資源。
    ?5,getMethod:獲得一個(gè)服務(wù)器上的一個(gè)資源(和http的get方法一樣)
    ?6,headMethod獲得服務(wù)器資源的頭文件(和http的head的命令一樣)
    ?7,list:列出服務(wù)器當(dāng)前目錄下的資源
    ?8,lockMethod:鎖定服務(wù)器上的一個(gè)資源
    ?9,mkcolMethod:在服務(wù)器上創(chuàng)建一個(gè)集合
    ?10,moveMethod:在服務(wù)器上移動(dòng)資源
    ?11,optionsMethod:返回服務(wù)器支持的選項(xiàng)。(getDavCapabilities方法和

    getAllowedMethods方法也提供這種功能)
    ??12,postMethod:獲得服務(wù)器上的資源,通過http post(和http post命令一樣)
    ?13,propFindMethod:返回一個(gè)資源的屬性。
    ?14,propPatchMethod:設(shè)置或者獲得一個(gè)資源的屬性。
    ?15,putMethod:上傳一個(gè)資源到服務(wù)器(類似ftp的put命令)
    ?16,setPath:設(shè)置服務(wù)期上的當(dāng)前目錄
    ?17,unlockMethod解鎖服務(wù)器的資源
    注意:有些slide的文檔很弱。這片文章將會(huì)覆蓋這里的部分方法,我們不會(huì)每個(gè)都涉及到。很多我們沒

    有涉及到的方法都沒有好的文檔。
    WebdavResource 有很多其他的方法,提供了眾多的功能;更多細(xì)節(jié),請(qǐng)察看官方文檔。
    ?一旦,你已經(jīng)發(fā)布了協(xié)議請(qǐng)求,你需要關(guān)閉webdav的連接。這個(gè)用WebdavResource 的close()方法來做


    A Simple Example
    一個(gè)簡(jiǎn)單slide webdav例子,做了如下工作:
    ?打開連接,獲得文件,關(guān)閉連接。
    ?當(dāng)然,這個(gè)例子很簡(jiǎn)單,這個(gè)例子會(huì)用到j(luò)ava.net包。
    代碼如下:

    // ?Slide?Simple?WebDAV?client?example
    import ?java.io.File;
    import ?java.io.IOException;
    import ?java.net.MalformedURLException;

    import ?org.apache.commons.httpclient.HttpException;
    import ?org.apache.util.HttpURL;
    import ?org.apache.webdav.lib.WebdavResource;

    public ? class ?SlideTest? {

    ????
    public ? static ? void ?main?(String?args[])?
    ????
    {
    ????????
    try
    ????????
    {
    ????????????HttpURL?hrl?
    =
    ????????????????
    new ?HttpURL( " http://webdav-server " );
    ????????????hrl.setUserInfo(
    " user " , " pass " );
    ????????????WebdavResource?wdr?
    =
    ????????????????
    new ?WebdavResource(hrl);
    ????????????File?fn?
    = ? new ?File( " remote-file " );
    ????????????wdr.getMethod(fn);
    ????????????wdr.close();
    ????????}

    ????????
    catch (MalformedURLException?mue)
    ????????
    {
    ????????}

    ????????
    catch (HttpException?he)
    ????????
    {
    ????????}

    ????????
    catch (IOException?ioe)
    ????????
    {
    ????????}
    ?
    ????}

    }


    你或許猜到了,真正的工作都在try-catch塊中完成。最開始的2行建立了一個(gè)HttpURL 對(duì)象--飽含了連

    接信息。然后我們通過HttpURL 創(chuàng)建了WebdavResource 。接著,我們創(chuàng)建了一個(gè)File對(duì)象來代表我們將

    要下在的文件。 getMethod方法獲得了這個(gè)文件,close方法關(guān)閉了連接。(注意,這里僅僅是一個(gè)例子

    ,你需要做更為謹(jǐn)慎的異常處理)

    你看到了,我們用WebdavResource 很直接的處理不同端口的協(xié)議。把這個(gè)例子改造為上傳文件很直接,

    我們只需要改變少許幾行,如下:
    File fn = new File("local-file");
    wdr.putMethod(fn);
    ?當(dāng)然,這里還可以對(duì)文件重新命名。
    這個(gè)例子很簡(jiǎn)單,但是演示了怎樣來使用WebdavResource 來訪問webdav服務(wù)器。在下一部分,我們將發(fā)

    掘更多復(fù)雜的例子來演示如何用webdav來鎖定和解鎖文件。
    More Complex Examples

    可能有這樣的場(chǎng)景,我們有一個(gè)web站點(diǎn),這個(gè)站點(diǎn)被2個(gè)彼此分開的團(tuán)隊(duì)來維護(hù)。每個(gè)團(tuán)隊(duì)都有責(zé)任來

    編輯html資源,但是站點(diǎn)管理員希望回避沖突。換句話說,我們都能上傳,下在,鎖定和解鎖文件。我

    們都想鎖定文件來工作。
    ?來完成這一進(jìn)程,我們需要如下的處理:
    ?1,打開連接。
    ?2,列出文件
    ?3,鎖定文件
    ?4,下在文件
    ?5,上傳文件
    ?6,解鎖文件
    ?7,關(guān)閉連接
    我們已經(jīng)知道如何來打開連接,關(guān)閉連接,上傳文件和下載文件。所以我們需要做的就是來處理鎖定/解

    鎖文件和列出文件。我們假設(shè)已經(jīng)有WebdavResource 對(duì)象和當(dāng)前路徑了。
    首先,我們想要鎖定文件。我們用lockMethod來實(shí)現(xiàn),其他的代碼用作錯(cuò)誤處理。你將注意到我們?cè)O(shè)置

    了WebdavResource的路徑給文件--我們并沒有非要用get和put方法。這是因?yàn)槟承┓椒ǎ?/p>

    isCollection,getPath和setPath僅僅支持文件的當(dāng)前目錄。其他的方法,比如getMethod (不時(shí)

    getMethodData 和getMethodDataAsString)并不支持這些接口。恩,有點(diǎn)亂。。
    下面是鎖定文件的代碼:

    public ? boolean ?lockFile(String?filename)
    ????
    throws ?Exception
    {
    ????
    // ?check?to?make?sure?current?path?is?a
    ????
    // ?directory?not?a?file?make?sure?your?initial
    ????
    // ?path?contains?a?trailing?"/"?or?else?it?is
    ????
    // ?considered?a?file!!

    ????
    if ?( ! wdr.isCollection())
    ????????
    throw ? new ?Exception( " Path?is?currently?a?file " );

    ????String?currentPath?
    = ?wdr.getPath();
    ????wdr.setPath(currentPath?
    + ? " / " ? + ?filename);
    ????
    ????
    if ?(wdr.isLocked())
    ????
    {
    ????????
    return ? false ;
    ????}

    ????
    ????
    boolean ?returnVal? = ?wdr.lockMethod();
    ????wdr.setPath(currentPath);
    ????
    return ?returnVal;
    }


    方法unlockFile是一樣的,我們同樣是在WebdavResource對(duì)象上調(diào)用。
    ?列出當(dāng)前目錄下的文件,我們用listFiles方法來處理。注意在這個(gè)例子中,我們對(duì)是否是目錄作了檢

    查。

    public ?String[]?listFiles?()? throws ?Exception
    {
    ????
    if ( ! wdr.isCollection())
    ????????
    throw ? new ?Exception?( " Path?is?currently?a?file " );
    ????
    return ?wdr.list();
    }


    ?最終觀點(diǎn)
    Jakarta's Slide項(xiàng)目是連接webdav客戶端功能和java應(yīng)用的紐帶。這個(gè)庫是開源的,很容易使用,也很

    容易集成到所有的系統(tǒng)中。盡管slide遺留了一些需要繼續(xù)解決的問題,但是,他是實(shí)現(xiàn)webdav客戶端最

    成功的方案。

    [譯者按]:原文下面有很多精彩的q&a.也值得一看。

    posted on 2007-01-03 20:49 binge 閱讀(2420) 評(píng)論(0)  編輯  收藏 所屬分類: J2EEOPEN SOURCE

    主站蜘蛛池模板: 又黄又爽无遮挡免费视频| 久久夜色精品国产噜噜亚洲a| 高清国语自产拍免费视频国产| 久久国产免费观看精品| 国产青草亚洲香蕉精品久久| 亚洲乱码一二三四五六区| 亚洲精品无码成人AAA片| 亚洲AⅤ永久无码精品AA| 久久WWW免费人成人片| 88av免费观看| 久久精品成人免费观看| jizz免费观看| 全黄A免费一级毛片| 激情小说亚洲图片| 亚洲午夜在线播放| 亚洲日韩在线视频| 中文字幕在线观看亚洲| 亚洲第一极品精品无码久久| 国产成人综合亚洲亚洲国产第一页 | 国产猛男猛女超爽免费视频| 国产尤物在线视精品在亚洲| 亚洲精品蜜夜内射| 亚洲无人区码一二三码区别图片| 亚洲人和日本人jizz| 亚洲精品免费在线| 亚洲经典在线观看| 亚洲福利视频网址| 亚洲狠狠狠一区二区三区| 亚洲综合精品一二三区在线| 亚洲人成电影福利在线播放| 久久99国产亚洲精品观看| 水蜜桃亚洲一二三四在线| 亚洲AV无码乱码在线观看裸奔| 亚洲av中文无码乱人伦在线r▽| 国产亚洲福利精品一区| 国产av天堂亚洲国产av天堂 | 免费精品久久久久久中文字幕| 看成年女人免费午夜视频| 无遮挡呻吟娇喘视频免费播放| 免费人成大片在线观看播放电影 | 亚洲欧洲久久久精品|