今天把程序部署到服務器,發現異常,FileNotFound異常,很快定位到getServletContext().getRealPath("/");返回空的問題。這個問題通常是傳遞的虛擬路徑不對或者使用war包導致的。而我的程序傳遞的路徑肯定正確,並且部署的時候對.war包做了解壓。對這個問題上網搜搜了n編,始終找不到問題所在,而部署子本機是完全正確的。
仔細梳理了一下找到了一個線索:我部署到服務器的時候,我等了半天,服務器沒幫我把war解壓,於是自己把war解壓了,而解壓之后沒有把war包刪掉,是不是服務器啟動的程序是war包里面的,而不是我解壓之后的呢?於是我就rm掉war包,然后開始測試,結果結果同樣如此,感覺比較失望,失望之時想起了服務器可能有編譯緩存,於是重啟服務器,問題終於解決。
使用String rootPath = this.getClass().getResource("/").getPath().replaceAll("^\\/", ""); 代替