(共享笔记)上一个文章中,在tomcat创建的webdav配置有点问题,对此进行总结

        问题:我多次尝试将webdav的虚拟路径进行映射到其他文件夹,但是总是失败。

        为了实现目标(目标在下一段)前的配置:根据网上教程,需在项目文件夹下配置WEB-INF中的web.xml,且无需配置server.xml,有些教程实例访问时要加上的"/webdav"的url。但是实际,我尝试多次,仅需要属于域名即可进入项目文件夹中的ROOT默认根文件夹。

        目标:重新映射一个路径:虚拟路径(/webdav)实际路径(H:\webdav)

        具体做法:在server.xml中的项目配置中添加Context标签。

        问题显现:(我开启了目录显示)它竟然自动跳过了验证,直接进入了H:\webdav。(似乎只是因为开启了文件目录功能)

        分析原因:

                询问Chatgpt,它告诉我,server.xml中添加的Context标签会使得映射虚拟路径时,自动覆盖WEB-INF中的web.xml配置。

                也就是说,如果使用了Context创建了虚拟路径,那么之前的webdav所有配置都失效(包括servlet、servlet映射的url、安全策略以及登录验证的rolename)

        尝试解决(虽然失败了):

                询问Chatgpt,它提供了两种解决方法

                       ①将项目中的WEB-INF下的web.xml配置写入server.xml中,即在调用Context标签的虚拟路径时,自动配置。这就避免了在项目中配置的web.xml中被覆盖的问题。

                        ②将server.xml中的Context配置导入到WEB-INF中,且删除server.xml中的Context标签,同样可以防止在server.xml中配置Context时,将web.xml中的配置覆盖。

        最终结果:我尝试使用了这两种方法,但是毫无例外,都失败了。

                        其中,使用第①种方法时,(servlet、servlet映射的url、安全策略以及登录验证的rolename)仍无法生效,仍然是直接显示文件夹。

                        使用第②中方法时,(我记得没错的话)会报错404。

        总之:失败了。最终,我只配置了默认域名:4433端口,直接访问项目中的ROOT文件夹。(到这里,我突然想到,在这之前,我没有配置访问限制,但是成功使用android中的Solid Explorer软件通过匿名的方式链接到了tomcat创建的webdav,因此我推测,可能某个设置实际上让webdav“相关的servlet”生效了,但是访问限制未生效),有空再试试吧。

        学到的知识:

                在conf中配置web.xml是全局配置,但加载配置的权重低于项目内部WEB-INF中web.xml。若两者出现矛盾,则生效的是WEB-INF的web.xml中的配置。

                在Contex中配置的url,会覆盖掉WEB-INF的web.xml对应的url配置,覆盖后使用的配置是可以在<Context>与</Context>标签之间进行配置。

        

        

        

猜你喜欢

转载自blog.csdn.net/qq_40099123/article/details/130788024