2013-11-26 14 views
3

我的戰爭是在TomEE正確的上下文根「/對myApp」下部署精細,這樣我就可以去http://localhost:8080/myApp的Tomcat/TomEE添加「/本地主機」到servletContext.getResource(「myStaticFile」)

我有一些靜態文件在: /myApp/WEB-INF/files

從看爆炸戰爭的文件肯定是存在的。我的問題是,當在代碼中,我已經寫了servletContext.getResource("/WEB-INF/files/MyFile.json")我正在一個錯誤文件找不到,因爲它出現的實際路徑在日誌是: /localhost/myApp/WEB-INF/files/MyFile.json

這段代碼實際上是工作,當我在一個有應用常規Tomcat服務器,Google App Engine甚至WebSphere 7.在TomEE中,我不是在webapps下但是在wtpwebapps下部署應用程序。我已經完成了對上下文配置的搜索,但其中大部分涉及使應用程序具有「」的上下文根(使其成爲根應用程序)。

我可以編寫一些代碼來刪除URL的「/ localhost」部分,但爲什麼它被放置在那裏?

回答

2

這看起來像Tomcat的內部JNDI URL之一,其採用以下形式:

jndi:/hostname/contextPath/pathInWebApp 

看起來你已經找到了TomEE錯誤。

+0

是的,我注意到'jndi;'部分添加到網址,但認爲這是正常的。請介紹一下爲什麼這是一個錯誤,以便我能理解發生了什麼? – Justin

+0

當您調用ServletContext.getResource()時,Tomcat會返回一個URL。 Tomcat使用自定義的jndi方案,因爲資源實現被寫入到JNDI API中,所以有一個標準的API可以用來創建他們自己的實現。 Tomcat附帶了WAR和目錄的實現。自定義實現從來沒有真正發生過,但基於JNDI的方法一直保留到Tomcat 8被替換之前。無論如何,Tomcat有一個JNDI URL的自定義處理程序,它看起來像TomEE並不完全正確。我不確定爲什麼,但那是我開始尋找的地方。 –

+0

好的,謝謝Mark! – Justin

0

我有同樣的問題,試圖訪問WEB-INF文件夾內的log4j.properties文件。它在Tomcat 8的本地tomcat中工作,但在運行tomcat 7的生產服務器上發生FileNotFoundException失敗。所以它不是TomEE。我結束了這樣做,使其工作:

String filePath = context.getRealPath("/") + "/WEB-INF/config/log4j.properties"; 

這給了我完整的路徑。在我的情況下,它是

/home/tomcat/tomcat7/webapps/MY-APPLICATION