Деплой веб-приложения на Tomcat в IntelliJ IDEA Community Edition

English version 

Это краткое руководство поможет начинающим разработчикам Java EE.

IntelliJ IDEA - отличная IDE для Java, однако ее бесплатная версия Community Edition несколько ограничена в разработке веб-приложений и Java EE в целом. В Community версии очень легко разрабатывать desktop приложения, но как только становится необходимо разработать веб-приложение с Java EE, ты вдруг обнаруживаешь, что в Community нет никакой поддержки ни апп серверов (JBoss, GlassFish), ни даже сервлет контейнеров (Tomcat).

В этом руководстве я покажу, как обойти эту проблему (без установки довольно дорогой или крякнутой Ultimate Edition) путем интеграции IntelliJ IDEA Community Edition с Tomcat (через Maven) для разработки веб-приложений с сервлетами.

Начнем с того, что создадим наш проект, щелкнув на пункте New -> Project в верхнем меню.
В левой части выбираем Maven, а в правой архетип maven-archetype-webapp (рис. 1):

Рис. 1. Создайте проект Maven.

На следующих скриншотах видно, как задавать group id, artifact id, имя проекта и папку для него. Group id - уникальный идентификатор твоего проекта, обычно это имя java пакета в соответствии с Java code conventions. Artifact id  - имя JAR файла который заносится в репозиторий Maven, в данном случае mywebapp. Здесь можно подробнее почитать как выбрать group id и artifact id.


После того как проект создан, появится стандартная структура папок необходимая для веб-приложения: папка WEB-INF, файл web.xml и даже главная страница(рис. 2).

Рис. 2. Стандартная структура папок.
 
 Maven уже сможет собрать такой проект, но до сих пор некуда класть исходный код Java! Это нам и надо исправить (рис. 3). Создаем папку java по адресу My web app/src/main/ и метим ее как "source root". В этой папке хранится код сервлетов.

Рис. 3. Создаем папку для исходников.

Создадим для примера сервлет HelloServlet.java (рис. 4) и вставляем туда следующий код:



Рис. 4. Создаем сервлет.

Код правильный, но почему он подчеркивается красным как ошибка? Надо добавить библиотеки Java EE при помощи Maven. Открываем pom.xml и приводим его к такому виду:



Изменения в pom.xml.

Хотя это и не требуется для того чтобы собрать проект, мы также добавили в pom.xml директивы которые вытягивают с серверов Maven плагин tomcat7-maven. Теперь воспользуемся этим плагином: создаем новую Run/Debug Configuration типа Maven, называем ее как угодно, в поле Command line пишем tomcat7:run, и наконец добавляем clean в список целей Maven перед запуском (рис. 5):

Рис. 5. Создаем конфигурацию запуска.

Поздравляю! Теперь у тебя есть рабочее веб-приложение Java EE с конфигурацией запуска которая его собирает, делает WAR архив и деплоит его в Tomcat:


Теперь можно просто нажать Shift+F10 (или кнопку Run на панели вверху) и увидеть в браузере страницу index.jsp по адресу http://localhost:8888 (ссылка будет в окне вывода информации о сборке):


JSP есть, а что насчет сервлетов? Чтобы обратиться к сервлету, надо дать Tomcat понять, где его искать и на какой адрес замапить. Для этого поменяем 2 файла: src/main/webapp/WEB_INF/web.xml и src/main/webapp/index.jsp :





Изменения в web.xml и index.jsp.

Снова запускаем проект и вуаля! Теперь из главной страницы можно перейти к сервлету и убедиться что он работает:


Теперь твоя скромная IntelliJ IDEA Community Edition стала на шаг ближе к полной версии - она автоматически собирает проект, делает WAR архив и деплоит его в Tomcat.

Скачать готовый проект IntelliJ IDEA

Как автоматически запускать браузер после деплоя

Это продолжение статьи предназначается для тех людей, которым недостаточно автоматизации в приведенном решении деплоя и теста веб приложений. "Ну да, я жму Run и запускается Tomcat но после этого надо самому жать ссылку и чистить кеш браузера?" Давайте исправим это и сделаем так, чтобы при запуске приложения оно открывалось в браузере:
  1. Заменяем текст между тегами <plugins> </plugins> в pom.xml:



  2. Идем в Run/Debug Configurations и меняем параметр Command line на verify :


  3. Создаем файл test.bat в корне проекта с таким содержимым:

N.B. Для того чтобы не чистить кеш после каждого запуска я заменил запуск стандартного браузера на Chrome в режиме инкогнито:
Если не чистить кеш в обычном режиме браузера, он будет хранить старые версии скриптов которые ты подключаешь в страницах, что может привести ко многим часам чесания головы.
Вот и все! Можно запускать проект и после деплоя он откроется в браузере:


Чтобы выключить Tomcat можно либо нажать Ввод в окне "Run" (правильный способ) или нажать кнопку "Стоп" на верхней панели (экстренное завершение).


Comments

  1. Огромное спасибо! Простой и главное работающий пример для простого приложения, легко ставится и юзается!

    ReplyDelete
    Replies
    1. Спасибо :) Написал статью как раз потому что сам перепробовал кучу нерабочих способов из Интернета.

      Delete
  2. Спасибо! Статья очень помогла!

    ReplyDelete
  3. спасибо огромное! Вы очень подробно описали порядок действий, очень полезно для новичка - сразу все получилось)

    ReplyDelete
  4. Спасибо, парень, ты крутой)

    ReplyDelete
  5. сен 11, 2017 7:50:36 PM org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
    сен 11, 2017 7:50:43 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8080"]

    Дальше ничего не происходит. Помогите, пожалуйста

    ReplyDelete
  6. Автору самого лучшего пива!

    ReplyDelete
  7. Автору большое спасибо, наконец гайд который работает!

    ReplyDelete
  8. This comment has been removed by the author.

    ReplyDelete
  9. This comment has been removed by the author.

    ReplyDelete
  10. Большое спасибо за подробное разжевывание!
    Но есть проблема, может сможете обяснить в чем дело.
    После запуска приложения получаю в Intellij Idea:
    /home/lilija/IdeaProjects/My web app/test.bat: 1: /home/lilija/IdeaProjects/My web app/test.bat: @echo: not found
    /home/lilija/IdeaProjects/My web app/test.bat: 2: /home/lilija/IdeaProjects/My web app/test.bat: start: not found
    /home/lilija/IdeaProjects/My web app/test.bat: 3: /home/lilija/IdeaProjects/My web app/test.bat: pause: not found
    [ERROR] Command execution failed.

    ReplyDelete
    Replies
    1. Так как эти команды валидны для cmd в любой версии Windows (например https://www.computerhope.com/starthlp.htm), могу предложить только попробовать пересохранить .bat файл в ASCII кодировке.

      Delete

Post a Comment