Несколько дней новогоднего волшебства:
Успейте начать обучение в 2018-ом году со скидкой до 30%!
Выбрать курс

Нужна ли функция public static void main(String[] args){...} ?

Java_Deep_1-5020-576a84.10_site.png

На первый взгляд может показаться, что приложение без функции public static void main(String[] args){...} бессмысленно. Ведь его нельзя запустить. Точнее его нельзя запустить через вызов java -jar name.jar.

И тем не менее, многие Java-разработчики регулярно пишут такие приложения. И запаковывают их не в jar-файлы, а в war-файлы. Давайте сегодня с этими war-файлами и разберёмся.

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

Ваше приложение может быть «библиотекой» для другого приложения. И в этом случае, другое приложение называют application server. AS запускает ваше приложение в собственных потоках. Для него ваш код как актёры для Голливуда. Не актёры звонят в Голливуд. Голливуд звонит актёрам. Таким образом, вы пишите приложения не с использованием библиотек, а для application server-а.

В общем случае application server должен быть написан по спецификации Java EE. Но есть частные случаи, которые поддерживают только работу веб-сервера и сервлетов. Их называют веб-серверы и сервлет-контейнеры. Вот для них как раз Java -разработчики и создают war-файлы.

Итак, war или WebARchive – это jar. Но в отличие от обычного в нём: — нет мета-информации о методе main, с выполнения которого должно начинаться выполнение приложения; — есть директория WEB-INF и в ней web.xml -- файл с инструкциями для сервлет-контейнера; — есть сервлеты (без них war-файл практически бесполезен); — могут быть файлы статических страниц (да-да jar, в котором в корне лежат index.html, index.js и index.css)

Приготовить такой war-файл можно при помощи плагина maven-war-plugin к Maven. А запускать в любом удобном вам сервлет-контейнере, например в Tomcat или Jetty, просто копированием war-файла в директорию webapps.

Только при копировании не забудьте переименовать его в root.war. Интересно зачем? Присоединяйтесь к ближайшей группе курса «Разработчик Java»: расскажем, покажем, научим!

Есть вопрос? Напишите в комментариях!

Автор
0 комментариев
Для комментирования необходимо авторизоваться