WebDav的java客户端开发包:Jackrabbit

上一篇帖子“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的一般性
理解,不需要理解相应的规范就可以快速地开始使用。

下面就是我的演示程序代码:

Java代码  收藏代码
    1. package test;  
    2.   
    3. import java.io.FileInputStream;  
    4. import java.io.IOException;  
    5.   
    6. import org.apache.commons.httpclient.Credentials;  
    7. import org.apache.commons.httpclient.HttpClient;  
    8. import org.apache.commons.httpclient.UsernamePasswordCredentials;  
    9. import org.apache.commons.httpclient.auth.AuthScope;  
    10. import org.apache.commons.httpclient.methods.InputStreamRequestEntity;  
    11. import org.apache.commons.httpclient.methods.RequestEntity;  
    12. import org.apache.jackrabbit.webdav.DavConstants;  
    13. import org.apache.jackrabbit.webdav.DavException;  
    14. import org.apache.jackrabbit.webdav.MultiStatus;  
    15. import org.apache.jackrabbit.webdav.MultiStatusResponse;  
    16. import org.apache.jackrabbit.webdav.client.methods.DavMethod;  
    17. import org.apache.jackrabbit.webdav.client.methods.MkColMethod;  
    18. import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;  
    19. import org.apache.jackrabbit.webdav.client.methods.PutMethod;  
    20.   
    21. public class TestJackrabbit {  
    22.     public static void main(String[] args) throws IOException, DavException {  
    23.         HttpClient client = new HttpClient();  
    24.         Credentials creds = new UsernamePasswordCredentials("admin", "admin");  
    25.         client.getState().setCredentials(AuthScope.ANY, creds);  
    26.   
    27.         DavMethod mkCol = new MkColMethod("http://192.168.1.71:4502/crx/repository/crx.default/content/dam/testfolder");  
    28.         client.executeMethod(mkCol);  
    29.         System.out.println("mkcol testfolder:" + mkCol.getStatusCode() + " " + mkCol.getStatusText());  
    30.   
    31.         PutMethod put = new PutMethod("http://192.168.1.71:4502/crx/repository/crx.default/content/dam/testfolder/testimg.jpg");  
    32.         RequestEntity requestEntity = new InputStreamRequestEntity(new FileInputStream("img12.jpg"));  
    33.         put.setRequestEntity(requestEntity);  
    34.         client.executeMethod(put);  
    35.         System.out.println("put image file:" + put.getStatusCode() + " " + put.getStatusText());  
    36.           
    37.         DavMethod find = new PropFindMethod("http://192.168.1.71:4502/crx/repository/crx.default/content/dam/testfolder", DavConstants.PROPFIND_ALL_PROP, DavConstants.DEPTH_1);  
    38.         client.executeMethod(find);  
    39.         MultiStatus multiStatus = find.getResponseBodyAsMultiStatus();  
    40.         MultiStatusResponse[] responses = multiStatus.getResponses();  
    41.         System.out.println("Folders and files:");  
    42.         for (int i=0; i<responses.length; i++) {  
    43.             System.out.println(responses[i].getHref());  
    44.         }    
    45.     }  
原文地址:https://www.cnblogs.com/xgjblog/p/3831055.html