Русские Блоги
Разница между использованием войны и войны взорвалась идеей
war: сначала упакуйте его в военный пакет, а затем разверните военный пакет на сервере.
war exploded: напрямую перемещайте папки, файлы классов и т. д. в Tomcat для развертывания. Следовательно, этот метод поддерживает горячее развертывание, которое обычно используется во время разработки.
взорванный режим войны:
1. Создайте проект, а затем создайте проект веб-приложения.

2. Введите название проекта.
3. Создайте два новых каталога lib и classes в папке WEB-INF.
Классы используются для хранения скомпилированного файла классов. lib используется для хранения пакетов jar

4. Откройте конфигурацию проекта, выберите Moudles -> paths, выберите Use moudle compile output path, выберите каталог классов, который мы только что создали.

5. Откройте вкладку зависимостей, щелкните значок + справа, выберите «JAR или каталоги», выберите папку lib только сейчас,



6. Затем настройте tomcat, выберите Tomcat Server -> local

7. Затем добавьте Aftifacts к знаку «плюс» в правой части вкладки «Развертывание», чтобы можно было увеличить war Exploded.Контекст приложения — это путь, который обычно имеет значение «/». Итак, наш путь доступа: localhost: 8080

Форма военного пакета:
1. Здесь мы больше не используем метод по умолчанию, указанный выше, и будем использовать новые артефакты. В следующих вариантах есть два варианта:
Веб-приложение взорвано: в форме военного пакета каждый раз переупаковывайте все и упакуйте проект в военный пакет в определенном месте.
Архив веб-приложений: выбор по умолчанию автоматически создает файлы в указанном каталоге Dictiory.


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

3. Затем на вкладке «Развертывание» в tomcat измените исходную войну Exploded на следующую войну, а затем включите tomcat.
Разница между воюющей войной tomcat в сценарии запуска/каталинии и рутинной взрыва войны?
Я скопировал свой.war в папку webapps моего локального сервера tomcat. Когда я запускаю tomcat,.war взорвался в другой структуре, чем когда я вручную взорвал его с помощью jar -xf. Когда я вручную взорваюсь.war, я получаю папку WEB-INF в качестве дочернего элемента папки приложения (ниже). Это то, чего я хочу.
Оба запуска отлично, но когда tomcat взрывает мою войну, отправка запроса на ресурсы всегда возвращает 404. Я думаю, что WEB-INF должен быть дочерним по отношению к взорванному военному каталогу для запросов на возврат 200. Вручную взорвать.war внутри webapps, а затем запустить tomcat работает, а также останавливает tomcat после того, как он автоматически взорвал войну, переместив WEB-INF на один уровень вверх, а затем перезапустив tomcat.
Есть ли способ упаковать мою войну, чтобы tomcat взорвет ее с WEB-INF как непосредственным ребенком взорванного каталога войны? И почему кошка взрывает войну иначе, чем jar -xf?
EDIT – вот мой скрипт сборки, выполненный в папке проекта –
Неверная структура вашего WAR файла. WAR файл не должен содержать папку с именем приложения в корневом каталоге. Вам нужно удалить папку app_name из команды jar.
В чем отличие артефакта war от war exploded
The difference between war and war exploded
When developing a project using idea,When deploying tomcat, the following situations usually occur:
Whether to choose war or war exploded. Let’s first look at the difference between them:
war mode:upload the web project to the server as a package;
war exploded mode:upload the web project to the server with the current folder location relationship;
(1) The war mode can be called the release mode.You know by name,This is first released as a war package, and then released;
(2) The war exploded mode is to directly move folders, jsp pages, classes, etc. into the tomcat deployment folder,Load deployment.So this approach supports hot deployment,This is generally used during development.
(3) When developing normally,With hot deployment,The tomcat should be set accordingly,In this case, what is modified in the jsp interface can be displayed in time.
Modify where the arrow points.In this way, hot deployment can be achieved.
The pits encountered when developing in war mode
First, the location of the project code is as follows:
The above projects are ssm projects.
Second, the tomcat location used for deployment:
Third, the code used to obtain the absolute path of the context:
4. Experimental process and results in two ways:
(1) When using war mode development,Get the relative path of the project through the following code:
The war mode always obtains the path as follows:
Where c:\ software \ apache-tomcat-8.0.32 is the location of my tomcat.
It can be seen that the war mode is the final package and deployment location to tomcat.
Сборка 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% своего рабочего времени ты будешь делать именно это 🙂