Tomcat/TomEE, добавив "/localhost" в servletContext.getResource("myStaticFile")

Моя WAR развертывается нормально в TomEE под правильным контекстным корнем "/myApp", чтобы я мог перейти к http://localhost:8080/myApp

У меня есть несколько статических файлов в: /myApp/WEB-INF/files

При просмотре взорванной WAR файлы определенно есть. Моя проблема, когда в коде я написал 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 ответа

Решение

Это похоже на один из внутренних jndi-адресов Tomcat, который принимает форму:

jndi:/hostname/contextPath/pathInWebApp

Похоже, вы нашли ошибку TomEE.

У меня была такая же проблема, когда я пытался получить доступ к файлу log4j.properties внутри папки WEB-INF. Он работал в моем локальном tomcat, который является tomcat 8, но потерпел неудачу с FileNotFoundException на производственном сервере, который запускает tomcat 7. Так что это не TomEE. Я закончил тем, что сделал это, чтобы заставить это работать:

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

Это дает мне полный путь. В моем случае это было

/home/tomcat/tomcat7/webapps/MY-APPLICATION
Другие вопросы по тегам