Легкий веб-стек Java с использованием Guice-servlet/Jetty/Jersey — некоторые вопросы

Я думаю о разработке нового веб-приложения с использованием «легких» компонентов, а не с полной структурой стека.

Эта статья — мое главное вдохновение!

Jetty: веб-сервер. Я, вероятно, буду использовать встраиваемую версию для разработки, но с возможностью экспортировать приложение как .war и использовать внешний сервер Jetty для производственной среды.

Guice/Guice-Servlet: для внедрения зависимостей и сопоставления сервлетов + фильтры.

Джерси: для маршрутизации + запроса/ответа json (де)сериализации, когда это необходимо.

Важное примечание: я знаю, что некоторые люди будут использовать этот тип стека с Джерси только как уровень веб-служб и будут использовать среду Javascript (Backbone, AngularJS и т. д.) для использования этих служб. и сделать большую часть логики представления в Javascript. Я еще не готов к такого рода клиентским вещам. Я по-прежнему предпочитаю использовать JSP и могу отправлять обычный HTML клиентам, у которых отключен javascript.

Итак, мои вопросы:

  • Как лучше всего управлять формами с помощью Джерси? В Spring MVC (который я использовал в других проектах) существует концепция «резервных объектов», когда отправленные данные POST автоматически привязываются к резервному объекту, с которым затем легко играть. Есть ли что-то подобное с Джерси?

  • Мне нравится, чтобы все мои маршруты определялись в одном конкретном файле маршрутов, а не везде в виде аннотаций @Path, которыми, на мой взгляд, сложнее управлять. Я почти уверен, что Джерси требует использования этих жестко запрограммированных аннотаций JAX-RS @Path и не допускает систему конфигурации внешних маршрутов, это правильно? Вы не видите, как я мог бы централизовать все маршруты с Джерси?

  • Мне нравится концепция обратной маршрутизации (как, например, в Play framework). И, опять же, я не думаю, что Джерси может обеспечить такую ​​функциональность, верно?

  • Учитывая мои предыдущие вопросы, может быть, Джерси не подходит для использования? Знаете ли вы другие библиотеки, которые я мог бы использовать для части маршрутизации в моем стеке?

  • Любые другие предложения/советы для такого легкого веб-стека Java?

ОБНОВЛЕНИЕ:

В настоящее время я просматриваю UrlRewriteFilter для части маршрутизации.

Я также рассматриваю инфраструктуру ActiveWeb, которая представляет собой инфраструктуру полного стека, но кажется легким, а также, кажется, предоставляет некоторые функции, которые я ищу: централизованная конфигурация маршрутизации и обратная маршрутизация.


person electrotype    schedule 26.09.2012    source источник
comment
DropWizard может показаться вам интересным: dropwizard.codahale.com/getting-started   -  person matt b    schedule 26.09.2012
comment
Да, я видел (и добавил в закладки!) DropWizard, и это действительно интересно. Это почти тот стек, который я хочу использовать. Но вопросы, которые я здесь задаю, остаются в силе, с DropWizard или без него! Кроме того, DropWizard, похоже, не интегрирует библиотеку внедрения зависимостей из коробки (я вижу, что есть добавить -on для Guice хотя)?   -  person electrotype    schedule 26.09.2012
comment
зачем тебе Гайс? Разве Servlet 3.0 недостаточно?   -  person keuleJ    schedule 27.09.2012
comment
keuleJ, я думаю, для Guice-Servlet имеется в виду? Ну я думаю, что использование Guice-Servlet позволяет делать инъекции везде (в фильтрах и т.п.), но может я ошибаюсь?   -  person electrotype    schedule 27.09.2012
comment
Вы говорите, что хотите легкий вес, а затем хотите бросить весну? :eek Jersey выполнит для вас синтаксический анализ параметров JSON, XML, POST/GET. На самом деле очень мало необходимости преобразовывать его в POJO, если вы сядете и подумаете об этом. Просто относитесь к ним как к данным.   -  person Bill    schedule 27.09.2012
comment
Я не использую Spring в этом стеке, я использовал Spring MVC в других проектах (я изменил свой вопрос, чтобы эта часть была более понятной)! И я все еще ищу централизованные маршруты + обратную маршрутизацию. Я не думаю, что это возможно с Джерси.   -  person electrotype    schedule 27.09.2012


Ответы (1)


Объяснить некоторые термины. Guice и Spring решают одну и ту же проблемную область, а именно внедрение зависимостей. Итак, одновременное использование Guice и SpringMVC как-то невозможно или, по крайней мере, наоборот.

О разнице между Guice и Spring хорошо сказано:

Отвесный! Ближе к чертовски невозможно. Я думаю, что Guice - это как взять девушку домой на ночь. Весна – верный брак, а если не осторожничать, болезненный развод. — Паук

Guice действительно очень легкий DI-фреймворк. Но нет поддержки маршрутизации и шаблонизации. Вы должны сделать это самостоятельно с помощью связывания сервлетов и использования собственного движка tempaltes. Или вы можете использовать Sitebricks. Вы можете поместить всю маршрутизацию в метод конфигурации SitebrickModule следующим образом:

public class MyAppConfig extends SitebricksModule {
@Override
protected void configureSitebricks() {
    at("/movies").show(MoviesPage.class); // basic page
    at("/actors").serve(ActorsPage.class); // service
    embed(SoundtrackPage.class).as("Soundtrack"); // brick
}

}

Sitebricks также поддерживает несколько систем шаблонов: MVEL, Freemarker,...

Кроме того, вы можете легко создать свои службы REST для использования javascript:

Reply<Product> view() {
  return Reply.with(new Product("Anti-ageing cure"))
              .as(Json.class);
}

Попробуйте.

person Milan Baran    schedule 25.07.2013