环境是tomcat8.0
将这个坑赶紧记下来,将war包放入webapp下,启动tomcat时,如果path中除了第一个/外,中间还带有/,解压war时,会将/变成#
比如:我的war包名称为jiang.war,
而我的server.xml的context配置如下:
<Context docBase="jiang" path="/jj/xx" reloadable="true" />
那么,jiang.war解压后,会生成【文件夹jiang】和文件夹【jj#xx】,一共两个文件夹
这个现象本身没啥问题,但带来的隐性危险就是如果涉及读取服务器上目录的文件时,会因为路径错误而报错,进而找不到文件。
因为一些获取服务器路径的方法都会将#号转换成%23,
比如我常用的
// 这种方式会将#转换%23
String path = PathUtil.class.getClassLoader().getResource("").getPath();
所以我需要手动转换:
path = path.replace("%23", "#");
peace!