Разделение общего кода и файла 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>
Смотрите также:
- Структура для нескольких проектов JSF с общим кодом (в случае, если вы используете JSF)
Если вы разворачиваете свои приложения на Glassfish, вы можете поместить свою общую конфигурацию в default-web.xml
файл под domain-dir\config\
место нахождения.
Обычно веб-серверы имеют функцию для определения файла web.xml по умолчанию, который соответствует вашим требованиям. Я бы предложил изучить эту опцию для веб-сервера, который вы используете.