2014-08-28 73 views
5

我試圖在傳統上在WebSphere下運行的Tomcat 8下運行Java Web項目。一個servlet進行以下調用:Tomcat 8中的getServletContext()。getRealPath()返回錯誤的路徑

xslFilePath = config.getServletContext().getRealPath(System.getProperty("file.separator") + "xsl"); 

config是ServletConfig的一個實例。

xsl位於項目內部,並部署爲C:\ myproject \ build \ web \ xsl。當servlet試圖引用位於xslFilePath中的文件時,我收到一個異常,表明Tomcat實際上正在尋找C:\ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.3 \ bin \ null中的xsl文件。顯然這是錯誤的位置,沒有發現任何東西。

不幸的是我無法更改代碼,因爲我無法訪問源代碼。所以我想知道這是否是Tomcat的預期行爲?有沒有任何Tomcat配置可以讓我確保路徑被引用到部署目錄而不是Tomcat bin目錄?選擇一些其他的servlet容器是否可取?任何意見,將不勝感激。

回答

9

使用getRealPath(「/ xsl」)。

getRealPath()的參數是一個'虛擬路徑',不幸的是,這是一個在Java文檔中使用但在任何地方都沒有定義的概念。它被假定爲您的Web應用程序中的資源路徑,並且該情況下的分隔符總是「/」,而不管平臺如何。

+11

這個答案是正確的,但它不只是使用錯誤的路徑分隔符。先前版本的Tomcat允許getRealPath(「xsl」)根本沒有初始分隔符,但Tomcat 8需要「/ xsl」(否則返回null)。這已經打破了我的一些個人web應用程序,其中大部分從Tomcat 5以來的未編譯中倖存下來... – sam 2014-10-18 15:30:58

相關問題