WebDAV(Web-based Distributed Authoring and Versioning)是基於HTTP 1.1 的一個通信協議。它為HTTP 1.1 添加了一些擴展(就是在GET、POST、HEAD 等幾個HTTP 標准方法以外添加了一些新的方法),使得應用程序可以直接將文件寫到Web Server 上,並且在寫文件時候可以對文件加鎖,寫完後對文件解鎖,還可以支持對文件所做的版本控制。這個協議的出現極大地增加了Web 作為一種創作媒體對於我們的價值。基於WebDAV 可以實現一個功能強大的內容管理系統或者配置管理系統。
我這裡不想詳細介紹WebDAV 的協議,感興趣的可以在這裡找到相關的資料:
http://www.webdav.org
其中首先應該看的是這份WebDAV FAQ:
http://www.webdav.org/other/faq.html
WebDAV 本身是一個類似於HTTP 的通信協議(IETF RFC 2518)。它與HTTP 類似,需要實現服務器和客戶端兩部分軟件。目前WebDAV 已經有了大量相關的軟件實現。
在這裡是一些與WebDAV 相關的軟件項目:
http://www.webdav.org/projects/
在 這些項目中,我們最感興趣的當然是那些用Java 實現的開源項目,Slide 是其中最重要的一個項目。Slide 是Jakarta 項目的一個子項目(又是Apache 山頭的),提供了一套WebDAV 的服務器端和客戶端的開發庫和API,目前已經出到了2.0 版。
http://jakarta.apache.org/slide/
在這裡下載最新的Slide 2.0 的Binary 包。
http://jakarta.apache.org/site/binindex.cgi
Slide 分成服務器端和客戶端兩部分:
服務器端:
http://apache.linuxforum.net/dist/jakarta/slide/binaries/jakarta-slide-server-bin-2.0.zip
客戶端:
http://apache.linuxforum.net/dist/jakarta/slide/binaries/jakarta-slide-webdavclient-bin-2.0.zip
我先講講服務器端如何配置:
解壓縮,假設在D:\tmp\jakarta-slide-server-2.0 下,你會在
D:\tmp\jakarta-slide-server-2.0\slide\webapp\
下找到兩個war 文件:
slide.war:Slide 服務器端配置,用Servlet 實現。
slide-doc.war:Slide 文檔。
把這兩個war 文件copy 到你的Web Container(Tomcat、Jetty、Resin、etc.) 的部署目錄(一般是webapps 目錄)下,然後重新啟動Web Container。
在我現在寫的這個文檔中服務器端的配置就是這麼簡單。
再講講在客戶端如何配置。
WebDAV 有非常多的客戶端,用Slide 客戶端的庫可以非常容易地寫出一個WebDAV 客戶端程序。感興趣的可以看看這篇文檔:
http://www.onjava.com/lpt/a/4387
我主要講講如何用Windows 2000/XP 自帶的Web Folder 功能來訪問Web 文件夾。
Windows 2000/XP 安裝後已經具備訪問基於WebDAV 協議的Web 文件夾的功能,而且可以把Web 文件夾映射為一個本地文件夾,支持拖放、拷貝/粘貼等等功能,使用起來非常方便。
在Windows 2000/XP 中添加Web 文件夾的方法是:
打開“網上鄰居”,添加網上鄰居,在“請鍵入網上鄰居的位置”中輸入Web 文件夾的URL,例如我剛才用Slide 配置好的WebDAV 服務器在:
http://localhost:8000/slide/
然後按照向導的提示繼續做就可以了,非常的簡單。
配置好了以後你就可以把這個Web 文件夾當作本地文件夾一樣使用了。拖幾個文件進去試試吧。關於上述Web Folder 的配置可以參考這些文檔:
http://chapters.marssociety.org/webdav/
(幾個閒著沒事孜孜不倦地研究人類如何移民火星的酷哥寫的文檔)
還有M$ 網站上的相關文檔:
http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/using_webfolders_for_file_transfer.asp
M$ 的很多產品都內置有WebDAV 的支持。例如:Office 2000、IE 5/6、Exchange Server、Frontpage。我配置好WebDAV 服務器後,當我訪問這個URL
http://localhost:8000/slide/files/23.doc
時,Word 2000 可以識別出Web 服務器支持WebDAV 協議。於是Word 2000 可以直接編輯服務器上的這個文檔,編輯完後可以直接保存在Web 服務器上。這個是不是比你習慣的download->modify->upload 要方便的多?
WebDAV 還有很多話題,比如WebDAV 完全可以取代FTP。WebDAV 至少在以下幾個方面對FTP 具有壓倒性優勢:
1、FTP 需要申請操作系統帳號。WebDAV 不需要申請任何操作系統帳號,它使用一套自己定義的安全完善的身份驗證機制。
2、FTP 的所有數據(包括登錄信息)全部使用明文傳送,加密必須要自己來實現,例如:可以手工用GPG 來做這件事,但是畢竟還是不方便。用WebDAV 就可以使用HTTPS 來傳輸數據,加密解密的操作完全是在低層自動完成的。
3、FTP 傳輸數據的傳輸效率比較低,每傳送一個文件需要打開一個新的TCP 連接,而WebDAV 傳輸所有文件只需要一個TCP 連接。
4、FTP 不象HTTP 那樣容易穿越防火牆,在廣域網的應用范圍比HTTP 要小的多。而WebDAV 因為是基於HTTP 的,所以具有HTTP 的所有優點。
5、FTP 客戶端工具沒有 WebDAV 客戶端工具使用方便。你剛才已經看到WebDAV 服務器配置好後,通過Windows 2000/XP 的Web Folder 方式訪問Web 文件夾就和訪問本地文件夾沒有多少區別。如果應用程序支持WebDAV 協議(例如Word 2000),就可以直接打開Web 文件夾中的文件並且編輯,然後直接保存在原先的Web 文件夾中。這個用起來簡直就和Samba 完全一樣。你知道哪一個FTP 客戶端使用起來有這麼方便嗎?
除了網上鄰居以外,在IE 中也可以直接打開Web 文件夾。運行IE,“文件->打開”,選中“以Web 文件夾方式打開”。然後輸入
http://localhost:8000/slide/
這樣IE 就直接打開了這個Web 文件夾,你可以隨便拖幾個文件進去試試。如果是Word 文件可以直接用Word 打開並編輯,然後可以直接保存在Web Server 上。這和上面在網上鄰居中打開的效果是完全一樣的。
你可以寫JS 來直接打開Web 文件夾中的文件,例如:
<script language="javascript">
<!--
var word = new ActiveXObject("Word.Application");
word.Visible = true;
word.Documents.Open("http://localhost:8000/slide/files/23.doc");
//word.Quit();
-->
</script>
這裡只是打開Word 文件的例子,你當然還可以寫出打開其它類型文件的例子。前提是這類文件的應用程序支持WebDAV 協議並且提供了相應的控件可以被JS 調用。
Word 打開這個文件後可以直接編輯,然後可以直接保存在Web Server 上面,省去了你download->modify->upload 的步驟,用起來是不是更方便?
缺省情況下,WebDAV 服務器在客戶端第一次打開一個文件時會為這個文件加一個排他的寫鎖,以後所有客戶端打開這個文件都是只讀的。只有在第一個客戶端保存文件後才會釋放這個鎖,然後其他客戶端才能修改這個文件。
Slide 可以把文件保存在文件系統中,也可以把文件保存在數據庫中。Slide 提供了API 使你可以寫plugin 將文件保存在其它類型的存儲系統中。
Slide 使用基於角色的權限控制,角色的權限可以繼承。這些內容聊起來就多了,感興趣的可以看Slide 的配置文檔。文檔中還有與版本控制有關的內容。
摘自 囧南風囧的博客