Перейти к основному содержимому

Как развернуть файл WAR на Tomcat

· 13 мин. чтения

Задача: Медиана двух отсортированных массивов

Даны два отсортированных массива размерами n и m. Найдите медиану слияния этих двух массивов.
Временная сложность решения должна быть O(log(m + n)) ...

ANDROMEDA

1. Обзор

Apache Tomcat — один из самых популярных веб-серверов в сообществе Java. Он поставляется как контейнер сервлетов, способный обслуживать веб-архивы с расширением WAR.

Он предоставляет панель управления, из которой мы можем развернуть новое веб-приложение или отменить развертывание существующего без перезапуска контейнера. Это особенно полезно в производственной среде.

В этом руководстве мы сделаем краткий обзор Tomcat, а затем рассмотрим различные подходы к развертыванию файла WAR.

2. Структура кота

Прежде чем мы начнем, мы должны ознакомиться с некоторой терминологией и переменными среды.

2.1. Переменные среды

Если мы работали с Tomcat раньше, они будут нам знакомы.

Эта переменная указывает на каталог, в котором установлен наш сервер:

$CATALINA_HOME

Эта переменная указывает на каталог конкретного экземпляра Tomcat (у нас может быть установлено несколько экземпляров):

$CATALINA_BASE

Если эта переменная не задана явно, ей будет присвоено то же значение, что и $CATALINA_HOME .

Веб-приложения развертываются в каталоге $CATALINA_HOME\webapps .

2.2. Терминология

Корень документа — относится к каталогу верхнего уровня веб-приложения, в котором расположены все ресурсы приложения, такие как файлы JSP, HTML-страницы, классы Java и изображения.

Контекстный путь — относится к местоположению относительно адреса сервера и представляет имя веб-приложения.

Например, если наше веб-приложение помещено в каталог $CATALINA_HOME\webapps\myapp , доступ к нему будет осуществляться по URL-адресу http://localhost/myapp , а его контекстный путь будет /myapp .

WAR — сокращение от веб-архива. Это расширение файла, который упаковывает иерархию каталогов веб-приложений в формате ZIP. Веб-приложения Java обычно упаковываются в виде файлов WAR для развертывания. Эти файлы можно создавать в командной строке или в среде IDE, например Eclipse.

После развертывания файла WAR Tomcat распаковывает его и сохраняет все файлы проекта из каталога webapps в новом каталоге, названном в честь проекта.

3. Установка кота

Веб-сервер Tomcat Apache — это бесплатное программное обеспечение, которое можно загрузить с их веб-сайта . Требуется, чтобы на компьютере пользователя был доступен JDK и чтобы переменная среды JAVA_HOME была установлена правильно.

3.1. Запустить Tomcat

Мы можем запустить сервер Tomcat, просто запустив скрипт запуска , расположенный по адресу $CATALINA_HOME\bin\startup . В каждой установке есть .bat и .sh .

Мы выберем подходящий вариант в зависимости от того, используем ли мы операционную систему на основе Windows или Unix.

3.2. Настроить роли

На этапе развертывания у нас будет несколько вариантов, один из которых — использовать панель управления Tomcat. Чтобы получить доступ к этой панели, у нас должен быть пользователь-администратор, настроенный с соответствующими ролями.

Чтобы иметь доступ к панели управления, пользователю-администратору требуется роль manager-gui . Позже нам нужно будет развернуть файл WAR с помощью Maven, и для этого нам также понадобится роль менеджера-скрипта .

Давайте внесем эти изменения в $CATALINA_HOME\conf\tomcat-users :

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager-gui, manager-script"/>

Более подробную информацию о различных ролях Tomcat можно найти, перейдя по этой официальной ссылке .

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. По умолчанию конфигурация коннектора следующая:

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" redirectPort="8443" />

Например, если мы хотим изменить наш порт на 8081 , нам придется изменить атрибут порта коннектора:

<Connector port="8081" protocol="HTTP/1.1" 
connectionTimeout="20000" redirectPort="8443" />

Иногда выбранный нами порт не открыт по умолчанию. В этом случае нам нужно будет открыть порт с помощью соответствующих команд в ядре Unix или создать соответствующие правила брандмауэра в Windows. Мы не будем вдаваться в подробности здесь, так как это выходит за рамки данной статьи.

4. Развертывание из Maven

Если мы хотим использовать Maven для развертывания наших веб-архивов, мы должны настроить Tomcat в качестве сервера в файле Maven settings.xml .

Существует два места, где можно найти файл settings.xml :

  • Установка Maven: ${maven.home}/conf/settings.xml
  • Установка пользователя: ${user.home}/.m2/settings.xml

Как только мы его найдем, мы добавим Tomcat:

<server>
<id>TomcatServer</id>
<username>admin</username>
<password>password</password>
</server>

Теперь нам нужно создать базовое веб-приложение из Maven, чтобы протестировать развертывание. Давайте перейдем туда, где мы хотели бы создать приложение.

Мы запустим эту команду в консоли, чтобы создать новое веб-приложение Java:

mvn archetype:generate -DgroupId=com.foreach -DartifactId=tomcat-war-deployment 
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

Это создаст полное веб-приложение в каталоге tomcat-war-deployment, которое напечатает hello world! если мы развернем его сейчас и получим доступ к нему через браузер.

Но прежде чем мы это сделаем, нам нужно внести одно изменение, чтобы включить развертывание Maven. Давайте перейдем к pom.xml и добавим этот плагин:

<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>TomcatServer</server>
<path>/myapp</path>
</configuration>
</plugin>

Обратите внимание, что мы используем подключаемый модуль Tomcat 7, поскольку он работает как с версиями 7, так и с 8 без каких-либо особых изменений.

URL -адрес конфигурации — это URL-адрес, на который мы отправляем наше развертывание, и Tomcat будет знать, что с ним делать. Элемент сервера — это имя экземпляра сервера, которое распознает Maven. Наконец, элемент пути определяет контекстный путь нашего развертывания.

Это означает, что если наше развертывание пройдет успешно, мы получим доступ к веб-приложению, нажав http://localhost:8080/myapp .

Теперь мы можем запустить следующие команды из Maven.

Чтобы развернуть веб-приложение:

mvn tomcat7:deploy

Затем, чтобы отменить его:

mvn tomcat7:undeploy

Наконец, чтобы повторно развернуть его после внесения изменений:

mvn tomcat7:redeploy

5. Развертывание с грузовым плагином

Cargo — это универсальная библиотека, которая позволяет нам стандартно манипулировать различными типами контейнеров приложений.

5.1. Настройка развертывания груза

В этом разделе мы узнаем, как использовать подключаемый модуль Cargo Maven для развертывания WAR на Tomcat. В этом случае мы развернем его на экземпляр версии 7.

Чтобы получить четкое представление обо всем процессе, мы начнем с нуля, создав новое веб-приложение Java из командной строки:

mvn archetype:generate -DgroupId=com.foreach -DartifactId=cargo-deploy 
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

Это создаст полное веб-приложение Java в каталоге cargo-deploy . Если мы создадим, развернем и загрузим это приложение как есть, оно напечатает Hello World! в браузере.

В отличие от подключаемого модуля Tomcat7 Maven, для подключаемого модуля Cargo Maven требуется наличие этого файла.

Поскольку наше веб-приложение не содержит сервлетов, наш файл web.xml будет очень простым. Мы перейдем к папке WEB-INF нашего недавно созданного проекта и создадим файл web.xml со следующим содержимым:

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

<display-name>cargo-deploy</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Чтобы Maven мог распознавать команды Cargo без ввода полного имени, нам нужно добавить подключаемый модуль Cargo Maven в группу подключаемых модулей в файле settings.xml Maven.

В качестве непосредственного дочернего элемента корневого элемента <settings></settings> мы добавим:

<pluginGroups>
<pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>

5.2. Локальное развертывание

В этом подразделе мы отредактируем файл pom.xml в соответствии с нашими новыми требованиями к развертыванию.

Мы добавим этот плагин:

<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<type>installed</type>
<home>Insert absolute path to tomcat 7 installation</home>
</container>
<configuration>
<type>existing</type>
<home>Insert absolute path to tomcat 7 installation</home>
</configuration>
</configuration>
</plugin>
</plugins>
</build>

Последняя версия на момент написания — 1.5.0 . Впрочем, последнюю версию всегда можно найти здесь .

Обратите внимание, что мы явно определяем упаковку как WAR; без этого наша сборка не удастся. Затем в разделе плагинов мы добавим плагин cargo maven2. Кроме того, мы добавим раздел конфигурации, в котором сообщаем Maven, что используем контейнер Tomcat, а также существующую установку.

Установив тип контейнера в установленный , мы сообщаем Maven, что у нас есть экземпляр, установленный на машине, и мы предоставляем абсолютный URL-адрес этой установки.

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

Альтернативой может быть указание Cargo загрузить и установить указанную версию, указав URL-адрес. Однако наше внимание сосредоточено на развертывании WAR.

Стоит отметить, что независимо от того, используем ли мы Maven 2.x или Maven 3.x, плагин cargo maven2 работает для обоих.

Теперь мы можем установить наше приложение, выполнив:

mvn install

Затем мы развернем его:

mvn cargo:deploy

Если все пойдет хорошо, мы сможем запустить наше веб-приложение, загрузив http://localhost:8080/cargo-deploy.

5.3. Удаленное развертывание

Чтобы выполнить удаленное развертывание, нам нужно всего лишь изменить раздел конфигурации нашего pom.xml . Удаленное развертывание означает, что у нас нет локальной установки Tomcat, но есть доступ к панели администратора на удаленном сервере.

Давайте изменим pom.xml , чтобы раздел конфигурации выглядел так:

<configuration>
<container>
<containerId>tomcat8x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password>admin</cargo.remote.password>
<cargo.tomcat.manager.url>http://localhost:8080/manager/text
</cargo.tomcat.manager.url>
</properties>
</configuration>
</configuration>

На этот раз мы меняем тип контейнера с установленного на удаленный и тип конфигурации с существующего на время выполнения . Наконец, мы добавляем в конфигурацию свойства аутентификации и удаленного URL-адреса.

Мы позаботимся о том, чтобы роли и пользователи уже присутствовали в $CATALINA_HOME/conf/tomcat-users.xml, как и раньше.

Если мы редактируем тот же проект для удаленного развертывания, мы сначала отменим развертывание существующего файла WAR:

mvn cargo:undeploy

Затем мы очистим проект:

mvn clean

Далее мы установим его:

mvn install

Наконец, мы развернем его:

mvn cargo:deploy

Вот и все.

6. Развертывание из Eclipse

Eclipse позволяет нам встраивать серверы, чтобы добавить развертывание веб-проекта в обычный рабочий процесс, не покидая IDE.

6.1. Встроить Tomcat в Eclipse

Чтобы внедрить установку в eclipse, мы выбираем пункт меню окна на панели задач, а затем настройки в раскрывающемся списке.

Затем мы увидим древовидную сетку элементов предпочтений на левой панели появившегося окна. Далее переходим в eclipse -> серверы или просто набираем серверы в строке поиска.

Затем мы можем выбрать каталог установки, если он еще не открыт для нас, и выбрать версию Tomcat, которую мы скачали.

В правой части панели появится страница конфигурации. Здесь мы выбираем параметр «Включить», чтобы активировать эту версию сервера, и переходим к папке установки.

./c9f02bd8fb0dd15d32653b0d421cb952.png

Мы применим изменения, а затем в следующий раз, когда мы откроем представление серверов из окон Eclipse -> подменю отображения представления , будет присутствовать вновь настроенный сервер, и мы сможем запускать, останавливать и развертывать приложения на нем.

6.2. Развертывание веб-приложения во встроенном Tomcat

Чтобы развернуть веб-приложение на Tomcat, оно должно существовать в нашей рабочей области.

Давайте откроем вид серверов из окна -> показать вид и искать серверы. При открытии мы можем просто щелкнуть правой кнопкой мыши на настроенном нами сервере и выбрать « Добавить развертывание » в появившемся контекстном меню.

./36edf3230cbe6f0a5b61e58d66b81507.png

В появившемся диалоговом окне « Новое развертывание » мы откроем раскрывающийся список проекта и выберем веб-проект.

Под полем со списком « Проект » есть раздел « Тип развертывания ». Когда мы выбираем Exploded Archive (режим разработки) , наши изменения в приложении будут синхронизироваться в реальном времени без необходимости повторного развертывания. Это лучший вариант во время разработки, так как он очень эффективен. ****

./2fc26b86417d3b106d0cb8796d8cbde5.png

Выбор Packaged Archive (рабочий режим) потребует повторного развертывания каждый раз, когда мы вносим изменения и видим их в браузере. Это лучше всего только для продакшена, но Eclipse делает это одинаково легко.

6.3. Развертывание веб-приложения во внешнем расположении

Обычно мы выбираем развертывание WAR через Eclipse, чтобы упростить отладку. Однако может наступить время, когда мы захотим развернуть его в месте, отличном от того, которое используется встроенными серверами Eclipse. Самый распространенный случай — это когда наш рабочий сервер подключен к сети, и мы хотим обновить веб-приложение.

Мы можем обойти эту процедуру, развернув в производственном режиме, отметив место развертывания в диалоговом окне « Новое развертывание », а затем выбрав WAR оттуда.

Во время развертывания вместо выбора встроенного сервера мы можем выбрать параметр <Externally Launched> в представлении серверов рядом со списком встроенных серверов. Затем мы переходим в каталог webapps внешней установки Tomcat.

7. Развертывание из IntelliJ IDEA

Чтобы развернуть веб-приложение на Tomcat, оно должно существовать, быть загруженным и установленным.

7.1. Локальная конфигурация

Давайте откроем меню « Выполнить » и выберем параметры « Изменить конфигурации » .

./6663439b344e885b2e98bf7355ec2d39.png

На панели слева мы будем искать Tomcat Server. Если его там нет, мы нажмем знак + в меню, найдем Tomcat и выберем Local . В поле имени поставим Tomcat 7/8 (в зависимости от нашей версии).

./ba3fc01b312547177e45dbbb33edf315.png

Затем мы нажмем кнопку « Настроить… » и в поле « Домашняя страница Tomcat » перейдем к домашнему местоположению нашей установки и выберем ее.

./a3be49f921520b2bdb97637e2ca4cce4.png

При желании мы можем установить стартовую страницу http://localhost:8080/ и HTTP-порт: 8080; мы изменим порт по мере необходимости.

Наконец, мы перейдем на вкладку « Развертывание », щелкните символ «+», выберите артефакт, который мы хотим добавить на сервер, и нажмите «ОК».

./22a0e892bedc4e266e789535638654f9.png

7.2. Удаленная конфигурация

Мы будем следовать тем же инструкциям, что и для локальных конфигураций Tomcat, но на вкладке сервера мы должны ввести удаленное расположение установки.

8. Развертывание путем копирования архива

Мы узнали, как экспортировать WAR из Eclipse. Еще мы можем развернуть его, просто поместив в каталог $CATALINA_HOME\webapps любого экземпляра Tomcat. Если экземпляр запущен, развертывание начнется мгновенно, когда Tomcat распаковывает архив и настраивает свой контекстный путь.

Если экземпляр не запущен, сервер развернет проект при следующем запуске.

9. Развертывание из Tomcat Manager

Предполагая, что у нас уже есть файл WAR и мы хотели бы развернуть его с помощью панели управления, мы можем получить доступ к панели управления, посетив: http://localhost:8080/manager .

Панель управления имеет пять разных разделов: « Диспетчер », « Приложения », « Развертывание », « Диагностика » и « Информация о сервере».

Если мы перейдем в раздел « Развертывание », мы найдем два подраздела.

9.1. Развернуть каталог или файл WAR, расположенный на сервере

Если файл WAR находится на сервере, на котором работает экземпляр Tomcat, мы можем заполнить обязательное поле контекстного пути , которому предшествует косая черта «/».

Например, если мы хотим, чтобы к нашему веб-приложению обращались из браузера по URL-адресу http://localhost:8080/myapp , тогда в поле контекстного пути будет /myapp.

Мы также можем пропустить поле URL-адрес файла конфигурации XML и перейти к полю WAR или URL-адрес каталога . Здесь мы введем абсолютный URL-адрес файла веб-архива, как он отображается на нашем сервере. Например, если наш файл находится в C:/apps/myapp.war , мы вводим это местоположение. Важно, чтобы мы не забывали расширение WAR.

После этого мы можем нажать кнопку развертывания . Страница перезагрузится, и мы должны увидеть это сообщение в верхней части страницы:

OK - Deployed application at context path /myapp

Наше приложение также должно появиться в разделе « Приложения » на странице.

9.2. WAR-файл для развертывания

Здесь мы просто нажимаем кнопку выбора файла , переходим к местоположению файла WAR, выбираем его, а затем нажимаем кнопку развертывания .

В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам об успешном развертывании следующим сообщением:

INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

10. Заключение

В этой статье мы сосредоточились на том, как развернуть WAR на сервере Tomcat.