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項目提供了許多偉大的開源項目。其中一個很有名的子項目就是slide,slide由很
多不同的模塊組成,他們用webdav協(xié)議來連接。這些模塊實現(xiàn)了大量有用的特性,比如webdav客戶端庫
,webdav服務(wù)段庫,和一個基于webdav的cms.別的不說,首先這些模塊將給開發(fā)者提供可以訪問webdav
的客戶端。
? 這篇文章將介紹如何在java應(yīng)用中用slide客戶端庫來訪問 webdav服務(wù)。文章將首先介紹webdav的協(xié)
議,接著介紹slide項目,最后,我們將著手來寫幾個用slide客戶端的例子。
WebDAV
WebDAV 代表了“Web-based Distributed Authoring and Versioning”。webdav是一套http協(xié)議的擴(kuò)展
--允許用戶來協(xié)作編輯和管理在遠(yuǎn)程服務(wù)器上的文件。因為這個協(xié)議擴(kuò)展本身很簡單而且很容易使用,
所以他的能量是很強(qiáng)大的。效果上,webdav使http 服務(wù)器增強(qiáng)為一個文件系統(tǒng)。大家知道類似ftp的協(xié)
議提供類似的協(xié)議很多年了,webdav's的特性比這些ftp協(xié)議更好,而且因此允許開發(fā)者使用webdav來創(chuàng)
建更強(qiáng)大的系統(tǒng)。
?因為不同的webdav服務(wù)器實現(xiàn)提供不同層次上的協(xié)議支持,下列的特性是最基本的而且可以使webdav區(qū)
別于ftp
?http-base:允許http的所有優(yōu)點。(文件權(quán)限,快速轉(zhuǎn)換,https支持,等等)
?put:可以上傳資源到服務(wù)器
?lock:可以設(shè)置/取消 連接依賴,long-duration exclusive 和共享鎖。
?Porperties:可以存儲資源的任意元數(shù)據(jù)。
?Namespace manipulations:可以移動文件,拷貝文件,創(chuàng)建目錄和列表目錄。
這些特性允許開發(fā)所有不同類別的有趣應(yīng)用,包括分布web-page authoring/editing 應(yīng)用,版本控制應(yīng)
用,郵件服務(wù)器,和分布式日歷應(yīng)用,還有很多。當(dāng)開發(fā)者把webdav和“一次編寫,到處運行”的java
聯(lián)合時,編寫多處理平臺的分布客戶端應(yīng)用變得十分簡單了。
WebDAV Tools and Resources
? 和http一樣,webdav需要服務(wù)段和客戶端組件。除了slide項目之外--既提供了服務(wù)段又提供了客戶端
,還有許多可用的 webdav 組件:
?1,apache的模塊mod_dav(已經(jīng)在apache2中包括了)
?2,microsoft的iis包含了webdav服務(wù)支持。
?3,mas os x允許mount一個webdav服務(wù)器作為一個網(wǎng)絡(luò)磁盤。
? ?4,Apple's提供的iDisk.
更多的信息可以查看www.webdav.org
The Slide Project
?如前所述,slide項目的首頁描述它為“a project composed of multiple modules tied together
using WebDAV”。這些多模塊包括:
?1,一個CMS和她的Java API
?2,一個在cms之上用servlet實現(xiàn)的webdav協(xié)議。
?3,一個java版的webdav和http客戶端庫
?4,一個webdav命令行客戶端
?5,一個訪問webdav的swing組件(還沒實現(xiàn))
和其他的jakarta項目一樣,slide提供了源文件和二進(jìn)制文件。用戶可以自己去下載。
如果已經(jīng)下載并解壓了他的安裝文件,打開client/lib。這個目錄包含了在本文例子中需要用到的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ù)器。訪問一個WebDAV 服務(wù)器涉及到下面的3個基
本的步驟:
?1,打開一個到WebDAV服務(wù)器的連接
?2,發(fā)布協(xié)議請求并接受來自服務(wù)器的應(yīng)答
?3,關(guān)閉連接。
打開WebDAV 服務(wù)器的連接可以通過WebdavResource的構(gòu)造函數(shù)。有許多途徑來處理;最直接的就是給構(gòu)
造函數(shù)傳遞一個org.apache.util.HttpURL 對象--包含服務(wù)器的url和用戶信息。
連接一旦建立,我們就可以發(fā)布我們的請求。這些協(xié)議請求被WebdavResource的很多函數(shù)處理。特別如
:
?1,aclfindMethod:用來查找access control lists;很多webdav服務(wù)器沒有實現(xiàn)。
?2,aclMethod:用來設(shè)置acl,很多webdav服務(wù)器沒有實現(xiàn)。
?3,copyMethod:復(fù)制一個資源從服務(wù)器上的一個位置到另一個位置
?4,deleteMethod 刪除服務(wù)器上的一個資源。
?5,getMethod:獲得一個服務(wù)器上的一個資源(和http的get方法一樣)
?6,headMethod獲得服務(wù)器資源的頭文件(和http的head的命令一樣)
?7,list:列出服務(wù)器當(dāng)前目錄下的資源
?8,lockMethod:鎖定服務(wù)器上的一個資源
?9,mkcolMethod:在服務(wù)器上創(chuàng)建一個集合
?10,moveMethod:在服務(wù)器上移動資源
?11,optionsMethod:返回服務(wù)器支持的選項。(getDavCapabilities方法和
getAllowedMethods方法也提供這種功能)
??12,postMethod:獲得服務(wù)器上的資源,通過http post(和http post命令一樣)
?13,propFindMethod:返回一個資源的屬性。
?14,propPatchMethod:設(shè)置或者獲得一個資源的屬性。
?15,putMethod:上傳一個資源到服務(wù)器(類似ftp的put命令)
?16,setPath:設(shè)置服務(wù)期上的當(dāng)前目錄
?17,unlockMethod解鎖服務(wù)器的資源
注意:有些slide的文檔很弱。這片文章將會覆蓋這里的部分方法,我們不會每個都涉及到。很多我們沒
有涉及到的方法都沒有好的文檔。
WebdavResource 有很多其他的方法,提供了眾多的功能;更多細(xì)節(jié),請察看官方文檔。
?一旦,你已經(jīng)發(fā)布了協(xié)議請求,你需要關(guān)閉webdav的連接。這個用WebdavResource 的close()方法來做
。
A Simple Example
一個簡單slide webdav例子,做了如下工作:
?打開連接,獲得文件,關(guān)閉連接。
?當(dāng)然,這個例子很簡單,這個例子會用到j(luò)ava.net包。
代碼如下:

















































你或許猜到了,真正的工作都在try-catch塊中完成。最開始的2行建立了一個HttpURL 對象--飽含了連
接信息。然后我們通過HttpURL 創(chuàng)建了WebdavResource 。接著,我們創(chuàng)建了一個File對象來代表我們將
要下在的文件。 getMethod方法獲得了這個文件,close方法關(guān)閉了連接。(注意,這里僅僅是一個例子
,你需要做更為謹(jǐn)慎的異常處理)
你看到了,我們用WebdavResource 很直接的處理不同端口的協(xié)議。把這個例子改造為上傳文件很直接,
我們只需要改變少許幾行,如下:
File fn = new File("local-file");
wdr.putMethod(fn);
?當(dāng)然,這里還可以對文件重新命名。
這個例子很簡單,但是演示了怎樣來使用WebdavResource 來訪問webdav服務(wù)器。在下一部分,我們將發(fā)
掘更多復(fù)雜的例子來演示如何用webdav來鎖定和解鎖文件。
More Complex Examples
可能有這樣的場景,我們有一個web站點,這個站點被2個彼此分開的團(tuán)隊來維護(hù)。每個團(tuán)隊都有責(zé)任來
編輯html資源,但是站點管理員希望回避沖突。換句話說,我們都能上傳,下在,鎖定和解鎖文件。我
們都想鎖定文件來工作。
?來完成這一進(jìn)程,我們需要如下的處理:
?1,打開連接。
?2,列出文件
?3,鎖定文件
?4,下在文件
?5,上傳文件
?6,解鎖文件
?7,關(guān)閉連接
我們已經(jīng)知道如何來打開連接,關(guān)閉連接,上傳文件和下載文件。所以我們需要做的就是來處理鎖定/解
鎖文件和列出文件。我們假設(shè)已經(jīng)有WebdavResource 對象和當(dāng)前路徑了。
首先,我們想要鎖定文件。我們用lockMethod來實現(xiàn),其他的代碼用作錯誤處理。你將注意到我們設(shè)置
了WebdavResource的路徑給文件--我們并沒有非要用get和put方法。這是因為某些方法,包括
isCollection,getPath和setPath僅僅支持文件的當(dāng)前目錄。其他的方法,比如getMethod (不時
getMethodData 和getMethodDataAsString)并不支持這些接口。恩,有點亂。。
下面是鎖定文件的代碼:





























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








?最終觀點
Jakarta's Slide項目是連接webdav客戶端功能和java應(yīng)用的紐帶。這個庫是開源的,很容易使用,也很
容易集成到所有的系統(tǒng)中。盡管slide遺留了一些需要繼續(xù)解決的問題,但是,他是實現(xiàn)webdav客戶端最
成功的方案。
[譯者按]:原文下面有很多精彩的q&a.也值得一看。
posted on 2007-01-03 20:49 binge 閱讀(2428) 評論(0) 編輯 收藏 所屬分類: J2EE 、OPEN SOURCE