Встраиваем Jetty

Про встраивание веб-сервера Jetty написано много руководств, где чаще всего приводят такой код:

И тут нас ждёт разочарование — мы должны запускать Jetty с ресурсами из файловой системы:

  • «/WEB-INF/web.xml»
  • «../src/main/webapp»

Появляется ощущение, что нас кто-то обманул, и на душе горько.
Меня не остановил этот провал, и я пошёл до конца.

Требуем загрузки ресурсов из ClassPath

Соображение первое — Jetty в своих недрах каким-то образом извлекает ресурсы. А значит стоит переопределить доступ к ним, чтобы учитывались ресурсы из Java ClassPath.

Сначала добьёмся старта сервера с дескриптором web.xml из ClassPath. Переопределяем WebXmlConfiguration:

Но помимо этого, в нашем приложении могут использоваться другие файлы конфигурации из WEB-INF, например файлы Spring Framework.

Соображение второе — не стоит пытаться достать из ClassPath что угодно, названия файлов нужно знать заранее:

И вуаля — мы можем запустить сервер без использования ресурсов из файловой системы:

Радуемся, пляшем, ведь вместо написания TCP сервера мы сможем использовать удобные Spring контроллеры.

Из пушки по воробьям, всё ради скорости разработки!

Yuriy Artamonov on GithubYuriy Artamonov on LinkedinYuriy Artamonov on Twitter
Yuriy Artamonov
Technical Manager
До последнего времени Юрий принимал активное участие в разработке опенсорс-фреймворка CUBA Platform, специализируясь на архитектуре и фронтенд-технологиях. Преподавал в Самарском университете разработку приложений для мобильных устройств, основы UI/UX и менторил студентов.

В настоящее время работает в компании JetBrains в команде IntelliJ IDEA Ultimate. Когда выдаётся свободное время, пишет статьи и контрибьютит в проекты с открытым исходным кодом. Обожает реализовывать странные идеи с лозунгом: «А почему бы и нет?».