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

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

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

3 ответа

Решение

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

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

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

Это в основном 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 папка разрешается так же, как веб-содержимое 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>

Смотрите также:

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

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

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