0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: java, поток main, функция, public static void main(string[] args){...}, jar-файл, war-файл, application server, webarchive, директория web-inf, web.xml, maven-war-plugin, tomcat, jetty, webapps, root.war</p>
1
<p>Теги: java, поток main, функция, public static void main(string[] args){...}, jar-файл, war-файл, application server, webarchive, директория web-inf, web.xml, maven-war-plugin, tomcat, jetty, webapps, root.war</p>
2
<p>На первый взгляд может показаться, что приложение без функции public static void main(String[] args){...} бессмысленно. Ведь его нельзя запустить. Точнее его нельзя запустить через вызов java -jar name.jar.</p>
2
<p>На первый взгляд может показаться, что приложение без функции public static void main(String[] args){...} бессмысленно. Ведь его нельзя запустить. Точнее его нельзя запустить через вызов java -jar name.jar.</p>
3
<p>И тем не менее, многие Java-разработчики регулярно пишут такие приложения. И запаковывают их не в jar-файлы, а в war-файлы. Давайте сегодня с этими war-файлами и разберёмся.</p>
3
<p>И тем не менее, многие Java-разработчики регулярно пишут такие приложения. И запаковывают их не в jar-файлы, а в war-файлы. Давайте сегодня с этими war-файлами и разберёмся.</p>
4
<p>Продолжая открытый вопрос про запуск приложения, нужно отметить, что его код нельзя исполнить в его собственном потоке<strong>main</strong>. Но мы можем исполнить его в других потоках. По аналогии с библиотеками: библиотека не запускает себя сама, вы запускаете библиотеку в собственных потоках.</p>
4
<p>Продолжая открытый вопрос про запуск приложения, нужно отметить, что его код нельзя исполнить в его собственном потоке<strong>main</strong>. Но мы можем исполнить его в других потоках. По аналогии с библиотеками: библиотека не запускает себя сама, вы запускаете библиотеку в собственных потоках.</p>
5
<p>Ваше приложение может быть "библиотекой" для другого приложения. И в этом случае, другое приложение называют<strong>application server</strong>.<em>AS</em>запускает ваше приложение в собственных потоках. Для него ваш код как актёры для Голливуда. Не актёры звонят в Голливуд. Голливуд звонит актёрам. Таким образом, вы пишите приложения не с использованием библиотек, а для<strong>application server</strong>-а.</p>
5
<p>Ваше приложение может быть "библиотекой" для другого приложения. И в этом случае, другое приложение называют<strong>application server</strong>.<em>AS</em>запускает ваше приложение в собственных потоках. Для него ваш код как актёры для Голливуда. Не актёры звонят в Голливуд. Голливуд звонит актёрам. Таким образом, вы пишите приложения не с использованием библиотек, а для<strong>application server</strong>-а.</p>
6
<p>В общем случае<strong>application server</strong>должен быть написан по спецификации Java EE. Но есть частные случаи, которые поддерживают только работу веб-сервера и сервлетов. Их называют веб-серверы и сервлет-контейнеры. Вот для них как раз Java -разработчики и создают war-файлы.</p>
6
<p>В общем случае<strong>application server</strong>должен быть написан по спецификации Java EE. Но есть частные случаи, которые поддерживают только работу веб-сервера и сервлетов. Их называют веб-серверы и сервлет-контейнеры. Вот для них как раз Java -разработчики и создают war-файлы.</p>
7
<p>Итак, war или<strong>WebARchive</strong>- это jar. Но в отличие от обычного в нём: - нет мета-информации о методе<strong>main</strong>, с выполнения которого должно начинаться выполнение приложения; - есть директория<strong>WEB-INF</strong>и в ней<strong>web.xml</strong>-- файл с инструкциями для сервлет-контейнера; - есть сервлеты (без них war-файл практически бесполезен); - могут быть файлы статических страниц (да-да jar, в котором в корне лежат<strong>index.html</strong>,<strong>index.js</strong>и<strong>index.css</strong>)</p>
7
<p>Итак, war или<strong>WebARchive</strong>- это jar. Но в отличие от обычного в нём: - нет мета-информации о методе<strong>main</strong>, с выполнения которого должно начинаться выполнение приложения; - есть директория<strong>WEB-INF</strong>и в ней<strong>web.xml</strong>-- файл с инструкциями для сервлет-контейнера; - есть сервлеты (без них war-файл практически бесполезен); - могут быть файлы статических страниц (да-да jar, в котором в корне лежат<strong>index.html</strong>,<strong>index.js</strong>и<strong>index.css</strong>)</p>
8
<p>Приготовить такой war-файл можно при помощи плагина<strong>maven-war-plugin</strong>к Maven. А запускать в любом удобном вам сервлет-контейнере, например в<strong>Tomcat</strong>или<strong>Jetty</strong>, просто копированием war-файла в директорию<strong>webapps</strong>.</p>
8
<p>Приготовить такой war-файл можно при помощи плагина<strong>maven-war-plugin</strong>к Maven. А запускать в любом удобном вам сервлет-контейнере, например в<strong>Tomcat</strong>или<strong>Jetty</strong>, просто копированием war-файла в директорию<strong>webapps</strong>.</p>
9
<p>Только при копировании не забудьте переименовать его в<strong>root.war</strong>. Интересно зачем? Присоединяйтесь к ближайшей группе курса "Разработчик Java": расскажем, покажем, научим!</p>
9
<p>Только при копировании не забудьте переименовать его в<strong>root.war</strong>. Интересно зачем? Присоединяйтесь к ближайшей группе курса "Разработчик Java": расскажем, покажем, научим!</p>
10
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
10
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
11
11