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