`

Sliding into WebDAV(slide,Webdav的实现)

    博客分类:
  • WEB
阅读更多

最近在做WebDav,感觉这篇文章不错,不过可惜的是,在apache项目中,slide项目已经关闭。

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协议来连接。这些模块实现了大量有用的特性,比如webdav客户端库,webdav服务段库,和一个基于webdav的cms.别的不说,首先这些模块将给开发者提供可以访问webdav的客户端。
这篇文章将介绍如何在java应用中用slide客户端库来访问 webdav服务。文章将首先介绍webdav的协议,接着介绍slide项目,最后,我们将着手来写几个用slide客户端的例子。

WebDAV
WebDAV 代表了“Web-based Distributed Authoring and Versioning”。webdav是一套http协议的扩展--允许用户来协作编辑和管理在远程服务器上的文件。因为这个协议扩展本身很简单而且很容易使用,所以他的能量是很强大的。效果上,webdav使http 服务器增强为一个文件系统。大家知道类似ftp的协议提供类似的协议很多年了,webdav's的特性比这些ftp协议更好,而且因此允许开发者使用webdav来创建更强大的系统。
因为不同的webdav服务器实现提供不同层次上的协议支持,下列的特性是最基本的而且可以使webdav区别于ftp
http-base:允许http的所有优点。(文件权限,快速转换,https支持,等等)
put:可以上传资源到服务器
lock:可以设置/取消 连接依赖,long-duration exclusive 和共享锁。
Porperties:可以存储资源的任意元数据。
Namespace manipulations:可以移动文件,拷贝文件,创建目录和列表目录。
这些特性允许开发所有不同类别的有趣应用,包括分布web-page authoring/editing 应用,版本控制应用,邮件服务器,和分布式日历应用,还有很多。当开发者把webdav和“一次编写,到处运行”的java联合时,编写多处理平台的分布客户端应用变得十分简单了。WebDAV Tools and Resources和http一样,webdav需要服务段和客户端组件。除了slide项目之外--既提供了服务段又提供了客户端,还有许多可用的 webdav 组件:
1,apache的模块mod_dav(已经在apache2中包括了)
2,microsoft的iis包含了webdav服务支持。
3,mas os x允许mount一个webdav服务器作为一个网络磁盘。
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实现的webdav协议。
3,一个java版的webdav和http客户端库
4,一个webdav命令行客户端
5,一个访问webdav的swing组件(还没实现)和其他的jakarta项目一样,slide提供了源文件和二进制文件。用户可以自己去下载。如果已经下载并解压了他的安装文件,打开client/lib。这个目录包含了在本文例子中需要用到的jar文件,包含了slide webdav的客户端库和许多额外包。doc/clientjavadoc下面有它的相关文档。
Using Slide
现在,我们来关注业务:应用SLIDE WEBDAV客户端库来连接webdav服务器。slide客户端封装了所有的功能。我们需要通过WebdavResource 来访问WebDAV 服务器。访问一个WebDAV 服务器涉及到下面的3个基本的步骤:
1,打开一个到WebDAV服务器的连接
2,发布协议请求并接受来自服务器的应答
3,关闭连接。
打开WebDAV 服务器的连接可以通过WebdavResource的构造函数。有许多途径来处理;最直接的就是给构造函数传递一个org.apache.util.HttpURL 对象--包含服务器的url和用户信息。
连接一旦建立,我们就可以发布我们的请求。这些协议请求被WebdavResource的很多函数处理。特别如:
1,aclfindMethod:用来查找access control lists;很多webdav服务器没有实现。
2,aclMethod:用来设置acl,很多webdav服务器没有实现。
3,copyMethod:复制一个资源从服务器上的一个位置到另一个位置
4,deleteMethod 删除服务器上的一个资源。
5,getMethod:获得一个服务器上的一个资源(和http的get方法一样)
6,headMethod获得服务器资源的头文件(和http的head的命令一样)
7,list:列出服务器当前目录下的资源
8,lockMethod:锁定服务器上的一个资源
9,mkcolMethod:在服务器上创建一个集合
10,moveMethod:在服务器上移动资源
11,optionsMethod:返回服务器支持的选项。(getDavCapabilities方法和getAllowedMethods方法也提供这种功能)
12,postMethod:获得服务器上的资源,通过http post(和http post命令一样)
13,propFindMethod:返回一个资源的属性。
14,propPatchMethod:设置或者获得一个资源的属性。
15,putMethod:上传一个资源到服务器(类似ftp的put命令)
16,setPath:设置服务期上的当前目录
17,unlockMethod解锁服务器的资源
注意:有些slide的文档很弱。这片文章将会覆盖这里的部分方法,我们不会每个都涉及到。很多我们没有涉及到的方法都没有好的文档。
WebdavResource 有很多其他的方法,提供了众多的功能;更多细节,请察看官方文档。一旦,你已经发布了协议请求,你需要关闭webdav的连接。这个用WebdavResource 的close()方法来做。
A Simple Example
一个简单slide webdav例子,做了如下工作:
打开连接,获得文件,关闭连接。当然,这个例子很简单,这个例子会用到java.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行建立了一个HttpURL 对象--饱含了连接信息。然后我们通过HttpURL 创建了WebdavResource 。接着,我们创建了一个File对象来代表我们将要下在的文件。 getMethod方法获得了这个文件,close方法关闭了连接。(注意,这里仅仅是一个例子,你需要做更为谨慎的异常处理)你看到了,我们用WebdavResource 很直接的处理不同端口的协议。把这个例子改造为上传文件很直接,我们只需要改变少许几行,如下:
File fn = new File("local-file");
wdr.putMethod(fn);
当然,这里还可以对文件重新命名。
这个例子很简单,但是演示了怎样来使用WebdavResource 来访问webdav服务器。在下一部分,我们将发掘更多复杂的例子来演示如何用webdav来锁定和解锁文件。
More Complex Examples
可能有这样的场景,我们有一个web站点,这个站点被2个彼此分开的团队来维护。每个团队都有责任来编辑html资源,但是站点管理员希望回避冲突。换句话说,我们都能上传,下在,锁定和解锁文件。我们都想锁定文件来工作。
来完成这一进程,我们需要如下的处理:
1,打开连接。
2,列出文件
3,锁定文件
4,下在文件
5,上传文件
6,解锁文件
7,关闭连接
我们已经知道如何来打开连接,关闭连接,上传文件和下载文件。所以我们需要做的就是来处理锁定/解锁文件和列出文件。我们假设已经有WebdavResource 对象和当前路径了。
首先,我们想要锁定文件。我们用lockMethod来实现,其他的代码用作错误处理。你将注意到我们设置了WebdavResource的路径给文件--我们并没有非要用get和put方法。这是因为某些方法,包括isCollection,getPath和setPath仅仅支持文件的当前目录。其他的方法,比如getMethod (不是getMethodData 和getMethodDataAsString)并不支持这些接口。恩,有点乱。
下面是锁定文件的代码:

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对象上调用。
列出当前目录下的文件,我们用listFiles方法来处理。注意在这个例子中,我们对是否是目录作了检

查。

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

最终观点
Jakarta's Slide项目是连接webdav客户端功能和java应用的纽带。这个库是开源的,很容易使用,也很
容易集成到所有的系统中。尽管slide遗留了一些需要继续解决的问题,但是,他是实现webdav客户端最
成功的方案。

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

分享到:
评论

相关推荐

    Sliding Mode Control and Observation

    该书深入探讨了滑模控制(Sliding Mode Control,简称SMC)及其观测技术。滑模控制是一种非线性控制方法,它在系统达到某一滑模面后,通过切换控制律来迫使系统状态在该面上作预定的运动。这种方法对参数变化和外部...

    sliding mode controller design

    在给定的资料中,我们有三个文件:controller299.m、plant299.m 和 sliding_mode299.mdl,它们分别代表控制器的实现代码、被控对象的模型以及整个滑动模式控制系统的仿真模型。 1. **滑动模式控制器基础**: 滑动...

    《Sliding Mode Control Using Novel Sliding Surfaces》2009.pdf

    Bijnan Bandyopadhyay, Fulwani Deepak, Kyung-Soo Kim. Sliding mode control using novel sliding surfaces[M]. Springer Berlin Heidelberg, 2009.

    sliding-mode controller

    A chattering-free sliding-mode controller for underwater vehicles with fault-tolerant infinity-norm thrust allocation.pdf

    sliding_window-master

    这个压缩包“sliding_window-master”显然是一个关于Python实现滑动窗口算法的项目,包含了一些相关代码示例。 滑动窗口的基本思想是维护一个固定大小的窗口,该窗口沿着数据序列移动。窗口内的元素数量始终保持...

    Sliding bifurcation OF A FILIPPOV EPIDEMIC MODEL WITH VACCINATION

    exhibit variable sliding mode domains and local sliding bifurcations including boundary node (focus) bifurcation, double tangency bifurcation and other sliding mode bifurcations. Model solutions ...

    Sliding mode control in engineering

    3. 易于实现:由于滑模控制设计相对简单,因此在实际工程应用中容易实现。 根据描述和部分内容的介绍,本书应当包含了许多在实际工程中运用滑模控制的例子,以及一系列相关的算法和设计方法。例如,在机械控制、...

    DynamicsModelMATLABSymbolic.zip_integral sliding_sliding_sliding

    在本压缩包"**DynamicsModelMATLABSymbolic.zip**"中,重点讨论了基于MATLAB的滑模控制设计方法,特别是涉及积分滑模控制(Integral Sliding Mode Control,ISMC)的实现。MATLAB和符号计算工具箱被用来建立动态模型...

    滑动导航插件sliding.zip

    滑动导航插件Sliding是专为网页设计者和开发者打造的一款强大且灵活的工具,尤其适用于移动端项目。它的核心特性在于提供了一种类似于移动应用的列表式导航体验,能够根据用户手势进行响应式的滑动操作。这款插件...

    Matlab实现倒立摆的slidingmodecontrol模拟程序-sliding_mode_control.m

    Matlab实现倒立摆的slidingmodecontrol模拟程序-sliding_mode_control.m Matlab Code for Sliding Mode Simulation 假设系统为: matlab_sliding.JPG 以下参数值为: m=1...

    sliding_up_panel:可拖动的Flutter小部件,使实现SlidingUpPanel更加容易!

    可拖动的Flutter小部件,使实现SlidingUpPanel更加容易! 基于Material Design底部工作表组件,此小部件可同时在Android和iOS上使用。 正在安装 将以下内容添加到您的pubspec.yaml文件中: dependencies : ...

    MyImage_Sliding.zip

    综上所述,"MyImage_Sliding.zip" 中的代码或数据可能展示了如何在Python中结合多尺度分析和滑动窗口技术来实现图像定位。具体实现细节可能包括窗口大小的选择、步长设置、多尺度的构建方式以及检测算法的选取。通过...

    doc3.zip_sliding_sliding controller_sliding mode_slidingmodecont

    sliding mode controller

    Sliding Mode Control in Electromechanical Systems

    从给定的文件信息来看,虽然标题和描述都是关于“滑模控制在机电系统中的应用”,但是提供的部分内容却转向了金融工程与智能计算方法的关系,包括人工智能、神经网络、进化算法等在金融决策中的应用。...

    jquery-sliding-menu左右滑动导航插件

    jQuery Sliding Menu是一款基于jQuery库的导航插件,它实现了左右滑动的效果,使得菜单项在用户交互时可以平滑地展开和收起。这种设计不仅美观,还能节省屏幕空间,特别适合于响应式布局或移动设备上的应用。 **二...

    Five Stages of Sliding Mode Controllers

    第一阶段:一阶滑模控制(First Order Sliding Modes) 一阶滑模控制关注的是系统输出跟踪一个参考信号,通过在切换面上的滑动模态来确保系统的鲁棒性。一个简单的例子可以表示为:当系统的滑模变量σ大于零时,控制...

    sliding mode control in engineering

    根据提供的文件信息,我们可以从标题、描述以及部分文本中提炼出关于滑模控制(Sliding Mode Control)在工程中的应用及重要知识点。 ### 滑模控制基础 **滑模控制**是一种非线性控制方法,它通过设计一个称为滑动...

    sliding mode control in electro-mechanical system.pdf

    由于滑模控制的这一特性,它能有效克服电机械系统中的不确定性和非线性,实现精确控制。 Utkin是滑模控制理论的奠基人之一,他在1977年发表的一篇论文中提出了滑模控制的基本概念。随后,Utkin等学者不断丰富和发展...

    slide_control.rar_slide_control_sliding mode_控制_机械系统控制_机械臂控制

    滑模控制,包括控制对象(机械臂),控制系统以及轨迹调整

Global site tag (gtag.js) - Google Analytics