Как я могу получить имя текущего веб-приложения в Java EE? - PullRequest
7 голосов
/ 18 января 2010

Как я могу получить название текущего веб-приложения в Java EE?

Мне вполне комфортно с автономной Java, но Java EE для меня новинка.Я пишу некоторый пользовательский код для подключения к стороннему пакету отчетов Java EE.У меня есть несколько экземпляров, развернутых на одном и том же сервере Tomcat, поэтому у меня есть что-то вроде:

C:\
+-- tomcat6
    +-- webapps
        +-- app1
        +-- app2

Поэтому, когда пользователь переходит к, скажем, http://example.com/app1/viewReport, Я хочу иметь возможность получить "app1" .(И не разбирая URL, желательно.)

Кроме того, если бы был способ получить корень app1 (в данном примере, C: \ tomcat6 \ webapps \ app1), это тоже было бы здорово.

Ответы [ 2 ]

11 голосов
/ 18 января 2010

1. Получение "имени"

Это называется контекстным путем. Если ваш код выполняется в контексте запроса веб-приложения, вы можете получить его, позвонив по номеру HttpServletRequest#getContextPath().

2. Доступ к физическому / реальному ресурсу

Если вы пытаетесь получить доступ к содержимому файла / ресурса в своем веб-приложении, вам лучше всего использовать один из:

Также возможно получить физический путь на диске файла / ресурса, учитывая путь относительно веб-приложения, используя ServletContext#getRealPath(String), но это не надежно (не всегда работает, если например, вы развертываете свое веб-приложение как WAR).

3. Доступ к ресурсам пути к классам

Согласно вашему комментарию, вы пытались получить доступ к ресурсу в каталоге / WEB-INF / classes. Поскольку в WEB-INF / classes / * находятся определенные классы веб-приложений, вы можете просто получить к ним доступ, как если бы вы обращались к любому ресурсу classpath в приложении Java SE. Опять же, если ваш код выполняется в контексте веб-приложения, вы можете просто использовать следующее:

В вашем случае вы, вероятно, захотите использовать последнее, а затем загрузить файл свойств через Properties # load (InputStream).

Что-то вроде:

Properties props = new Properties();
props.load(getClass().getResourceAsStream("/reportCustom.properties"));
2 голосов
/ 18 января 2010

что я пытаюсь сделать, это загрузить файл свойств в webapps / myapp / WEB-INF / classes / reportCustom.properties

Поскольку файл находится в classesкаталог, вы можете загрузить его, используя ClassLoader (обычный механизм Java для загрузки файлов по пути к классам).Вероятно, лучше всего использовать context ClassLoader .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...