使用Guice-servlet / Jetty / Jersey的轻量级Java Web堆栈 - 一些问题

时间:2012-09-26 18:43:24

标签: java jersey guice web-frameworks guice-servlet

我正在考虑使用“轻量级”组件而不是完整的堆栈框架来开发新的Web应用程序。

This article是我的主要灵感来源!

Jetty :网络服务器。我可能会使用embedabble版本进行开发,但可以选择将应用程序导出为.war并使用外部Jetty服务器进行生产环境。

Guice / Guice-Servlet :用于依赖注入和servlet映射+过滤器。

泽西:对于需要时路由+请求/响应json(de)序列化。

一个重要的注意事项:我知道有些人会将这种堆栈与Jersey一起用作 Web服务层,并将使用Javascript框架(Backbone,AngularJS等)来使用这些服务并在Javascript中执行大部分表示逻辑。我还没有为这种客户端做好准备。我仍然倾向于使用JSP,并且能够将纯HTML发送给禁用了javascript的客户端。

所以,我的问题:

  • 使用Jersey管理表单的最佳方法是什么?使用Spring MVC(我在其他项目中使用),有一个“支持对象”的概念,其中提交的POST数据自动绑定到一个易于使用的支持对象。是否有与泽西相似的东西?

  • 我喜欢在一个特定的路由文件中定义所有路由,而不是像@Path注释那样在我看来更难管理。我很确定Jersey要求使用那些硬编码的JAX-RS的@Path注释并且不允许外部路由配置系统,这是正确的吗?您是否认为我可以用泽西岛集中所有路线?

  • 我喜欢反向路由的概念(例如Play框架提供)。而且,我认为泽西岛不能提供这种功能,这是正确的吗?

  • 考虑到我以前的问题,也许Jersey不适合使用?你知道我可以用于堆栈中的路由部分的其他库吗?

  • 此类轻量级Java网络堆栈的其他任何建议/提示?

更新:

我目前正在查看UrlRewriteFilter的路由部分。

我也在关注ActiveWeb framework,它是一个“完整堆栈”框架,但看起来很轻,似乎也提供了一些我正在寻找的功能:集中路由配置和反向路由。 / p>

1 个答案:

答案 0 :(得分:0)

解释一些条款。 Guice和Spring解决相同的问题域,即依赖注入。因此,同时使用Guice和SpringMVC在某种程度上是不可能的,或者至少是相反的。

对Guice和Spring的区别,说得好:

  

陡!更接近血腥不可能。我认为Guice就像拿一个   女孩回家过夜。春天是一定的婚姻,如果没有   小心,痛苦的离婚。 - 蜘蛛2011年10月7日16:25

Guice确实是非常轻量级的DI框架。但是不支持路由和模板。你必须自己通过绑定servlet并使用你自己的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,......

此外,您可以轻松地为javascript使用构建REST服务:

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

试一试。