- 浏览: 404693 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
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 868Java插件安装说明 正常情况浏览器自动检测提示安装插件 ... -
解决tomcat默认45s启动超时的问题
2013-02-01 00:25 1130进入你的工作空间的这个目次下 E: ... -
推荐一款开源的兼容html5的视频音频播放插件——JW Player
2012-09-23 09:58 1519http://www.longtailvideo.com/pl ... -
FB4.5
2011-07-30 20:27 9304.5和4有点不一样,貌似在修改Hosts文件之前输入序列 ... -
基于WEBDAV的在线编辑器
2011-05-12 12:44 2473以前如果用户需要编辑服务器上的文档,首先需要通过ftp下载到本 ... -
WebDAV有哪些优点&WebDAV配置
2011-05-10 23:01 181815.2 WebDAV有哪些优点高效性:相对于即时聊天, ... -
浏览器的加载与页面性能优化
2011-03-02 22:24 984本文将探讨浏览器渲染的loading过程,主要有2个目 ... -
50个Web设计师超便利的工具
2010-10-13 21:41 1006作为一个 Web 设计师并不容易,不仅考虑设计与架构,还要 ... -
什么是全球网络的主色调?
2010-09-19 22:30 1062COLOURlovers不久前对社交网络的主色调进行了调查 ... -
国外优秀免费空间不完全名单
2010-07-29 23:16 12561. 全能 PHP/MySQL 空间最 ... -
Sf.net(sourceforge.net)稳定免费空间支持php,mysql数据库,绑定域名
2010-07-26 09:17 2984Sf.net(sourceforge.net)稳定 ... -
sf.net/mysql/ssh/sftp稳定老免费空间
2010-07-26 09:17 1261sourceforge.net 作为世界上最大的开源托管网站 ... -
x5s 发布-自动化的XSS安全性辅助测试工具
2010-07-19 14:09 1569x5s是Fiddler的一个插件 ,旨在帮助渗透测试人员发 ... -
xss 安全测试
2010-07-19 14:07 960测试用例:还是挺管用 ... -
大型网站架构演变和知识体系【架构演变第十步:进入大型分布式应用时代和廉价服务器群梦想时代】
2010-07-13 10:32 1016架构演变第十步:进入大型分布式应用时代和廉价服务器群梦想时代 ... -
大型网站架构演变和知识体系【 架构演变第九步:数据读写分离和廉价存储方案】
2010-07-13 10:30 1125架构演变第九步:数 ... -
大型网站架构演变和知识体系【架构演变第八步:增加更多的webserver】
2010-07-13 10:29 1015架构演变第八步:增加更多的webserver 在做完分库分表 ... -
大型网站架构演变和知识体系【架构演变第七步:分表、DAL和分布式缓存】
2010-07-13 10:27 1266架构演变第七步:分表 ... -
大型网站架构演变和知识体系【架构演变第六步:分库】
2010-07-13 10:26 951架构演变第六步:分库 享受了一段时间的系统访问量高速增长的幸 ... -
大型网站架构演变和知识体系【架构演变第五步: 增加webserver】
2010-07-13 10:23 777架构演变第五步: 增加webserver 好景不长,发现随着 ...
相关推荐
该书深入探讨了滑模控制(Sliding Mode Control,简称SMC)及其观测技术。滑模控制是一种非线性控制方法,它在系统达到某一滑模面后,通过切换控制律来迫使系统状态在该面上作预定的运动。这种方法对参数变化和外部...
在给定的资料中,我们有三个文件:controller299.m、plant299.m 和 sliding_mode299.mdl,它们分别代表控制器的实现代码、被控对象的模型以及整个滑动模式控制系统的仿真模型。 1. **滑动模式控制器基础**: 滑动...
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
这个压缩包“sliding_window-master”显然是一个关于Python实现滑动窗口算法的项目,包含了一些相关代码示例。 滑动窗口的基本思想是维护一个固定大小的窗口,该窗口沿着数据序列移动。窗口内的元素数量始终保持...
exhibit variable sliding mode domains and local sliding bifurcations including boundary node (focus) bifurcation, double tangency bifurcation and other sliding mode bifurcations. Model solutions ...
3. 易于实现:由于滑模控制设计相对简单,因此在实际工程应用中容易实现。 根据描述和部分内容的介绍,本书应当包含了许多在实际工程中运用滑模控制的例子,以及一系列相关的算法和设计方法。例如,在机械控制、...
在本压缩包"**DynamicsModelMATLABSymbolic.zip**"中,重点讨论了基于MATLAB的滑模控制设计方法,特别是涉及积分滑模控制(Integral Sliding Mode Control,ISMC)的实现。MATLAB和符号计算工具箱被用来建立动态模型...
滑动导航插件Sliding是专为网页设计者和开发者打造的一款强大且灵活的工具,尤其适用于移动端项目。它的核心特性在于提供了一种类似于移动应用的列表式导航体验,能够根据用户手势进行响应式的滑动操作。这款插件...
Matlab实现倒立摆的slidingmodecontrol模拟程序-sliding_mode_control.m Matlab Code for Sliding Mode Simulation 假设系统为: matlab_sliding.JPG 以下参数值为: m=1...
可拖动的Flutter小部件,使实现SlidingUpPanel更加容易! 基于Material Design底部工作表组件,此小部件可同时在Android和iOS上使用。 正在安装 将以下内容添加到您的pubspec.yaml文件中: dependencies : ...
综上所述,"MyImage_Sliding.zip" 中的代码或数据可能展示了如何在Python中结合多尺度分析和滑动窗口技术来实现图像定位。具体实现细节可能包括窗口大小的选择、步长设置、多尺度的构建方式以及检测算法的选取。通过...
sliding mode controller
从给定的文件信息来看,虽然标题和描述都是关于“滑模控制在机电系统中的应用”,但是提供的部分内容却转向了金融工程与智能计算方法的关系,包括人工智能、神经网络、进化算法等在金融决策中的应用。...
jQuery Sliding Menu是一款基于jQuery库的导航插件,它实现了左右滑动的效果,使得菜单项在用户交互时可以平滑地展开和收起。这种设计不仅美观,还能节省屏幕空间,特别适合于响应式布局或移动设备上的应用。 **二...
第一阶段:一阶滑模控制(First Order Sliding Modes) 一阶滑模控制关注的是系统输出跟踪一个参考信号,通过在切换面上的滑动模态来确保系统的鲁棒性。一个简单的例子可以表示为:当系统的滑模变量σ大于零时,控制...
根据提供的文件信息,我们可以从标题、描述以及部分文本中提炼出关于滑模控制(Sliding Mode Control)在工程中的应用及重要知识点。 ### 滑模控制基础 **滑模控制**是一种非线性控制方法,它通过设计一个称为滑动...
由于滑模控制的这一特性,它能有效克服电机械系统中的不确定性和非线性,实现精确控制。 Utkin是滑模控制理论的奠基人之一,他在1977年发表的一篇论文中提出了滑模控制的基本概念。随后,Utkin等学者不断丰富和发展...
滑模控制,包括控制对象(机械臂),控制系统以及轨迹调整