Сервлеты: где искать файлы web.xml? Как объединяются несколько файлов web.xml?

Из спецификации Servlet 3 я знаю, что web.xml ищется в каталоге WEB-INF/. Однако я считаю, что есть и другие файлы web.xml. Например, Tomcat имеет файл web.xml под $CATALINA_BASE/conf/. Я думаю, что можно также положить файл web.xml под $CATALINA_HOME/conf/.

Правильно ли я понимаю, что файлов web.xml может быть несколько? Если да, то в каких местах они могут находиться, в каком порядке они обрабатываются и какова семантика их «объединения»? (В спецификации сервлета говорится об объединении web-fragment.xml файлов, но я предполагаю, что это отдельная вещь.)


person jameshfisher    schedule 10.06.2014    source источник


Ответы (1)


Есть две разные стороны вашего вопроса.

Собственный файл web.xml Tomcat

Спецификация сервлета позволяет контейнеру (здесь Tomcat) определять некоторые компоненты по умолчанию (JSP, сервлет по умолчанию...). Как вы видели, Tomcat предоставляет для этого файл web.xml по умолчанию (и только один, в $CATALINA_BASE/conf/web.xml). Этот web.xml позволяет Tomcat настраивать среди прочего:

  1. Сервлет по умолчанию (который обслуживает файлы напрямую)
  2. Сервлет jsp для компиляции и выполнения файлов jsp (и jspx).
  3. Отличия отображения пантомимы

Web.xml Tomcat всегда анализируется перед файлом в приложении. Таким образом, любое приложение может переопределить значения, определенные tomcat.

Итак, чтобы ответить на ваш вопрос: в Tomcat есть один файл web.xml, который применяется ко всем веб-приложениям (в каталоге $CATALINA_BASE/conf) и собственный файл web.xml веб-приложения.

веб-фрагмент.xml

Начиная с версии 3.0 спецификации сервлета , файл web.xml может быть комбинацией файла WEB-INF/web.xml и числа META-INF/web-fragment.xml, которые контейнер может найти в пути к классам веб-приложения (WEB-INF/classes или WEB-INF/lib).

Можно определить порядок, в котором анализируются эти веб-фрагменты.

И Tomcat может зарегистрировать полученный файл web.xml с атрибутом logEffectiveWebXml в контексте (см. документ)

person Cédric Couralet    schedule 10.06.2014