Определение параметров контекста сервлета Tomcat

Сценарий:

Файл foo.war содержит значение по умолчанию для параметра init fooParam=1.

Это определено в foo.war!WEB_INF/web.xml который содержит:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <context-param>
      <param-name>fooParam</param-name>
      <param-value>1</param-value>
      <description>
        my parameter "fooParam"
      </description>
    </context-param>

    ...

Хорошо, теперь я хочу переопределить его в файле конфигурации в каталоге Tomcat {$CATALINA_HOME}/conf/. Где / как я могу это сделать???

2 ответа

Решение

Согласно документации элемента Context:

Параметры контекста

Вы можете настроить именованные значения, которые будут видны веб-приложению в качестве параметров инициализации контекста сервлета, вложив <Parameter> элементы внутри этого элемента. Например, вы можете создать параметр инициализации следующим образом:

<Context ...>
  ...
  <Parameter name="companyName" value="My Company, Incorporated"
         override="false"/>
  ...
</Context>

Это эквивалентно включению следующего элемента в дескриптор развертывания веб-приложения (/WEB-INF/web.xml):

<context-param>
  <param-name>companyName</param-name>
  <param-value>My Company, Incorporated</param-value>
</context-param>

но не требует модификации дескриптора развертывания для настройки этого значения.

Действительные атрибуты для <Parameter> Элемент выглядит следующим образом:

...

О override атрибут <Parameter> В документации сказано:

Установите это в false если вы не хотите <context-param> для того же имени параметра, найденного в дескрипторе развертывания веб-приложения, чтобы переопределить значение, указанное здесь. По умолчанию переопределения разрешены.

Установка в false должна помочь. Это была часть "как".


Для части "где" прочитайте ссылку на введение Контейнер Контекста:

Для Tomcat 6, в отличие от Tomcat 4.x, НЕ рекомендуется размещать <Context> элементы непосредственно в server.xml файл. Это потому, что это делает изменение конфигурации контекста более инвазивным, так как основной conf/server.xml файл не может быть перезагружен без перезапуска Tomcat.

Элементы контекста могут быть явно определены:

  • в $CATALINA_BASE/conf/context.xml file: информация об элементе Context будет загружена всеми веб-приложениями.
  • в $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default file: информация об элементе Context будет загружена всеми веб-приложениями этого хоста.
  • В отдельных файлах (с расширением ".xml") в $CATALINA_BASE/conf/[enginename]/[hostname]/ каталог. Имя файла (без расширения.xml) будет использоваться в качестве пути к контексту. Многоуровневые контекстные пути могут быть определены с использованием #, например foo#bar.xml для контекстного пути /foo/bar, Веб-приложение по умолчанию может быть определено с помощью файла с именем ROOT.xml.
  • Только если контекстный файл не существует для приложения в $CATALINA_BASE/conf/[enginename]/[hostname]/ в отдельном файле на /META-INF/context.xml внутри файлов приложения. Если веб-приложение упаковано как WAR, тогда /META-INF/context.xml будет скопирован в $CATALINA_BASE/conf/[enginename]/[hostname]/ и переименован в соответствии с контекстным путем приложения. Как только этот файл существует, он не будет заменен, если новая WAR с более новой /META-INF/context.xml размещается в базе приложения хоста.
  • Внутри хоста элемент в основном conf/server.xml,

За исключением server.xml файлы, которые определяют элементы контекста, могут определять только один элемент контекста.

Argh! Я думал, что спросил это раньше. Иногда очень трудно искать на этом сайте.

где / как настроить конфигурационные ресурсы для файлов Tomcat .war

Другие вопросы по тегам