2012-09-26 19 views
5

Zastanawiam się nad stworzeniem nowej aplikacji internetowej wykorzystującej "lekkie" komponenty, a nie pełną strukturę stosu.Jasny stos WWW Java za pomocą Guice-servlet/Jetty/Jersey - niektóre pytania

This article to moja główna inspiracja!

Jetty: Serwer internetowy. Prawdopodobnie użyję wersji embedabble do programowania, ale z opcją eksportu aplikacji jako .war i użycia zewnętrznego serwera Jetty dla środowiska produkcyjnego.

Guice/Guice-Servlet: Dla iniekcji Dependency i dla mapowania serwletów + filtrów.

Jersey: Do szeregowania radełowania + żądania/odpowiedzi (w razie potrzeby).

Ważna uwaga: Jestem świadomy niektórzy ludzie będą korzystać z tego rodzaju stos z Jersey jako usług internetowej warstwy tylko i użyje ramy JavaScript (kręgosłup, angularjs, itd.), Aby konsumować te usługi i wykonaj większość logiki prezentacji w JavaScript. Nie jestem jeszcze gotowy na tego rodzaju rzeczy dla klientów. Nadal preferuję używanie stron JSP i mogę wysyłać zwykły kod HTML do klientów, którzy mają wyłączony javascript.

Więc moje pytania:

  • Jaki jest najlepszy sposób na zarządzanie formy użyciu Jersey? W przypadku Spring MVC (używanego w innych projektach) istnieje koncepcja "obiektów zabezpieczających", w której przesłane dane POST są automatycznie wiązane z obiektem, który jest następnie łatwy do odtworzenia. Czy jest coś podobnego w Jersey?

  • Podobają mi się wszystkie moje trasy do zdefiniowania w jeden konkretny plik tras, nie wszędzie jako adnotacje @Path, które moim zdaniem są trudniejsze w zarządzaniu. Jestem prawie pewny, że Jersey wymaga użycia przypisanych na stałe JAX-RS adnotacji @Path i nie pozwala na zewnętrzny system konfiguracji tras, czy to prawda? Czy widzisz, w jaki sposób mogę scentralizować wszystkie trasy z Jersey?

  • Podoba mi się koncepcja odwrotnego routingu (na przykład, jak zapewnia platforma Play). I znowu, nie sądzę, że Jersey może zapewnić tę funkcjonalność, czy to prawda?

  • Biorąc pod uwagę moje wcześniejsze pytania, może Jersey nie jest odpowiednią technologią do zastosowania? Czy znasz inne biblioteki, których mogłem użyć dla części routingu w moim stosie?

  • Jakieś inne sugestie/wskazówki dotyczące tego rodzaju światła stosu Java?

UPDATE:

Jestem obecnie patrząc na UrlRewriteFilter dla części routingu.

Patrzę również na ActiveWeb framework, który jest strukturą "pełnego stosu", ale wydaje się lekki i wydaje się również zapewniać pewne funkcje, których szukam: scentralizowaną konfigurację routingu i odwrotne trasowanie.

+3

Może zainteresować DropWizard: http://dropwizard.codahale.com/getting-started/ –

+0

Tak, widziałem (i dodałem do zakładek!) DropWizard i rzeczywiście jest interesujący. To prawie taki rodzaj stosu, którego chcę użyć. Ale pytania, o które tutaj pytam, są nadal aktualne, z DropWizard lub bez niego! Ponadto, DropWizard nie wydaje się integrować biblioteki wtryskowej zależności po wyjęciu z pudełka (widzę jednak, że istnieje [dodatek do Guice] (https://github.com/jaredstehler/dropwizard-guice)). – electrotype

+0

dlaczego potrzebujesz Guice? Czy nie wystarczy Servlet 3.0? – keuleJ

Odpowiedz

0

Aby wyjaśnić niektóre terminy. Guice i Spring rozwiązują tę samą problematyczną domenę, czyli iniekcję zależności. Dlatego używanie Guice i SpringMVC w tym samym czasie jest jakoś niemożliwe lub przynajmniej przeciwne.

różnicy między Guice i wiosną, dobrze powiedział:

Steep! Bliżej do krwawej niemożliwości. Sądzę, że Guice jest jak zabranie do domu dziewczyny z domu . Wiosna to pewne małżeństwo, a jeśli nie, to ostrożny, bolesny rozwód. - Spider Październik 7 '11 o 16:25

Guice jest rzeczywiście bardzo lekkim szkieletem DI. Ale nie ma wsparcia dla routingu i szablonów. Trzeba to zrobić samodzielnie za pomocą wiążących serwletów i używając własnego silnika tempaltes. Lub możesz użyć Sitebricks. Możesz umieścić wszystkie trasy do sposobu konfiguracji SitebrickModule tak:

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 również obsługiwać kilka systemu tempalting: MVEL, Freemarker ...

Ponadto, można łatwo budować swoją Usługi REST do używania javascript:

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

Wypróbuj.