2009-09-10 110 views
3

我有下面的代碼片段:爲什麼ServletContext#getRealPath(「/」)返回一個相對路徑?

String path = servletContext.getRealPath("/"); 

現在,我得到了來自用戶的錯誤報告說,返回的路徑是不是絕對路徑。 返回的路徑是'usr/local/...'而不是'/usr/local/...',因此getRealPath似乎正在返回相對路徑。

我可以看到這一點,因爲返回的路徑被記錄到日誌文件中。

我的規格是:

  • JBoss的4.0.5.GA
  • 紅帽EL 4
  • JDK 1.5.0

here適用於Javadoc

+0

你確定你的日誌不只是下降的第一個字符由於某些原因?你可以調試到應用程序並檢查結果嗎?如果所有這些都失敗了,您可以在Sun查看有關此問題的錯誤報告。 – cjstehno 2009-09-11 17:02:14

+0

沒有不幸的不是。 1:它是一個簡單的日誌語句:log.debug(「path:」+ path); 2:稍後在應用程序中,一些代碼嘗試在該路徑下查找文件:new File(servletContext.getRealPath(「/)+ ...); file.exists()返回false 好雖然我會檢查bug報告 – 2009-09-11 19:03:19

+0

你提到你正在使用JBoss,但是哪個web容器?它默認使用Jetty,但現在Tomcat我認爲...你也可以檢查這個問題bug數據庫和/或論壇的實際使用的網絡容器,因爲它是他們的實現......早先沒有想到。 – cjstehno 2009-09-11 19:59:44

回答

1

喜歡的東西

String path = new File(servletContext.getRealPath("/")).getAbsolutePath(); 

應該解決你的問題。 (它不回答你的問題,但... ;-))

問候,揚

+0

我不這麼認爲:) 說servletContext.getRealPath(「/」)返回'usr/local/...' 只有當前工作目錄是/(root)時,新文件(「usr/local/...」)纔會工作。 – 2009-09-11 19:42:28

+0

你試過了嗎?它會返回一個絕對文件(它在我的mac上用jetty作爲一個servlet容器運行);-) – Jan 2009-09-11 20:12:48

+0

回到我對這個問題的評論......我想知道它是否是一個實現問題,因爲您剛剛在Jetty中進行了測試並且我相信JBoss使用Tomcat。文檔和規範說,它應該工作,但他們必須正確實施:-) – cjstehno 2009-09-11 20:39:53

相關問題