当项目发布到tomcat的root路径下,子文件与其他路径冲突的问题

在myeclipse中,如果项目的web-context root设置为“/”,则项目在tomcat中发布时,会发布到在ROOT文件中。ROOT文件不需要子目录名,直接输入tomcat地址就可以访问。


例如,当项目A的web-context root属性设置为“/”,则A发布时会在tomcat的webapps文件夹下生成一个ROOT的文件夹,项目A会发布到该文件夹中。访问时,只需要输入localhost就可以访问。


此时有一个问题,如果项目A的目录中有一个文件B,那么我们访问localhost/B就可以访问到B文件。那么如果我们再发布一个路径是“/B”的项目,那么访问localhost/B是会访问项目A中的B文件还是访问到项目B呢?


根据实验,会访问到项目B,而不是项目A中的B文件。

再进一步实验,如果ROOT目录中有一个子目录a,子目录中有一个文件b;而与ROOT同级目录a中有一个文件b,访问localhost/a/b是会访问哪一个文件b呢?


根据实验结果,依旧还是会访问到项目a中的b文件,而不是ROOT子目录a中的b文件。


再进一步实验,如果ROOT目录中有一个子目录a,子目录中有一个文件c;而与ROOT同级目录a中没有c文件,访问localhost/a/c能不能访问到文件c呢?


根据实验结果,服务器包404 not available错误。可见依旧访问的是目录a


结论是:当ROOT目录下的文件(文件夹)与和ROOT同级的目录重名时,tomcat会将访问定位在后者。当有多级文件或文件夹同时重名时,由于tomcat已经将访问定位在后者,因此访问的是后者的文件或文件夹;前者被覆盖的文件,或者文件夹都无法再访问到。

 

 

 

百度了一下,这是tomcat的“最长匹配原则”。输入路径后,tomcat会首先定位工程目录(虚拟子目录),然后在工程目录中寻找资源。定位工程目录的时候,按照最长的路径定位。如果没有则进入上一级目录中,以此类推。最后定位ROOT目录。如果ROOT目录不存在则浏览器页面显示空白。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值