Разделение общего кода и web.xml из проекта WAR в общий проект JAR

У меня есть разные webapps, которые разделяют большую часть конфигурации web.xml. Например, способ отображения некоторых сервлетов идентичен для всех приложений, но некоторые веб-приложения имеют настраиваемые сервлеты или дополнительный фильтр или общий управляемый beans.

Каждый webapp - это другой проект в моей среде IDE. Я хотел бы реорганизовать общую часть моего web.xml на "общий" проект, и пусть весь веб-приложение, специфичное для приложения, расширяет "общий" web.xml. Есть ли возможность сделать это?

Ответ 1

Да, вы можете. Предполагая, что Eclipse (ваша история вопроса подтверждает, что вы его используете), просто создайте "Проект веб-фрагментов":

enter image description here

И связать его с основным проектом в мастере:

enter image description here

Вы можете при необходимости (повторно) настроить его в свойстве "Объединение развертывания" основного веб-проекта (или любом другом способе конфигурирования сборки таким образом, чтобы она в конечном итоге заканчивалась как JAR в /WEB-INF/lib основного веб-проекта).

enter image description here

В основном это проект Java со следующей структурой папок:

CommonWebProject
 |-- com.example... (you can put e.g. @WebServlet classes here)
 |
 |-- META-INF
 |    |-- resources (you can put shared web resources here)
 |    |    |-- common.css
 |    |    |-- common.js
 |    |    |-- template.jsp
 |    |    :
 |    |
 |    |-- beans.xml
 |    |-- web-fragment.xml
 |    `-- MANIFEST.MF
 :

Любое содержимое в папке /META-INF/resources разрешено так же, как webcontent WAR (мой Eclipse Luna SR1 не создавал папку /resources, поэтому вам нужно вручную ее создать). И, что важно, любые ресурсы (включая классы!) С таким же именем уже в WAR будут иметь приоритет загрузки по сравнению с JAR, поэтому вы могли бы при необходимости "переопределить" общий ресурс JAR из WAR таким образом.

Обратите внимание, что файл web-fragment.xml должен быть назван точно таким же образом и, следовательно, не web.xml. IDE должна просто автогенерировать одну для вас, но для полноты совместимость с Servlet 3.0 выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<web-fragment
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
    version="3.0"
>

    <!-- Put shared web.xml config here. -->

</web-fragment>

См. также:

Ответ 2

Если вы размещаете приложения на стеклянную рыбку, вы можете разместить свою общую конфигурацию в default-web.xml файле в domain-dir\config\.

Ответ 3

Обычно веб-серверы имеют возможность определять по умолчанию web.xml, который удовлетворяет вашим требованиям. Я бы предложил изучить этот вариант для используемого веб-сервера.