使用 Apache Jackrabbit 实现 WebDAV 客户端

简介: WebDAV 作为 HTTP 协议的扩展,已经成为一种重要的 Web 通信协议。本文将介绍如何使用 Apache Jackrabbit 项目提供的 API 实现 WebDAV 的客户端。

WebDAV 概述

WebDAV(Web Distributed Authoring and Versioning)是一种基于 HTTP 的通信协议,是对 HTTP 的一种扩展,它在 HTTP 协议的 GET、HEAD、POST 等方法的基础上添加了一些新的方法,使得用户可以通过客户端编辑和管理存储在远程的文件。这些方法包括 PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCK 等方法。

顾名思义,WebDAV 关注的是创作(Authoring)和版本控制(Versioning)的功能,所以它在自己的协议(RFC 2518)里增加了文档属性、资源集合、锁、命名空间等概念和机制。

虽然 WebDAV 的最初是为了方便远程创作和版本管理,但有了以上机制和方法,WebDAV 经常用来和 FTP、SFTP 等网络传输协议进行对比,WebDAV 可以看作是对文件传输协议的一种补充和选择。由于使用的是 HTTP 的端口,WebDAV 可以方便地穿越防火墙。而且由于可以使用 HTTPS,WebDAV 在安全性上并不逊色于 SFTP。

WebDAV 在实际中已有广泛的应用。服务器方面,如 Apache HTTP Server 和 Microsoft IIS 上都可以找到 WebDAV 的身影。客户端方面,IBM Lotus、Microsoft Office 等办公自动化软件都可以通过 WebDAV 编辑远程的文档。

JCR 及 Apache Jackrabbit 简介

JCR 是 Content Repository for Java Technology API 的缩写,译为 Java 内容存储规范,其规范定义在 JSR170 和 JSR283,两者分别定义了 JCR 的 1.0 和 2.0 版本。其目的是简化 Java 的数据管理,并希望建立起一种基于内容仓库(Repository)而不是传统数据库(例如 RDBMS)的编码模型。内容仓库的一个典型应是内容管理系统(CMS)。JCR 是内容仓库的抽象,因为实际的内容仓库可以基于数据库,可能基于文件系统或者其他适合的存储机制,例如 WebDAV 仓库。而内容仓库的访问也有多种方式,包括直接访问(如应用程序的本地仓库),或者作为资源来访问(如通过 JNDI 来访问 Java EE 的容器),也可以使用 HTTP 或者 RMI 方式通过网络访问。

Apache Jackrabbit 是由 Apache Foundation 提供的 JCR 的开源实现。其起源可以追溯到 2002 年的 Apache Jakarta Slide 项目,该项目计划实现 JSR170 定义的内容仓库。随后在 2004 年,关于 JCR 的开源实现成为一个单独的项目,并命名为“Jackrabbit”。关于 Jakarta 和 Slide 项目,最初的 Jakarta 是一个包含 Ant、Maven、JMeter 等著名子项目的集合,Slide 也是其中的一个子项目。Slide 项目的主要内容是内容仓库,其中一个重要功能就是对 WebDAV 的支持,WebDAV 也可以看作是内容仓库的重要基石。但 Slide 项目在 2004 年以后便没有更新,并于 2007 年正式关闭。目前对 WebDAV 的支持主要来自 Jackrabbit 项目,实现 JCR1.0 的最新版本为 Jackrabbit1.6,实现 JCR2.0 的最新版本为 Jackrabbit2.4。

使用 Jackrabbit 实现 WebDAV 客户端

在进行编码前,只需要在自己的工程中包含 Jackrabbit 的 JAR 文件(例如 jackrabbit-standalone-2.4.3.jar),并使得可以在代码中成功导入 jackrabbit 库文件的资源。本文以在 Eclipse 开发环境中开发 WebDAV 客户端为例,介绍使用 Jackrabbit 实现 WebDAV 的客户端。如图所示,首先需要在新建的 WebDAV 客户端工程中导入 Jackrabbit JAR 文件。


图 1. 导入 Jackrabbit JAR 文件

图 1. 导入 Jackrabbit JAR 文件

一般情况下,可以按照图 2 所示的流程来实现 WebDAV 客户端,首先需要建立 HTTP 网络连接,即创建一个 HttpClient 对象,然后调用所需的 WebDAV 方法,并获取方法调用的状态码和返回值,并根据状态码和返回值决定是否调用或调用何种其他 WebDAV 方法。


图 2. 实现 WebDAV 客户端

图 2. 实现 WebDAV 客户端

第一步:建立网络连接。

在 java 中建立网络连接要简单许多,只需要创建 HttpClient 以及 Credentials 对象。并用新建的 Credentials 实例设置 HttpClient 实例的状态。其中 Credentials 对象保存了认证的用户名和密码。本例中的“admin”和“password”分别是 Apache HTTP 服务器中设定的用户名和密码。


清单 1. 建立 HttpClient 对象

HttpClient client = new HttpClient(); Credentials creds = new UsernamePasswordCredentials("admin", "password"); client.getState().setCredentials(AuthScope.ANY, creds);  

第二步:调用 DavMethod 方法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ede65645c538caa7211b2b2a78a45db6.html