2014-09-24 107 views
0

我有一個應用程序部署在Tomcat服務器上。我用這個計算器link找出加載類的像下面的絕對路徑:如何找到部署在Tomcat中的類的絕對路徑?

代碼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

這是因爲getResource(「。」)返回調用類所在的「當前」文件夾。在你的情況下,調用類是你的webapp的類加載器,它在tomcat lib中聲明,它應該位於tomcat/lib文件夾中。

getResource(「/」)返回類路徑的根文件夾,它由webapp類加載器指向WEB-INF/classes。

+0

你能否提供你最後一句話的提法? 你也可以在回答我的觀點b)底部問題 – 2014-09-24 12:24:25

+0

參考:http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResource(java .lang.String)。但那個答案是我的經驗知識的簡歷。 – DiogoSantana 2014-09-24 15:54:09