我在Tomcat服务器上部署了一个应用程序。我使用这个stackoverflow link找出加载类的绝对路径,如下所示:
代码1:
getClass().getClassLoader().getResource(".").getPath();
代码2:
Thread.currentThread().getContextClassLoader().getResource(".").getPath();
预期结果:
/D:/ProgramFiles/Tomcat-7.0.26/webapps/catalog-web/WEB-INF/classes/
实际结果:
/D:/ProgramFiles/Tomcat-7.0.26/lib/
真的与找到的结果混淆了。最后我尝试了下面的内容:
代码1:
getClass().getClassLoader().getResource("/").getPath();
代码2:
Thread.currentThread().getContextClassLoader().getResource("/").getPath();
我终于得到了结果:
/D:/ProgramFiles/Tomcat-7.0.26/webapps/catalog-web/WEB-INF/classes/
所以我的问题如下:
a)你能解释一下为什么会这样吗?
b)另外,请告诉我是否还有其他更好的方式来获得我的预期结果?
答案 0 :(得分:0)
那是因为getResource(“。”)返回调用类所在的“当前”文件夹。在你的情况下,调用类是你的webapp的类加载器,它在tomcat lib中声明,它应该位于tomcat / lib文件夹中。
getResource(“/”)返回类路径的根文件夹,该文件夹由webapp类加载器指向WEB-INF / classes。