- Get link
- X
- Other Apps
- Get link
- X
- Other Apps
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):
На следующих скриншотах видно, как задавать group id, artifact id, имя проекта и папку для него. Group id - уникальный идентификатор твоего проекта, обычно это имя java пакета в соответствии с Java code conventions. Artifact id - имя JAR файла который заносится в репозиторий Maven, в данном случае mywebapp. Здесь можно подробнее почитать как выбрать group id и artifact id.
После того как проект создан, появится стандартная структура папок необходимая для веб-приложения: папка WEB-INF, файл web.xml и даже главная страница(рис. 2).
Maven уже сможет собрать такой проект, но до сих пор некуда класть исходный код Java! Это нам и надо исправить (рис. 3). Создаем папку java по адресу My web app/src/main/ и метим ее как "source root". В этой папке хранится код сервлетов.
Создадим для примера сервлет HelloServlet.java (рис. 4) и вставляем туда следующий код:
Код правильный, но почему он подчеркивается красным как ошибка? Надо добавить библиотеки Java EE при помощи Maven. Открываем pom.xml и приводим его к такому виду:
Хотя это и не требуется для того чтобы собрать проект, мы также добавили в pom.xml директивы которые вытягивают с серверов Maven плагин tomcat7-maven. Теперь воспользуемся этим плагином: создаем новую Run/Debug Configuration типа Maven, называем ее как угодно, в поле Command line пишем tomcat7:run, и наконец добавляем clean в список целей Maven перед запуском (рис. 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 :
Снова запускаем проект и вуаля! Теперь из главной страницы можно перейти к сервлету и убедиться что он работает:
Скачать готовый проект IntelliJ IDEA
Если не чистить кеш в обычном режиме браузера, он будет хранить старые версии скриптов которые ты подключаешь в страницах, что может привести ко многим часам чесания головы.
Вот и все! Можно запускать проект и после деплоя он откроется в браузере:
Чтобы выключить Tomcat можно либо нажать Ввод в окне "Run" (правильный способ) или нажать кнопку "Стоп" на верхней панели (экстренное завершение).
Это краткое руководство поможет начинающим разработчикам 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.
Как автоматически запускать браузер после деплоя
Это продолжение статьи предназначается для тех людей, которым недостаточно автоматизации в приведенном решении деплоя и теста веб приложений. "Ну да, я жму Run и запускается Tomcat но после этого надо самому жать ссылку и чистить кеш браузера?" Давайте исправим это и сделаем так, чтобы при запуске приложения оно открывалось в браузере:- Заменяем текст между тегами <plugins> </plugins> в pom.xml:
-
Идем в Run/Debug Configurations и меняем параметр Command line на verify :
- Создаем файл test.bat в корне проекта с таким содержимым:
Если не чистить кеш в обычном режиме браузера, он будет хранить старые версии скриптов которые ты подключаешь в страницах, что может привести ко многим часам чесания головы.
Вот и все! Можно запускать проект и после деплоя он откроется в браузере:
Чтобы выключить Tomcat можно либо нажать Ввод в окне "Run" (правильный способ) или нажать кнопку "Стоп" на верхней панели (экстренное завершение).
Comments
Огромное спасибо! Простой и главное работающий пример для простого приложения, легко ставится и юзается!
ReplyDeleteСпасибо :) Написал статью как раз потому что сам перепробовал кучу нерабочих способов из Интернета.
DeleteСпасибо! Статья очень помогла!
ReplyDeleteСпасибо большое!
ReplyDeleteспасибо огромное! Вы очень подробно описали порядок действий, очень полезно для новичка - сразу все получилось)
ReplyDeleteСпасибо, парень, ты крутой)
ReplyDeleteсен 11, 2017 7:50:36 PM org.apache.catalina.core.StandardEngine startInternal
ReplyDeleteINFO: 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Автору самого лучшего пива!
ReplyDeleteАвтору большое спасибо, наконец гайд который работает!
ReplyDeleteБольшое спасибо за подробное разжевывание!
ReplyDeleteНо есть проблема, может сможете обяснить в чем дело.
После запуска приложения получаю в 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.
Так как эти команды валидны для cmd в любой версии Windows (например https://www.computerhope.com/starthlp.htm), могу предложить только попробовать пересохранить .bat файл в ASCII кодировке.
DeleteСудя по путям у Вас не Windows, а одна из unix/unix-like систем, поэтому .bat скрипты работать и не должны. Совет от Вадима выше вызывают лишь грусть.
DeleteВам необходимо заменить test.bat на test.sh, выполнить "chmod +x /путь/до/sh/файла/test.sh", а в test.sh написать что-то вроде (пишу по памяти, так что-то сходу может не заработать):
#!/bin/bash
x-www-browser http://localhost:8888
read -rsp $'Press any key to continue...\n' -n 1 key
Надеюсь мой совет Вам поможет. Удачи в Вашей работе. И повышайте квалификацию по использованию того инструмента, что у Вас в руках. Разбираться в unix-like системах не зазорно.
Very usefull tutorail. thnks
ReplyDeleteЗапускаю приложение на tomcat, открывается домашняя страница tomcat, а не index.jsp. С чем это может быть связано?
ReplyDeleteАвтор, кто бы ты ни был, но ты мой герой! сутки возился, не мог понять как завести пример из лабораторки. а тут всё по полочкам))
ReplyDeleteможешь ещё, пожалуйста, подсказать как порт, по которому контейнер сервлетов Tomcat слушает запросы?
Спасибо, сам собирал этот способ по кускам из разных советов в интернете.
DeleteНе совсем понял вопрос про порт - но если ты имеешь в виду как его переопределить с дефолтного то вот https://stackoverflow.com/questions/21083170/spring-boot-how-to-configure-port
Спасибо)
Deleteя в итоге сделал так, тоже работает:
В файле pom.xml заменил порт тут:
8888
/
true
Thanks a lot, man. I really appreciate your work. This detailed tutorial was made with the teaching spirit. That's the point.
DeleteКороче, пасиб, дико помог)
Правда без сборщика я так и продолжаю кушать проблемы.
Без сборщика я не смог сделать работающий кастом .
Без мейвена просто открывается стандартная 404 (вместо кастомной).
Со сборщиком же всё пашет на ура.
Всё равно спасибо.
>>Открываем pom.xml и приводим его к такому виду
ReplyDeleteВот в этом месте я застрял, после "приведения к виду" запуск выдает ошибки.
Просто скопировать не сработало, оставить как было и добавить кусок с плагином tomcat7 тоже не сработало.
В сгенеренном pom.xml есть блок
org.mortbay.jetty
maven-jetty-plugin
6.1.7
8888
30000
${project.build.directory}/${pom.artifactId}-${pom.version}
/
Надо ли его удалить?
Основы java я изучил, но что такое maven и формат pom.xml - пока не знаю.
Должно ли было у меня получится?
Очень хочется сделать работающее веб приложение, но как это сделать вообще пока не понятно.
Надо изучать maven и формат pom.xml?
>Надо изучать maven и формат pom.xml?
DeleteОпределенно надо.
Не понял часть описания про сгенерированный pom, но jetty я определенно не использую - вместо него tomcat.
Приветствую. Я делал всё точно по гайду, при этом у меня версия идеи IntelliJ IDEA 2018.2.5 (Community Edition). До момента с автоматическим запуском браузера были отличии, но всё работало. В частности, в блоке plugins было несколько других плагинов: maven-clean-plugin, maven-resources-plugin, и еще пару. Но я их убрал, и ничего не сломалось) Когда я попытался реализовать автозапуск, на том моменте, когда должен запускаться tomcat ( >>> tomcat7-maven-plugin:2.2:run) у меня (BUILD SUCCESS) и всё завершается. При этом ваш проект с автозапуском открывается нормально. Вот мой проект https://drive.google.com/drive/folders/1bEtng9ORt8MMb-KFBjZdh5uE-22ccxrp?usp=sharing
ReplyDeleteUPD: оказалось, проблема была в тегах
DeleteТа же ситуация, не подскажете, как решили проблему ?
DeleteПришлось помучиться, почему-то pom.xml не работает при автоматическом запуске браузера, если все плагины находятся внутри тега
DeleteОтлично, все работает, большое спасибо автору!
ReplyDeleteИдея ругается на то, что в pom.xml в открывающемся теге "i"написано в lower case, а в закрывающемся "i"написано в upper case. Тоже самое с Из-за этого не производится импорт вспомогательных jar файлов. Поправьте пожалуйста.
ReplyDeletejunit
junit
javax
javaee-api
Ха, вижу. Это странность редактора блоггера - если редактируешь пост в графическом режиме то он уродует теги. Видимо, какая-то попытка защититься от хакеров. Спасибо что заметили, исправлю.
Deleteвау, то что надо! спасибо большое!
ReplyDeleteРеспект тебе долго мучился почему не запускается проект , оказалось что я использовал версию java ee 7 , на которой и не запускался проект , поменял на 6 как у тебя и все заработало ♥
ReplyDelete;-)
DeleteСпасибо за статью.
ReplyDeleteА не могли бы вы подсказать, где можно взять полученый war ?
В каталоге out его нет (
Думаю по умолчанию он и не собирается. Нужно сконфигурировать мавен так чтобы он его собрал нп так: https://stackoverflow.com/questions/44297430/generate-war-file-using-maven
DeleteСпасибо за пример. А можно ли через конфиг (не через код) зарегистрировать jndi data source для этого tomcat или настроить плагин так, чтобы использовался внешний tomcat?
ReplyDeleteДа храни тебя........
ReplyDeleteДа, это просто восхитительно) спасибо вам
ReplyDeleteВсегда рад ;)
DeleteПомогите понять, что же нужно IDEA Comm? Создаю проект через Maven, а в POM у меня текст о необходимости лицензии Apache 2.0 и поле неактивно. Но это свободная лицензия, которая и позволяет нам бесплатно установить версию Community. Или я что-то упускаю? И дальше в итоге дело не идет.
ReplyDeleteСлушай, благодаря твоему туториалу я таки запустил сервер, ато я уже отчаялся и собирался эклипс ставить. Ты ЛУДШИЙ
ReplyDeleteприятно :)
DeleteЕсли у кого то неполучаеться сделать автоматический запуск браузера после деплоя(после запуска выдает BUILD SUCCESS и на том прерывает прогграму), ТО удалите теги
ReplyDeleteplugin manager
Deleteты-Бог!
ReplyDeleteогромное спасибо. три дня плачу над сервлетами, уже дошла до конца интернета и ничего толкового. но жта статья спасла мою нервную систему СПАСИБО
ReplyDeleteСПАСИБО ОГРОМНОЕ!!!!!
ReplyDeleteОткрыли ворота в мир!!!!
Одно дополнение из 2022 года :) в последней версии проекта с файлом test.bat надо в Pom.xml добавить секцию
org.apache.maven.plugins
maven-war-plugin
3.3.2
перед секцией с
org.codehaus.mojo
exec-maven-plugin
Иначе не хватает классов для работы. Их как раз надо билд системе взять из новой секции.
день убил на то, чтобы понять что твой коммент верный, только мне подошла версия 3.2.2, вот так
Deleteorg.apache.maven.plugins
maven-war-plugin
3.2.2