上一篇帖子“WebDav的java客戶端開發包:sardine”中說到,對於開發WebDav客戶端
sardine是一個很好的選擇,但sardine並未實現WevDav的全部規范,所以我又試了試
apache的Jackrabbit,這個是已退休的slide的替代品。
Jackrabbit中的WevDav客戶端只是一個附帶的模塊,並不是Jackrabbit的主要功能,
所以關於開發的文檔很少,我只找到一篇:
http://wiki.apache.org/jackrabbit/WebDAV
我是下載的jackrabbit-standalone-2.0.3.jar包,其中應該大部分類都用不到,不過
我沒找到單獨的WebDav客戶端的包。
演示程序的主要處理就是創建了一個目錄,然后上載了jpg文件,最后列出了創建目錄
中的內容。其中創建目錄要用MkCol命令,上載用Put命令,列出目錄內容其實是列出
指定路徑下的所有屬性。我沒有仔細研究過WebDav的規范,估計jackrabbit是按照規范
實現的,需要理解WebDav的規范才能很好地使用,sardine則要接近對WebDav的一般性
理解,不需要理解相應的規范就可以快速地開始使用。
下面就是我的演示程序代碼:
- package test;
- import java.io.FileInputStream;
- import java.io.IOException;
- import org.apache.commons.httpclient.Credentials;
- import org.apache.commons.httpclient.HttpClient;
- import org.apache.commons.httpclient.UsernamePasswordCredentials;
- import org.apache.commons.httpclient.auth.AuthScope;
- import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
- import org.apache.commons.httpclient.methods.RequestEntity;
- import org.apache.jackrabbit.webdav.DavConstants;
- import org.apache.jackrabbit.webdav.DavException;
- import org.apache.jackrabbit.webdav.MultiStatus;
- import org.apache.jackrabbit.webdav.MultiStatusResponse;
- import org.apache.jackrabbit.webdav.client.methods.DavMethod;
- import org.apache.jackrabbit.webdav.client.methods.MkColMethod;
- import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
- import org.apache.jackrabbit.webdav.client.methods.PutMethod;
- public class TestJackrabbit {
- public static void main(String[] args) throws IOException, DavException {
- HttpClient client = new HttpClient();
- Credentials creds = new UsernamePasswordCredentials("admin", "admin");
- client.getState().setCredentials(AuthScope.ANY, creds);
- DavMethod mkCol = new MkColMethod("http://192.168.1.71:4502/crx/repository/crx.default/content/dam/testfolder");
- client.executeMethod(mkCol);
- System.out.println("mkcol testfolder:" + mkCol.getStatusCode() + " " + mkCol.getStatusText());
- PutMethod put = new PutMethod("http://192.168.1.71:4502/crx/repository/crx.default/content/dam/testfolder/testimg.jpg");
- RequestEntity requestEntity = new InputStreamRequestEntity(new FileInputStream("img12.jpg"));
- put.setRequestEntity(requestEntity);
- client.executeMethod(put);
- System.out.println("put image file:" + put.getStatusCode() + " " + put.getStatusText());
- DavMethod find = new PropFindMethod("http://192.168.1.71:4502/crx/repository/crx.default/content/dam/testfolder", DavConstants.PROPFIND_ALL_PROP, DavConstants.DEPTH_1);
- client.executeMethod(find);
- MultiStatus multiStatus = find.getResponseBodyAsMultiStatus();
- MultiStatusResponse[] responses = multiStatus.getResponses();
- System.out.println("Folders and files:");
- for (int i=0; i<responses.length; i++) {
- System.out.println(responses[i].getHref());
- }
- }
- }