Встраиваем 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 контроллеры.

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

Facebooktwittergoogle_plusredditlinkedin
  • John

    не могли бы Вы выложить на гитхаб работающий проект c мавеном? что-то не могу понять, куда класть web.xml и web-spring.xml

    • Вот тут пример: https://github.com/jreznot/diy-remote
      Там у меня используется Gradle, с Maven всё будет похожим образом.
      Ресурсы web.xml и spring.xml лежат в корне проекта (модуль server).