谈Tomcat与WebDAV

来源:岁月联盟 编辑:exp 时间:2012-02-01
WebDAV(Web-based Distributed Authoring and Versioning)是基于HTTP 1.1 的一个通信协议。它为HTTP 1.1 添加了一些扩展(就是在GET、POST、HEAD 等几个HTTP 标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。这个协议的出现极大地增加了Web 作为一种创作媒体对于我们的价值。基于WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。
我这里不想详细介绍WebDAV 的协议,感兴趣的可以在这里找到相关的资料:
http://www.webdav.org
其中首先应该看的是这份WebDAV FAQ:
http://www.webdav.org/other/faq.html
 
WebDAV 本身是一个类似于HTTP 的通信协议(IETF RFC 2518)。它与HTTP 类似,需要实现服务器和客户端两部分软件。目前WebDAV 已经有了大量相关的软件实现。
在这里是一些与WebDAV 相关的软件项目:
http://www.webdav.org/projects/
 
在 这些项目中,我们最感兴趣的当然是那些用Java 实现的开源项目,Slide 是其中最重要的一个项目。Slide 是Jakarta 项目的一个子项目(又是Apache 山头的),提供了一套WebDAV 的服务器端和客户端的开发库和API,目前已经出到了2.0 版。
http://jakarta.apache.org/slide/
在这里下载最新的Slide 2.0 的Binary 包。
http://jakarta.apache.org/site/binindex.cgi
Slide 分成服务器端和客户端两部分:
服务器端:
http://apache.linuxforum.net/dist/jakarta/slide/binaries/jakarta-slide-server-bin-2.0.zip
客户端:
http://apache.linuxforum.net/dist/jakarta/slide/binaries/jakarta-slide-webdavclient-bin-2.0.zip
 
我先讲讲服务器端如何配置:
解压缩,假设在D:/tmp/jakarta-slide-server-2.0 下,你会在
D:/tmp/jakarta-slide-server-2.0/slide/webapp/
下找到两个war 文件:
slide.war:Slide 服务器端配置,用Servlet 实现。
slide-doc.war:Slide 文档。
 
把这两个war 文件copy 到你的Web Container(Tomcat、Jetty、Resin、etc.) 的部署目录(一般是webapps 目录)下,然后重新启动Web Container。
 
在我现在写的这个文档中服务器端的配置就是这么简单。
 
再讲讲在客户端如何配置。
WebDAV 有非常多的客户端,用Slide 客户端的库可以非常容易地写出一个WebDAV 客户端程序。感兴趣的可以看看这篇文档:
http://www.onjava.com/lpt/a/4387
 
我主要讲讲如何用Windows 2000/XP 自带的Web Folder 功能来访问Web 文件夹。
Windows 2000/XP 安装后已经具备访问基于WebDAV 协议的Web 文件夹的功能,而且可以把Web 文件夹映射为一个本地文件夹,支持拖放、拷贝/粘贴等等功能,使用起来非常方便。
在Windows 2000/XP 中添加Web 文件夹的方法是:
打开“网上邻居”,添加网上邻居,在“请键入网上邻居的位置”中输入Web 文件夹的URL,例如我刚才用Slide 配置好的WebDAV 服务器在:
http://localhost:8000/slide/
然后按照向导的提示继续做就可以了,非常的简单。
配置好了以后你就可以把这个Web 文件夹当作本地文件夹一样使用了。拖几个文件进去试试吧。关于上述Web Folder 的配置可以参考这些文档:
http://chapters.marssociety.org/webdav/
(几个闲着没事孜孜不倦地研究人类如何移民火星的酷哥写的文档)
还有M$ 网站上的相关文档:
http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/using_webfolders_for_file_transfer.asp
 
M$ 的很多产品都内置有WebDAV 的支持。例如:Office 2000、IE 5/6、Exchange Server、Frontpage。我配置好WebDAV 服务器后,当我访问这个URL
http://localhost:8000/slide/files/23.doc
时,Word 2000 可以识别出Web 服务器支持WebDAV 协议。于是Word 2000 可以直接编辑服务器上的这个文档,编辑完后可以直接保存在Web 服务器上。这个是不是比你习惯的download->modify->upload 要方便的多?
 
WebDAV 还有很多话题,比如WebDAV 完全可以取代FTP。WebDAV 至少在以下几个方面对FTP 具有压倒性优势:
1、FTP 需要申请操作系统帐号。WebDAV 不需要申请任何操作系统帐号,它使用一套自己定义的安全完善的身份验证机制。
2、FTP 的所有数据(包括登录信息)全部使用明文传送,加密必须要自己来实现,例如:可以手工用GPG 来做这件事,但是毕竟还是不方便。用WebDAV 就可以使用HTTPS 来传输数据,加密解密的操作完全是在低层自动完成的。
3、FTP 传输数据的传输效率比较低,每传送一个文件需要打开一个新的TCP 连接,而WebDAV 传输所有文件只需要一个TCP 连接。
4、FTP 不象HTTP 那样容易穿越防火墙,在广域网的应用范围比HTTP 要小的多。而WebDAV 因为是基于HTTP 的,所以具有HTTP 的所有优点。
5、FTP 客户端工具没有 WebDAV 客户端工具使用方便。你刚才已经看到WebDAV 服务器配置好后,通过Windows 2000/XP 的Web Folder 方式访问Web 文件夹就和访问本地文件夹没有多少区别。如果应用程序支持WebDAV 协议(例如Word 2000),就可以直接打开Web 文件夹中的文件并且编辑,然后直接保存在原先的Web 文件夹中。这个用起来简直就和Samba 完全一样。你知道哪一个FTP 客户端使用起来有这么方便吗?
 
除了网上邻居以外,在IE 中也可以直接打开Web 文件夹。运行IE,“文件->打开”,选中“以Web 文件夹方式打开”。然后输入
http://localhost:8000/slide/
这样IE 就直接打开了这个Web 文件夹,你可以随便拖几个文件进去试试。如果是Word 文件可以直接用Word 打开并编辑,然后可以直接保存在Web Server 上。这和上面在网上邻居中打开的效果是完全一样的。
你可以写JS 来直接打开Web 文件夹中的文件,例如:
<script language="javascript">
<!--
var word = new ActiveXObject("Word.Application");
word.Visible = true;
word.Documents.Open("http://localhost:8000/slide/files/23.doc");
//word.Quit();
-->
</script>
这里只是打开Word 文件的例子,你当然还可以写出打开其它类型文件的例子。前提是这类文件的应用程序支持WebDAV 协议并且提供了相应的控件可以被JS 调用。
Word 打开这个文件后可以直接编辑,然后可以直接保存在Web Server 上面,省去了你download->modify->upload 的步骤,用起来是不是更方便?
 
缺省情况下,WebDAV 服务器在客户端第一次打开一个文件时会为这个文件加一个排他的写锁,以后所有客户端打开这个文件都是只读的。只有在第一个客户端保存文件后才会释放这个锁,然后其他客户端才能修改这个文件。
 
Slide 可以把文件保存在文件系统中,也可以把文件保存在数据库中。Slide 提供了API 使你可以写plugin 将文件保存在其它类型的存储系统中。
Slide 使用基于角色的权限控制,角色的权限可以继承。这些内容聊起来就多了,感兴趣的可以看Slide 的配置文档。文档中还有与版本控制有关的内容。


摘自 囧南风囧的博客