2012-09-26 18 views
5

Estoy pensando en desarrollar una nueva aplicación web utilizando componentes "ligeros" y no un marco de pila completo.Apilamiento web Java ligero usando Guice-servlet/Jetty/Jersey - algunas preguntas

This article es mi inspiración principal!

Jetty: El servidor web. Probablemente usaré una versión embedabble para el desarrollo, pero con la opción de exportar la aplicación como .war y usar un servidor Jetty externo para el entorno de producción.

Guice/Guice-Servlet: Para inyección de dependencias y para el mapeo de servlet + filtros.

Jersey: Para el enrutamiento + solicitud/respuesta json (de) serialización cuando sea necesario.

Una nota importante: Soy consciente de que algunas personas van a utilizar este tipo de pila con Jersey como una capa de servicios web sólo y utilizará un marco Javascript (Backbone, AngularJS, etc.) para consumir estos servicios y hacer la mayor parte de la lógica de presentación en Javascript. Todavía no estoy listo para este tipo de cosas de clientes. Todavía prefiero usar JSP y he podido enviar HTML sin formato a clientes que tienen javascript deshabilitado.

lo tanto, mi pregunta:

  • ¿Cuál es la mejor manera de manejar formas usando Jersey? Con Spring MVC (que utilicé en otros proyectos) existe este concepto de "objetos de respaldo" en el que los datos POST enviados se vinculan automáticamente a un objeto de respaldo que luego es fácil de jugar. ¿Hay algo similar con Jersey?

  • me gustan todos mis rutas que se definirán en un archivo específico de rutas, no en todas partes como anotaciones @Path que son, en mi opinión, más difícil de manejar. Estoy bastante seguro de que Jersey requiere el uso de las anotaciones @Path de JAX-RS codificadas y no permite un sistema de configuración de rutas externas, ¿es correcto? ¿Ves alguna forma de centralizar todas las rutas con Jersey entonces?

  • Me gusta el concepto de enrutamiento inverso (como Play framework proporciona, por ejemplo). Y, de nuevo, no creo que Jersey pueda proporcionar esa funcionalidad, ¿es correcto?

  • Considerando mis preguntas anteriores, tal vez Jersey no es la tecnología correcta para usar? ¿Conoces otras bibliotecas que podría usar para la parte de enrutamiento en mi pila?

  • ¿Alguna otra sugerencia/sugerencia para este tipo de pila ligera de Java web?

ACTUALIZACIÓN:

estoy buscando a través UrlRewriteFilter para la parte de enrutamiento.

También estoy mirando el ActiveWeb framework, que es un marco de "pila completa", pero parece liviano y también parece proporcionar algunas funcionalidades que estoy buscando: configuración de enrutamiento centralizado y enrutamiento inverso.

+3

Puede que le interese DropWizard: http://dropwizard.codahale.com/getting-started/ –

+0

Sí, he visto (¡y marcado!) DropWizard y de hecho es interesante. Es más o menos el tipo de pila que quiero usar. ¡Pero las preguntas que hago aquí siguen siendo válidas, con o sin DropWizard! Además, DropWizard no parece integrar una biblioteca de inyección de dependencias de forma inmediata (veo que hay un [add-on para Guice] (https://github.com/jaredstehler/dropwizard-guice)) – electrotype

+0

¿por qué necesita Guice? ¿No es suficiente Servlet 3.0? – keuleJ

Respuesta

0

Explicar algunos términos. Guice y Spring resuelven el mismo problema de dominio, que es la inyección de dependencia. Entonces, usar Guice y SpringMVC al mismo tiempo de alguna manera no es posible o al menos contrario.

Para diferencia entre Guice y primavera, así dijo:

Steep! Más cerca de sangriento imposible. Creo que Guice es como llevar a una chica a casa por la noche. La primavera es cierto matrimonio, y si no es divorcio cuidadoso y doloroso. - Spider Oct 7 '11 a las 16:25

Guice es de hecho un armazón DI muy liviano. Pero no hay soporte para enrutamiento y creación de plantillas. Tienes que hacerlo tú mismo a través de servlets de enlace y usando el motor tempaltes por tu cuenta. O puede usar Sitebricks. Usted puede poner todo el enrutamiento en el método de configuración SitebrickModule así:

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 también el apoyo de varios sistemas tempalting: MVEL, Freemarker, ...

Además, se puede construir fácilmente su Servicios REST para el uso de JavaScript:

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

Pruébalo.

Cuestiones relacionadas