Как развернуть файл WAR в Tomcat
Apache Tomcat — один из самых популярных веб-серверов в сообществе Java. Он поставляется какservlet container, способный обслуживать веб-архивы с расширением WAR.
It provides a management dashboard, из которого вы можете развернуть новое веб-приложение или отменить развертывание существующего без перезапуска контейнера. Это особенно полезно в производственных условиях.
В этой статье мы сделаем краткий обзор Tomcat, а затем рассмотрим различные подходы к развертыванию файла WAR.
Дальнейшее чтение:
Введение в Apache Tomcat
Краткое практическое руководство по установке и настройке Apache Tomcat.
Разверните WAR-файл Spring Boot на сервере Tomcat
Узнайте, как настроить приложение Spring Boot для развертывания на сервере Tomcat.
Изменение порта Tomcat HTTP на 80
Узнайте, как настроить HTTP-сервер Apache Tomcat для работы на порте 80.
2. Структура Tomcat
Прежде чем мы начнем, мы должны ознакомиться с некоторой терминологией и переменными среды.
2.1. Переменные среды
Если вы работали с Tomcat раньше, они будут вам очень знакомы:
$CATALINA_HOME
Эта переменная указывает на каталог, где установлен наш сервер.
$CATALINA_BASE
Эта переменная указывает на каталог конкретного экземпляра Tomcat, у вас может быть установлено несколько экземпляров. Если эта переменная не задана явно, ей будет присвоено то же значение, что и$CATALINA_HOME.
Веб-приложения развертываются в каталоге$CATALINA_HOME\webapps.
2.2. терминология
Document root. Относится к каталогу верхнего уровня веб-приложения, где все ресурсы приложения расположены в виде файлов JSP, страниц HTML, классов Java и изображений.
Context path. Относится к расположению, которое относится к адресу сервера и представляет имя веб-приложения.
Например, если наше веб-приложение помещено в каталог$CATALINA_HOME\webapps\myapp, к нему будет обращаться URLhttp://localhost/myapp, а его контекстный путь будет/myapp.
WAR. Расширение файла, который упаковывает иерархию каталогов веб-приложения в формате ZIP и является сокращением от Web Archive. Веб-приложения Java обычно упаковываются как файлы WAR для развертывания. Эти файлы могут быть созданы в командной строке или с помощью IDE, например Eclipse.
После развертывания нашего файла WAR Tomcat распаковывает его и сохраняет все файлы проекта в каталогеwebapps в новом каталоге, названном в честь проекта.
3. Настройка Tomcat
Веб-сервер Tomcat Apache — это бесплатное программное обеспечение, которое может бытьdownloaded from their website. Требуется, чтобы на компьютере пользователя был доступен JDK и чтобы переменная средыJAVA_HOME была установлена правильно.
3.1. Запустить Tomcat
Мы можем запустить сервер Tomcat, просто запустив сценарийstartup, расположенный в$CATALINA_HOMEin\startup. В каждой установке есть.bat и.sh.
Выберите соответствующую опцию в зависимости от того, используете ли вы операционную систему Windows или Unix.
3.2. Настроить роли
На этапе развертывания у нас будет несколько вариантов, один из которых — использовать панель управления Tomcat. Чтобы получить доступ к этой панели, у нас должен быть пользователь администратора, настроенный с соответствующими ролями.
Чтобы иметь доступ к панели управления, пользователю с правами администратора требуется рольmanager-gui. Позже нам нужно будет развернуть файл WAR с помощью Maven, для этого нам также понадобится рольmanager-script.
Сделаем эти изменения в$CATALINA_HOME\conf omcat-users:
Более подробную информацию о различных ролях Tomcat можно найти, выполнивthis official link.
3.3. Установить права доступа к каталогу
Наконец, убедитесь, что в каталоге установки Tomcat есть разрешение на чтение / запись.
3.4. Тестовая установка
Чтобы проверить правильность настройки Tomcat, запустите сценарий запуска (startup.bat /startup.sh), если на консоли не отображаются ошибки, мы можем дважды проверить, посетивhttp://localhost:8080.
Если вы видите целевую страницу Tomcat, значит, мы правильно установили сервер.
3.5. Разрешить конфликт портов
По умолчанию Tomcat настроен на прослушивание соединений на порту8080. Если есть другое приложение, которое уже связано с этим портом, консоль запуска сообщит нам.
Чтобы изменить порт, мы можем отредактировать файл конфигурации сервераserver.xml, расположенный в$CATALINA_HOME\conf\server.xml.. По умолчанию конфигурация коннектора выглядит следующим образом:
Например, если мы хотим изменить наш порт на8081, то нам нужно будет изменить атрибут порта коннектора следующим образом:
Иногда выбранный нами порт не открывается по умолчанию, в этом случае нам потребуется открыть этот порт с помощью соответствующих команд в ядре Unix или создать соответствующие правила брандмауэра в Windows, как это сделать выходит за рамки эта статья.
4. Развернуть из Maven
Если мы хотим использовать Maven для развертывания наших веб-архивов, мы должны настроить Tomcat как сервер в файлеsettings.xml Maven.
Есть два места, где можно найти файлsettings.xml:
Найдя его, добавьте Tomcat следующим образом:
Теперь нам нужно будет создать базовое веб-приложение от Maven для тестирования развертывания. Давайте перейдем туда, где мы хотели бы создать приложение.
Запустите эту команду на консоли, чтобы создать новое веб-приложение Java:
Это создаст полное веб-приложение в каталогеtomcat-war-deployment, которое, если мы развернем сейчас и получим доступ через браузер, напечатаетhello world!.
Но прежде чем сделать это, нам нужно внести одно изменение, чтобы включить развертывание Maven. Так что перейдите кpom.xml и добавьте этот плагин:
Обратите внимание, что мы используем плагин Tomcat 7, потому что он работает для версий 7 и 8 без каких-либо особых изменений.
Конфигурацияurl — это URL-адрес, на который мы отправляем наше развертывание, Tomcat будет знать, что с ним делать. Элементserver — это имя экземпляра сервера, который распознает Maven. Наконец, элементpath определяетcontext path нашего развертывания.
Это означает, что в случае успешного развертывания мы получим доступ к веб-приложению, нажавhttp://localhost:8080/myapp.
Теперь мы можем запустить следующие команды из Maven.
Чтобы развернуть веб-приложение:
Чтобы отменить это:
Для повторного развертывания после внесения изменений:
5. Развернуть с помощью плагина Cargo
Cargo — это универсальная библиотека, которая позволяет нам управлять различными типами контейнеров приложений стандартным способом.
5.1. Настройка развертывания Cargo
В этом разделе мы рассмотрим, как использовать плагин Cargo Maven для развертывания WAR в Tomcat, в этом случае мы развернем его в экземпляре версии 7.
Чтобы получить полный контроль над всем процессом, мы начнем с нуля, создав новое веб-приложение на Java из командной строки:
Это создаст полное веб-приложение Java в каталогеcargo-deploy. Если мы создадим, развернем и загрузим это приложение как есть, оно напечатаетHello World! в браузере.
В отличие от плагина Tomcat7 Maven, плагин Cargo Maven требует наличия этого файла.
Поскольку наше веб-приложение не содержит сервлетов, наш файлweb.xml будет очень простым. Итак, перейдите в папкуWEB-INF нашего недавно созданного проекта и создайте файлweb.xml со следующим содержимым:
Чтобы Maven мог распознавать команды Cargo без ввода полного имени, нам нужно добавить плагин Cargo Maven в группу плагинов в Mavensettings.xml.
Как непосредственный дочерний элемент корневого элемента<settings></settings>, добавьте это:
5.2. Локальное развертывание
В этом подразделе мы отредактируем нашpom.xml в соответствии с нашими новыми требованиями к развертыванию.
Добавьте плагин следующим образом:
Последняя версия на момент написания —1.5.0. Однако последнюю версию всегда можно найтиhere.
Обратите внимание, что мы явно определяем упаковку как WAR, без этого наша сборка не будет выполнена. В разделе плагинов мы добавим плагин cargo maven2. Дополнительноwe add a configuration section where we tell Maven that we are using a Tomcat container and also an existing installation.
Устанавливая тип контейнера наinstalled, мы сообщаем Maven, что у нас есть экземпляр, установленный на машине, и предоставляем абсолютный URL-адрес для этой установки.
Устанавливая тип конфигурации наexisting, мы сообщаем Tomcat, что у нас есть существующая настройка, которую мы используем, и дальнейшая настройка не требуется.
Альтернативой может быть указание Cargo загрузить и настроить версию, указанную с помощью URL. Однако наше внимание сосредоточено на развертывании WAR.
Стоит отметить, что независимо от того, используем ли мы Maven 2.x или Maven 3.x, плагин Cargo maven2 работает для обоих.
Теперь мы можем установить наше приложение, выполнив:
и развернуть его, выполнив:
Если все пойдет хорошо, мы сможем запустить наше веб-приложение, загрузивhttp://localhost:8080/cargo-deploy.
5.3. Удаленное развертывание
Чтобы выполнить удаленное развертывание, нам нужно только изменить раздел конфигурации нашегоpom.xml. Удаленное развертывание означает, что у нас нет локальной установки Tomcat, но мы имеем доступ к панели управления менеджера на удаленном сервере.
Итак, давайте изменимpom.xml так, чтобы раздел конфигурации выглядел так:
На этот раз мы меняем тип контейнера сinstalled наremote и тип конфигурации сexisting наruntime. Наконец, мы добавляем в конфигурацию свойства аутентификации и удаленного URL.
Убедитесь, что роли и пользователи уже присутствуют в$CATALINA_HOME/conf/tomcat-users.xml, как и раньше.
Если вы редактируете тот же проект для развертыванияremote, сначала отмените развертывание существующей WAR:
наконец, разверните его:
6. Развернуть из Eclipse
Eclipse позволяет нам встраивать серверы, чтобы добавить развертывание веб-проекта в обычный рабочий процесс, не отходя от IDE.
6.1. Вставить Tomcat в Eclipse
Мы можем встроить установку в eclipse, выбрав пункт менюwindow на панели задач, а затемpreferences из раскрывающегося списка.
На левой панели появившегося окна мы найдем древовидную сетку элементов предпочтений. Затем мы можем перейти кeclipse → servers или просто ввестиservers в строке поиска.
Затем мы выбираем установочный каталог, если он еще не открыт для нас, и выбираем загруженную нами версию Tomcat.
На правой стороне панели появится страница конфигурации, где мы выбираем опцию Включить, чтобы активировать эту версию сервера и перейти к папке установки.
Мы применяем изменения, и в следующий раз, когда мы откроем представление серверов из подменю Eclipsewindows → show view, будет присутствовать только что настроенный сервер, и мы сможем запускать, останавливать и развертывать на нем приложения.
6.2. Развертывание веб-приложения во встроенном Tomcat
Чтобы развернуть веб-приложение в Tomcat, оно должно существовать в нашей рабочей области.
Откройте представлениеservers изwindow → show view и найдите серверы. В открытом состоянии мы можем просто щелкнуть правой кнопкой мыши по настроенному нами серверу и выбратьadd deployment в появившемся контекстном меню.
В появившемся диалоговом окнеNew Deployment откройте раскрывающийся списокproject и выберите веб-проект.
Под полем со спискомProject есть разделDeploy Type, когда мы выбираемExploded Archive(development mode),our changes in the application will be synced live without having to redeploy, это лучший вариант во время разработки, поскольку он очень эффективен.
ВыборPackaged Archive(production mode) потребует от нас повторного развертывания каждый раз, когда мы вносим изменения и видим их в браузере. Это лучше всего для производства, но, тем не менее, Eclipse делает это одинаково легко.
6.3. Развертывание веб-приложения во внешнем расположении
Обычно мы выбираем развертывание WAR через Eclipse, чтобы облегчить отладку. Может наступить время, когда мы захотим развернуть его не в том месте, которое используется встроенными серверами Eclipse. Наиболее распространенный случай, когда наш производственный сервер подключен к сети, и мы хотим обновить веб-приложение.
Мы можем обойти эту процедуру, развернув в производственном режиме, отметивDeploy Location в диалоговом окнеNew Deployment и выбрав оттуда WAR.
Во время развертывания вместо выбора встроенного сервера мы можем выбрать параметр<Externally Launched> в представленииservers рядом со списком встроенных серверов. Мы переходим в каталогwebapps внешней установки Tomcat.
7. Развернуть из IntelliJ IDEA
Чтобы развернуть веб-приложение в Tomcat, оно должно существовать и уже было загружено и установлено.
7.1. Локальная конфигурация
Откройте менюRun и щелкните параметрыEdit Configurations.
На панели слева найдитеTomcat Server, если его там нет, щелкните значок + в меню, найдитеTomcat и выберитеLocal. В поле имени введитеTomcat 7/8 (в зависимости от вашей версии).
Нажмите кнопкуConfigure… и в полеTomcat Home перейдите к домашнему местоположению вашей установки и выберите его.
При желании установите для страницыStartup значениеhttp://localhost:8080/ иHTTP port: 8080, измените порт соответствующим образом.
Перейдите на вкладкуDeployment и нажмите на символ +, выберите артефакт, который вы хотите добавить на сервер, и нажмите OK.
7.2. Удаленная настройка
Следуйте тем же инструкциям, что и для локальных конфигураций Tomcat, но на вкладке сервера необходимо указать удаленное местоположение установки.
8. Развернуть путем копирования архива
Мы видели, как экспортировать WAR из Eclipse. Одна из вещей, которую мы можем сделать, — это развернуть его, просто поместив его в каталог$CATALINA_HOME\webapps любого экземпляра Tomcat. Если экземпляр запущен, развертывание начнется немедленно, когда Tomcat распакует архив и настроит его контекстный путь.
Если экземпляр не запущен, сервер развернет проект при следующем запуске.
9. Развернуть из Tomcat Manager
Предполагая, что у нас уже есть файл WAR, и мы хотели бы развернуть его с помощью панели управления. Вы можете получить доступ к панели управления менеджером, посетив:http://localhost:8080/manager.
На панели управления есть пять различных разделов:Manager,Applications,Deploy,Diagnostics иServer Information.. Если вы перейдете в разделDeploy, вы найдет два подраздела.
9.1. Развернуть каталог или файл WAR, расположенный на сервере
Если файл WAR находится на сервере, на котором запущен экземпляр Tomcat, то мы можем заполнить обязательное полеContext Path, которому предшествует косая черта «/».
Допустим, мы хотим, чтобы к нашему веб-приложению можно было обращаться из браузера с URL-адресомhttp://localhost:8080/myapp, тогда в нашем поле пути контекста будет/myapp.
Мы пропускаем полеXML Configuration file URL и переходим к полюWAR or Directory URL. Здесь мы вводим абсолютный URL к файлу Web ARchive, как он появляется на нашем сервере. Допустим, наш файл находится вC:/apps/myapp.war, затем мы вводим это местоположение. Не забывайте расширение WAR.
После этого мы можем нажать кнопкуdeploy. Страница перезагрузится, и мы должны увидеть сообщение:
в верхней части страницы.
Кроме того, наше приложение также должно появиться в разделеApplications страницы.
9.2. Файл WAR для развертывания
Просто нажмите кнопкуchoose file, перейдите к месту расположения файла WAR и выберите его, затем нажмите кнопкуdeploy.
В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам, что развертывание прошло успешно, с сообщением, подобным следующему:
How do I run a class in a WAR from the command line?
I have a Java class which has a main and I used to run as a standalone app from the command line e.g.
I needed to repackage the code to run under apache and all my code, including the entry point class from the old jar, has ended up in a WAR file for easy deplyment into the web server.
However, I still want to be able to run it from the command line and the code has not changed and is all in there, I just can’t figure out how to get it to run.
Here’s what I tried.
I presumed the WAR was just like a jar, so
That failed saying there was no main class defined in the manifest.
I manually added a manifest to the war and tried again, with the same effect.
I noticed that in my war I had a folder called META-INF containing a manifest.mf, so I added a line to that declaring my main class as I would to a normal manifest.
This gave a noClassDefFoundError mypackage.MyEntryPointClass , which is progress of a sort. That led me to believe that it was just a path issue, so I tried
I now get the same error, but with a stack trace.
I’ve googled for a bit but can’t find anything which answers my question, and I read a couple of other questions here which are slightly different, so I thought I would post.
Сборка war-проекта
Фактически jar-библиотека – это просто zip архив, что напрямую следует из его имени: J ava Ar chive . Чаще всего он содержит просто четыре вещи:
- скомпилированные классы;
- ресурсы: properties-файлы и тому подобное;
- манифест MANIFEST.MF;
- другие jar-библиотеки (редко).
Типичная структура такого архива имеет вид:
Теперь давай рассмотрим типичный war-файл. Кстати, war не от слова война, а от W eb Ar chive . Структура war-файла обычно посложнее. Чаще всего он состоит из двух частей:
- Java-часть
- скомпилированные классы
- ресурсы для java-классов: properties-файлы и тому подобное
- другие jar-библиотеки (часто)
- манифест MANIFEST.MF
- web-xml – дескриптор развертывания веб-сервиса
- jsp-сервелеты
- статические веб-ресурсы: HTML, CSS, JS-файлы
Пример типичного war-файла:
Важно! jar-файл может запустить просто java-машина, для запуска же war-файла его нужно загрузить на веб-сервер. Самостоятельно он не запускается.
Плагин создания war-файла с помощью maven-war-plugin
Давайте представим, что у нас есть простой веб-проект. Пусть проект задается такой структурой файлов, как нам его собрать?
Во-первых, нам нужно указать Maven, собрать все это в виде war-файла , для этого есть тег <package> , пример:
Во-вторых, нам нужно подключить плагин maven-war-plugin . Пример:
Тут мы просто задаем плагин, который в будущем можно конфигурировать. Также с помощью тега webappDirectory переопределяем директорию, в которую будет развернут проект. Сейчас расскажу подробнее, о чем идет речь.
Плагину можно задать два режима сборки (два вида goal):
- war:war
- war:exploded
В первом случает итоговый war-файл просто кладется в папку target и имеет имя <artifactId>-<version>.war .
Но можно “попросить” плагин, чтобы в итоговую папку содержимое war-файла было помещено в том состоянии, в котором оно будет распаковано веб-сервером у себя внутри. Для этого используется goal war:exploded .
Второй подход используется часто, если ты запускаешь или дебажишь проект прямо из Intellij IDEA.
Кстати, тег webappDirectory в примере выше позволяет переопределить директорию куда будет распакован ваш war-файл при сборке в режиме war:exploded.
О других настройках плагина вы можете узнать из его официальной странички.
Сборка web-приложения на основе SpringBoot
Ну и хотелось бы разобрать какой-нибудь реальный пример сборки. Давай не мелочиться и рассмотрим это на примере приложения на основе SpringBoot.
Шаг первый. Создай пустой Maven web-проект с помощью IDEA.
Шаг второй. Добавь в его pom.xml зависимости от Spring.
Шаг третий. Создай класс com.javarush.spring.MainController . Его нужно разместить в папке src/main/java :
Тут описаны 3 вещи. Во-первых, аннотация @Controller указывает фреймворку SpringBoot, что этот класс будет использоваться для обслуживания входящих веб-запросов.
Во-вторых, аннотация @GetMapping , указывает, что наш метод будет вызываться для обслуживания GET-запроса на корневой URI — /
В-третьих, метод возвращает строку «index» . Это говорит фреймворку SpringBoot, что в качестве ответа нужно отдать содержимое файла index.html .
Шаг четвертый. Нужно добавить в проект файл index.html с таким содержимым:
Это не просто html. Перед тем, как его содержимое отдадут клиенту, оно будет модифицировано на сервере фреймворком Thymeleaf. В этот файл встроены специальные теги, которые позволяют библиотеке Thymeleaf обрабатывать и модифицировать содержимое страницы.
Красным отображены теги, которые будут обработаны библиотекой Thymeleaf, зеленым – стили CSS-библиотеки Bootstrap.
Шаг пятый. Задаем плагин в pom.xml:
Немного переоценил свои силы. Чтобы полностью разобрать простой пример, нужно много времени. Но ты можешь скачать полный код проекта из GitHub и попробовать разобраться в нем самостоятельно. Кстати, процентов 80% своего рабочего времени ты будешь делать именно это 🙂
Конвертация Spring Boot JAR приложения в WAR с Maven
В этом уроке освещается процесс конвертации исполяемого JAR приложения, которое было собрано с Spring Boot, в WAR файл, который вы можете запустить на любом стандартном контейнере сервлетов.
Что вы создадите
Вы возьмете простое Spring MVC приложение и соберете WAR файл, используя Spring Boot.
Что вам потребуется
- Примерно 15 минут свободного времени
- Любимый текстовый редактор или IDE и выше
- Gradle 1.11+ или Maven 3.0+
- Вы также можете импортировать код этого урока, а также просматривать web-страницы прямо из Spring Tool Suite (STS), собственно как и работать дальше из него.
Как проходить этот урок
Как и большинство уроков по Spring, вы можете начать с нуля и выполнять каждый шаг, либо пропустить базовые шаги, которые вам уже знакомы. В любом случае, вы в конечном итоге получите рабочий код.
Чтобы начать с нуля, перейдите в Настройка проекта.
- Загрузите и распакуйте архив с кодом этого урока, либо кнонируйте из репозитория с помощью Git: git clone https://github.com/spring-guides/gs-convert-jar-to-war-maven.git
- Перейдите в каталог gs-convert-jar-to-war-maven/initial
- Забегая вперед, создайте базовое web-приложение
Когда вы закончите, можете сравнить получившийся результат с образцом в gs-convert-jar-to-war-maven/complete .
Настройка проекта
Для начала вам необходимо настроить базовый скрипт сборки. Вы можете использовать любую систему сборки, которая вам нравится для сборки проетов Spring, но в этом уроке рассмотрим код для работы с Maven. Если вы не знакомы с Maven, ознакомьтесь с соответсвующим уроком Сборка Java-проекта с использованием Maven.
Создание структуры каталогов
В выбранном вами каталоге проекта создайте следующую структуру каталогов; к примеру, командой mkdir -p src/main/java/hello для *nix систем:
Spring Boot Maven plugin предоставляет множество удобных возможностей:
- Он собирает все jar’ы в classpath и собирает единое, исполняемое «über-jar», что делает более удобным выполнение и доставку вашего сервиса
- Он ищет public static void main() метод, как признак исполняемого класса
- Он предоставляет встроенное разрешение зависимостей, с определенными номерами версий для соответсвующих Spring Boot зависимостей. Вы можете переопределить на любые версии, какие захотите, но он будет по умолчанию для Boot выбранным набором версий
Создание базового web-приложения
Теперь, когда вы настроили проект, вы можете создать Spring MVC приложение. Вам оно необходимо для запуска встроенного в Spring Boot контейнера сервлетов. Затем измените его немного, чтобы собрать WAR файл, который вы сможете запустить на любом контейнере сервлетов 3.0.
Spring MVC позволяет вам быстро создавать контроллеры для вашего web-сайта.
Контроллер лаконичен и прост, но в нем происходит много чего интересного. Давайте подробнее его рассмотрим шаг за шагом.
Аннотация @Controller сигнализирует о том, что этот класс содержит web-адреса приложения.
Аннотация @RequestMapping гарантирует, что HTTP запросы к / приведут к выполнению метода index() .
Реализация метода возвращает строку index , название представления, которое необходимо отрендерить.
Web контроллер возвращает строку index когда кто-то делает GET / к вашему сайту. Spring Boot автоматически добавляет Thymeleaf бины в контекст приложения для конвертации в запрос шаблона Thymeleaf, расположенного в src/main/resources/templates/index.html .
Этот шаблон имеет несколько очень простых HTML элементов и не имеет Thymeleaf кода. Вы можете расширить его по мере необходимости.
Создание приложения исполняемым
Несмотря на то, что пакет этого сервиса может быть в составе web-приложения и WAR файлов, более простой подход, продемонстрированный ниже создает отдельное самостоятельное приложение. Вы упаковываете все в единый, исполняемый JAR-файл, который запускается через хорошо знакомый старый main() Java-метод. Попутно, вы используете поддержку Spring для встроенного Tomcat контейнера сервлетов как HTTP среду выполнения вместо развертывания на сторонний экземпляр.
Метод main() передает управление вспомогательному классу SpringApplication , предоставляя Application.class как аргумент его run() методу. Это говорит Spring о том, чтобы прочитать аннотацию метаданных из Application и управлять им как компонентом в Spring Application Context.
Аннотация @ComponentScan сообщает Spring о запуске рекурсивного поиска в пакете hello и потомках классов, отмеченных прямо или косвенно Spring аннотацией @Component . При этом гарантируется, что Spring найдет и зарегистрирует HelloController , потому что он отмечен @Controller , что в свою очередь является своего рода @Component аннотацией.
@EnableAutoConfiguration аннотация переключает на доступные по умолчанию настройки, основанные на содержимом вашего classpath. К примеру, т.к. приложение зависит от встраиваемой версии Tomcat(tomcat-embed-core.jar), то Tomcat сервер установлен и настроен по умолчанию от вашего имени. И также, т.к. приложение зависит от Spring MVC (spring-webmvc.jar), Spring MVC DispatcherServlet настроен и зарегистрирован за вас — web.xml не нужен! Автонастройка является мощным и гибким механизмом. Более подробно вы можете ознакомиться в API документации.
Теперь, чтобы ваш класс Application стал готовым, просто следуйте инструкциям системы сборки для создания единого и исполняемого jar файла. Это делает его легким в загрузке, версионировании и развертывании сервиса как приложения на всем протяжении цикла разработки в различных средах окружения.
Запуск сервиса
Запустите ваш сервис из командной строки:
Выходные данные отображены. Сервис должен быть поднят и запущен через несколько секунд. В вашем браузере перейдите по адресу http://localhost:8080. Вы должны увидеть текст «Hello, world!», отрендеренный шаблоном.
Создание WAR файла
Приложение, собранное вами на данном этапе настроено на генерацию JAR артефакта. Для переключения на WAR файл, вам необходимо добавить другой плагин в ваш pom.xml :
Если вы хотите разворачивать WAR файл внешнего контейнера, добавьте зависимость встроеннного контейнера как «provided»:
Ниже представлена новая версия pom.xml , которая включает эти изменения:
Теперь, когда вы запустите mvn clean package , WAR файл будет создан.
Инициализация сервлета
Ранее приложение содержало метод public static void main() , который запускался плагином spring-boot-maven-plugin, когда использовалась команда java -jar .
Используя конвертацию в WAR файл без XMl файлов, вам необходим другой сигнал сервлет контейнеру о том, как запускать приложение.
WebInitializer является чистым Java классом, который предоставляет альтернативу созданию web.xml . Он расширяет класс SpringServletInitializer . Это расширение предлагает множество конфигурируемых настроек путем переопределения методов. И только один метод configure() обязателен для переопределения.
configure() предоставляет средства для регистрации классов, которые необходимы для запуска приложения. Это то место, где вы передаете для обработки вашу Application конфигурацию. Запомните: Application содержит @ComponentScan , поэтому он будет находить web контроллеры автоматически.
Даже если public static void main() больше не нужен, вы можете оставить его код на месте.
Запуск WAR файла
Как только Application загрузится, он инициализирует Spring Boot для автоматического конфигурирования других бинов. в этом примере он добавляет Spring MVC и Thymeleaf бины. Но Spring Boot добавляет и другие бины, исходя из совокупности факторов, таких как ваш classpath и других настроек контекста приложения.
На данном этапе вы готовы к сборке WAR файла:
Эта команда создает развертываемый артефакт target/gs-convert-jar-to-war-maven-0.1.0.war.
Вы можете загрузить Tomcat, Jetty или любой другой контейнер, который поддерживает сервлеты 3.0 версии. Распакуйте его и поместите WAR файл в правильную директорию. Затем запустите сервер.
В вашем браузере перейдите по адресу http://localhost:8080/gs-convert-jar-to-war-maven-0.1.0/. Вы должны увидеть текст «Hello, world!», отрендеренный шаблоном.
Поздравляем! Вы только что конвертировали исполняемый JAR в WAR файл приложения, который можно будет запустить на любом сервлет 3.0+ контейнере.