Развертывание Spring Boot WAR

Как я могу контролировать в своем загрузочном приложении Spring 2.1.4 (упакованном как WAR), создаю ли я веб-приложение сервлета 3.1 или 4.0. Обычно при использовании дескриптора веб-приложения web.xml атрибуты в веб-приложении сообщают об используемой версии спецификации. В приложении Spring WebApplicationInitializer без web.xml (как в моем случае) такой рекламы нет.

Нужно ли просто использовать только функции сервлета 3.1, развернуть их в контейнере и надеяться, что это сработает?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Файл web.xml является необязательным, поскольку в Servlet 3 и Java EE 6 были введены такие аннотации, как @WebServlet, @WebFilter, @WebListener.

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

Как контейнер узнает, использует ли WAR-файл без web.xml возможности, которые его реализация не поддерживает? Например, если контейнер совместим с версией 3.1, обнаружит ли он, что WAR включает в себя функции 4.0, только тогда, когда произойдет сбой во время выполнения? Если это так, аннотацию в спецификации следует обновить, чтобы объявить спецификацию, которую требует файл WAR, точно так же, как в настоящее время это делает файл web.xml.

mario 13.05.2019 16:42

После более чем года публикации этого вопроса я обнаружил, что maven делает такое определение по наличию определенного API, объявленного как зависимость. Например, если у вас есть зависимость javax.servlet:javax.servlet-api:4.0.1 в вашем файле Pom, maven примет контейнер сервлета 4.0. Я считаю, что Spring boot не поддерживает это, но я думаю, что должен. Кстати, плагин M2eclipse также работает таким же образом.

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