编者注
决定要编写WebDAV,但是首先要确认当前的Windows 10、Mac 10.12、linux系统能够支持访问webDAV。也就是说需要能够正确访问的应用用与服务测试
WebdavServlet.java位置
WebdavServlet.java
的位置是在apache-tomcat-x.0.xx-src/java/org/apache/catalina/servlets/WebdavServlet.java
。注意:该代码是在tomcat-src当中,而一般下载的tomcat为二进制版,需要进行引用。
使用
123
Servlet已经添加了WebDAV 2的支持。这些所有的HTTP请求是基于DefaultServlet。WebDAVServlet不应当被用作默认的servlet(例如:映射到/)在当前配置是不能工作的。
映射路径(例如/webdav/*
)这个servlet效果进入web应用重新挂载sub-path目录,以WebDAV的接入方式展示所有资源。在重新挂在的资源树种,会保护WEB-INF
和META-INF
目录。
若想允许WebDAV则需要在web.xml中添加内容:
<servlet>
<servlet-name>webdav</servlet-name>
<servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>webdav</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
上面的配置访问是只读。想要开启读写模式需要添加:
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
想要编辑内容通过不同的URL,使用下列映射:
<servlet-mapping>
<servlet-name>webdav</servlet-name>
<url-pattern>webdavedit/*</url-pattern>
</servlet-mapping>
默认的接入方式/WEB-INF
和META-INF
通过WebDAV是不可以通的。想要允许访问这个URLs需要添加:
<init-param>
<param-name>allowSpecialPaths</param-name>
<param-value>true</param-value>
</init-param>
不要忘记安全访问需要适当的编辑URLs,尤其是如果allowSpecialPaths使用。使用上面的配置,内容需要确认普通用户能够访问。用户需要通过验证才能允许编辑内容
启动与访问测试
第一次无法访问
在webapp中创建webdav目录,目录树如下:
├── WEB-INF
│ └── web.xml
└── test.txt
按照第一个配置编辑web.xml运行tomcat,通过浏览器http://localhost:8080/webdav
并不能访问,windows也无法配置网络配置
第二次可以只读访问
修改配置文件
<init-param>
<!-- listing must set true -->
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
测试,浏览器可以访问内容
Filename Size Last Modified
.DS_Store 6.0 kb Fri, 04 Nov 2016 05:55:02 GMT
test.txt 0.1 kb Fri, 04 Nov 2016 06:09:32 GMT
测试windows 10添加网络位置也可以使用
第三次可以读写访问
修改配置
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
在Windows下访问创建文件,成功
第四次访问读取WEB-INF
添加配置
<init-param>
<param-name>allowSpecialPaths</param-name>
<param-value>true</param-value>
</init-param>
通过Chrome浏览器观看,并没有看到WEB-INF
但是在Windows里面,可以看到WEB-INF,但是进不去报错
其他文件可以进行读写
问题
在Windows系统中,创建中文文件夹,报错,但是刷新可以正常显示
但是在进入中文目录时发生异常