- 浏览: 390057 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
milkyTea_:
...
学习:二维码、QR码、J4L-QRCode、java -
xunke515:
请问如何更换其他用户,注销了从新登录的时候选择么?
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine -
_copythat:
学习:二维码、QR码、J4L-QRCode、java -
小fi(FD):
楼主,你好,关于你发表的《基于动态表单的Java不确定字段数报 ...
基于动态表单的Java不确定字段数报表项目实现 -
rmn190:
受用了。多谢分享!
SD2见闻--参加PPT制作秘笈沙龙
最近在做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包。
代码如下:
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)并不支持这些接口。恩,有点乱。
下面是锁定文件的代码:
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方法来处理。注意在这个例子中,我们对是否是目录作了检
查。
{
if ( ! wdr.isCollection())
throw new Exception ( " Path is currently a file " );
return wdr.list();
}
最终观点
Jakarta's Slide项目是连接webdav客户端功能和java应用的纽带。这个库是开源的,很容易使用,也很
容易集成到所有的系统中。尽管slide遗留了一些需要继续解决的问题,但是,他是实现webdav客户端最
成功的方案。
[译者按]:原文下面有很多精彩的q&a.也值得一看。
发表评论
-
ChromeFireFox等浏览器的Java插件安装说明
2014-07-25 09:38 809Java插件安装说明 正常情况浏览器自动检测提示安装插件 ... -
解决tomcat默认45s启动超时的问题
2013-02-01 00:25 1026进入你的工作空间的这个目次下 E: ... -
推荐一款开源的兼容html5的视频音频播放插件——JW Player
2012-09-23 09:58 1478http://www.longtailvideo.com/pl ... -
FB4.5
2011-07-30 20:27 8874.5和4有点不一样,貌似在修改Hosts文件之前输入序列 ... -
基于WEBDAV的在线编辑器
2011-05-12 12:44 2389以前如果用户需要编辑服务器上的文档,首先需要通过ftp下载到本 ... -
WebDAV有哪些优点&WebDAV配置
2011-05-10 23:01 175715.2 WebDAV有哪些优点高效性:相对于即时聊天, ... -
浏览器的加载与页面性能优化
2011-03-02 22:24 905本文将探讨浏览器渲染的loading过程,主要有2个目 ... -
50个Web设计师超便利的工具
2010-10-13 21:41 965作为一个 Web 设计师并不容易,不仅考虑设计与架构,还要 ... -
什么是全球网络的主色调?
2010-09-19 22:30 1027COLOURlovers不久前对社交网络的主色调进行了调查 ... -
国外优秀免费空间不完全名单
2010-07-29 23:16 12101. 全能 PHP/MySQL 空间最 ... -
Sf.net(sourceforge.net)稳定免费空间支持php,mysql数据库,绑定域名
2010-07-26 09:17 2930Sf.net(sourceforge.net)稳定 ... -
sf.net/mysql/ssh/sftp稳定老免费空间
2010-07-26 09:17 1216sourceforge.net 作为世界上最大的开源托管网站 ... -
x5s 发布-自动化的XSS安全性辅助测试工具
2010-07-19 14:09 1543x5s是Fiddler的一个插件 ,旨在帮助渗透测试人员发 ... -
xss 安全测试
2010-07-19 14:07 895测试用例:还是挺管用 ... -
大型网站架构演变和知识体系【架构演变第十步:进入大型分布式应用时代和廉价服务器群梦想时代】
2010-07-13 10:32 979架构演变第十步:进入大型分布式应用时代和廉价服务器群梦想时代 ... -
大型网站架构演变和知识体系【 架构演变第九步:数据读写分离和廉价存储方案】
2010-07-13 10:30 1089架构演变第九步:数 ... -
大型网站架构演变和知识体系【架构演变第八步:增加更多的webserver】
2010-07-13 10:29 979架构演变第八步:增加更多的webserver 在做完分库分表 ... -
大型网站架构演变和知识体系【架构演变第七步:分表、DAL和分布式缓存】
2010-07-13 10:27 1229架构演变第七步:分表 ... -
大型网站架构演变和知识体系【架构演变第六步:分库】
2010-07-13 10:26 913架构演变第六步:分库 享受了一段时间的系统访问量高速增长的幸 ... -
大型网站架构演变和知识体系【架构演变第五步: 增加webserver】
2010-07-13 10:23 727架构演变第五步: 增加webserver 好景不长,发现随着 ...
相关推荐
Bijnan Bandyopadhyay, Fulwani Deepak, Kyung-Soo Kim. Sliding mode control using novel sliding surfaces[M]. Springer Berlin Heidelberg, 2009.
A chattering-free sliding-mode controller for underwater vehicles with fault-tolerant infinity-norm thrust allocation.pdf
exhibit variable sliding mode domains and local sliding bifurcations including boundary node (focus) bifurcation, double tangency bifurcation and other sliding mode bifurcations. Model solutions ...
可拖动的Flutter小部件,使实现SlidingUpPanel更加容易! 基于Material Design底部工作表组件,此小部件可同时在Android和iOS上使用。 正在安装 将以下内容添加到您的pubspec.yaml文件中: dependencies : ...
sliding mode control
本书介绍了sliding mode control在工程中的应用。
the design of sliding mode observer controller with time_varying boundery
Matlab实现倒立摆的slidingmodecontrol模拟程序-sliding_mode_control.m Matlab Code for Sliding Mode Simulation 假设系统为: matlab_sliding.JPG 以下参数值为: m=1...
sliding DFT算法详解的论文,有彩图示意算法的结构,算法流程
sliding mode controller
sliding_window算法的python版本,分享给有需要的人
自定义layout 并拦截内部触发事件 实现sliding的效果
滑模控制,包括控制对象(机械臂),控制系统以及轨迹调整
Qt5.5.1+msvc2013使用QSplitter控件实现滑动窗口,根据程序需求可设置为固定和可移动
An adaptive fuzzy sliding mode control algorithm is proposed for a class of continuous time unknown nonlinear systems. In contrast to the existing sliding mode control (SMC) design, where the presence...
滑动导航插件sliding是一款和移动端导航一样,列表样式,响应的滑动导航。
Paper about sliding mode for autonomous
滑模控制广泛应用在各个领域,包括航空航天,现在关于这方面的程序比较少,基于等效控制的离散滑模控制(2)
滑动窗口软件代码,UDP Sliding Window Protocol
sliding mode control