Подтвердить что ты не робот

Ссылка на переменные окружения в web.xml

Я предварительно упаковываю веб-приложение JSP, которое опирается на некоторые параметры пути к файлу, найденные в web.xml. Эти параметры неизвестны во время упаковки, поскольку они ссылаются на путь, который клиент установит при развертывании всего приложения (из которого веб-приложение является интерфейсом управления).

Кажется, что самый простой способ избежать токенов и модификаций файлов в моем установщике script - попросить пользователя установить место установки, установить это местоположение как переменную среды (например, JAVA_HOME) и всегда иметь web.xml ссылку на эту переменную.

Есть ли способ ссылаться на значение переменной среды из web.xml? Поиски Google ведут к J2EE-методу переменных среды SETTING из файлов XML файла ejb. Это не то, что я ищу.

4b9b3361

Ответ 1

Вы можете использовать подстановку переменных Ant -style в любом из файлов конфигурации tomcat xml, например:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>${foo}</url-pattern>
</servlet-mapping>

Где foo является Java System Property (sysprop).

Вы не можете использовать Переменные OS Environment... (envvars) напрямую, я думаю...

Чтобы использовать envvars, вы можете поместить

set "CATALINA_OPTS=-DsomeJavaSysProp=%SOME_OS_ENVVAR%"

в bin/setenv.bat (или аналогично в bin/setenv.sh для * nix). Возможно, вам понадобится создать этот файл. Tomcat запустит этот файл при запуске.

Поскольку CATALINA_OPTS является envvar (в отличие от опции командной строки), он не должен быть видимым другими пользователями в системе (за исключением древних Unix), хотя я не тестировал это.

http://tomcat.apache.org/tomcat-7.0-doc/config/

Если вы используете Spring, вы можете создать <context:property-placeholder/> bean, а затем напрямую использовать envvars или sysprops в Spring файлах конфигурации XML (хотя не web.xml).

Ответ 2

Я думаю, что вы не хотите использовать переменные среды (которые, я думаю, недоступны из web.xml), но записи в среде [1, 2]. так:

<env-entry>
    <env-entry-name>Bla/SomeFilePath</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>/opt/bla</env-entry-value>
</env-entry>

вы можете использовать SomeFilePath, например:

InitialContext ic = new InitialContext();
String s = (String) ic.lookup("java:comp/env/ejb/Bla/SomeFilePath");

Ответ 3

В принципе, вы этого не делаете. web.xml должен содержать значения по умолчанию для вещей, да, но вы должны переопределить их при фактическом развертывании. Если вы развертываете Tomcat, вы делаете это, введя соответствующие записи в context.xml, которые вы используете для развертывания. Например:

<Context path="/app">
    <!-- For things described by webapp parameters -->
    <Parameter name="foobar" value="grill" />

    <!-- For things described by environment entries -->
    <Environment name="Bla/SomeFilePath" type="java.lang.String"
            value="/opt/bla" />
</Context>

Другие контейнеры будут иметь свои собственные механизмы для этого. Вам придется искать свою документацию (или сделать запрос на помощь более сосредоточенным).

Ответ 4

Я не совсем понимаю ваши ограничения, но, возможно, вы можете это сделать (я предполагаю, что это init-param, который вы пытаетесь настроить):

1) Оставьте переменную неопределенной в web.xml
2) Создайте ServletContextListener и добавьте это в свое приложение
3) Слушайте инициализацию своего сервлета 4) Установите параметр init для сервлета в этой точке

Я попробовал это с аналогичной проблемой, но мне это не удалось, потому что оказалось, что 3-й сторонний сервлет (который я также не хотел связывать) не вел себя как сервлет вообще, поэтому контекст никогда не инициализировался. Но, возможно, здесь есть шанс...

Ответ 5

Вы должны ввести env-entry в порядок:

<env-entry>
  <env-entry-name>maxAmount</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>aString</env-entry-value>
</env-entry>

Иначе у вас будет ошибка проверки на web.xml

ref: https://community.oracle.com/thread/840452?tstart=0

Ответ 6

К переменным окружения можно обращаться в xml файлах следующим образом:

${env.ENVIRONMENT_VARIABLE_NAME}

Очевидно, что могут возникнуть проблемы с настройками учетной записи пользователя и проблемами доступа, но я попытался с системными переменными, и он работает!