适用于RESTful GUI应用程序的最先进的Java Web框架?

时间:2010-01-12 19:45:44

标签: java servlets frameworks jax-rs

是的,我知道,最好的网络框架的旧问题......但让我解释一下。

我正在寻找基于Java Servlet的Web框架,它允许RESTful交互,也适合构建Web GUI。

我想要的是什么:

  • 使用http内容协商和良好的URL映射的REST支持
  • 从请求参数到域对象的数据转换(理想情况下也是另一个方向)
  • 无需将域对象复制为Web界面(如struts)
  • 简易EJB集成
  • 依赖注入应该由Java EE服务器执行
  • 易于理解的代码(我不喜欢Spring MVC类路径中组件的魔法线路)
  • 易于配置(在Spring中未配置的内容在容器中配置非常繁琐 - 我更喜欢直接依赖)
  • 不应该重新使用轮子,例如: G。应该使用类似JPA和BeanValidation的东西,而不是框架重新发明,或者至少这些标准应该易于使用。
  • 在表单中显示错误的验证支持
  • 支持国际化

候选人:

  • Spring MVC 功能强大,但我厌倦了Spring配置,不喜欢编程模型。我认为它有点过于抽象和灵活,因此需要进行大量配置。我不喜欢Spring MVC使用注释的方式。但是也有一些设计缺陷,比如通过return和输出参数返回值的方法 - 真的很难看!我认为将Spring MVC与Java EE依赖注入一起使用并不容易,因为Spring MVC严重依赖于Spring DI。

  • Roo 似乎很酷,但它只是创建一个Spring MVC应用程序的另一种方式,它使用AOP做了一些奇怪的事情。

  • Struts 有点尴尬和过时。

  • Stripes ActionBean方法看起来并不比Struts好多少。我不喜欢它。

  • Grails 很好,但是错误(至少在1.2之前)。重新发明轮子:例如,我更喜欢JPA而不是Gorm。

另见10 Best Java Web Frameworks

我不是在服务器上寻找具有UI状态的框架,如Wicket,Tapestry或JSF。我认为这种方法与网络的基本原则相矛盾!

那该怎么办?从头开始编写框架?嗯...

我想要JAX-RS with support for classic browser GUIs之类的东西。例如,框架应支持验证并将验证错误放入重新显示的表单中。有类似的东西吗?有什么建议吗?

5 个答案:

答案 0 :(得分:7)

我发表了关于使用JAX-RS作为unifying web framework in the past的博文。使用JAX-RS,您几乎可以完成所有工作;主要的缺点是所有的部分都可能没有像Spring MVC,Stripes,Grails,Seam等人那样记录在案。

对于视图,它非常容易使用带有Jersey的JAX-RS,并且除了JSON / XML /中的RESTful服务之外,还支持HTML中的Web UI。您可以重用JAXRS优雅的内容协商,因此HTTP内容接受标头用于决定是否返回HTML或XML等(另外,您可以在服务器端加权HTML以避免向提供奇数接受标头的某些Web浏览器提供XML - 我是看着你喜欢XML到HTML的Safari!)。例如将@ImplicitProduces(“text / html; qs = 5”)添加到资源bean将比任何其他表示高HTML。您还可以配置URI后缀(如添加.html或.xml或.json)以覆盖内容协商;这使得在浏览器中测试不同的表示形式变得更加简单。

Jersey很好地支持隐式视图,因此您可以使用任何template engine like JSPLift templates或其他任何内容在HTML中呈现视图;然后使用更传统的JAX-RS提供程序进行XML / JSON类型编组。你可以明确地看待观点;或者让JAX-RS找到你的模板等。

要查看隐式视图,可能值得下载Jersey的源代码并查看示例,例如书店(如果您愿意,可以搜索@ImplicitProduces)。

就验证这样的事情而言,它很容易将Bean Validation JSR集成到资源bean中;所以你可以执行资源或DTO或其他任何东西的自定义验证。同样,在Jersey(表单bean)中有很好的表单发布支持。

我建议使用一些DI / IoC框架为资源bean注入他们需要的东西(比如数据库东西,bean验证东西或服务对象或诸如此类的东西)。如果你想避开Spring,Guice和Jersey的搭配很好;虽然带有JavaConfig的Spring确实避免了大量的XML。

对于复杂的用户界面,您可能希望最近在客户端上使用JavaScript。虽然很容易从JavaScript调用restful服务(特别是如果他们使用JSON或JSONP) - 缺少的部分优雅地重用来自GWT的Java / JAX-RS中的RESTful服务。到目前为止RestyGWT看起来最有希望。有一天可能是最好的JSON编组框架,Jackson将具有本机GWT绑定。我们的想法是在客户端和服务器端JAX-RS中重用GWT中的DTO对象 - 同时保持完全RESTful。

答案 1 :(得分:3)

我认为你将Grails描述为“越野车”有点苛刻。虽然在使用Grails时遇到错误,但它通常是底层框架(Spring,Hibernate)或者是负责而不是Grails的插件。

另外,鉴于Hibernate是一个JPA实现,说

真的有意义吗?
  

我更喜欢JPA胜过Gorm

无论如何,如果您对Grails或您提到的任何其他框架不满意,Play framework可能值得一看。

答案 2 :(得分:3)

我想提一下Restlet Framework,它是2005年推出的第一个Java REST框架。它成熟,可扩展,拥有庞大的用户群和活跃的社区。

2.0版处于最终开发阶段,提供了广泛的功能集,包括:

  • 在干净的Java API中完整映射HTTP概念
  • 客户端和服务器端的一致API
  • 与许多流行技术集​​成(FreeMarker,Velocity,Spring,Jackson,XStream,JAXB,Atom,OData / WCF数据服务等)
  • 可以部署在独立的Java SE,Java EE / Servlet容器,Google App Engine,Android甚至GWT中,它知道如何使用延迟绑定自动序列化bean(类似于GWT-RPC但是RESTful)
  • 为HTTP,SMTP,POP,JDBC,SIP等提供了许多连接器。
  • 内置完整的安全包,专注于网络安全
  • 支持JAX-RS作为扩展
  • 面向类的API,可以预测,易于扩展和配置(在Java,XML,Spring,Groovy,Scala等中),在真正有用的时候支持Java注释

看一下该项目并尝试一下: http://www.restlet.org/

答案 3 :(得分:2)

也看看dropwizard

答案 4 :(得分:1)

它不在您的列表中,但我建议resteasy来构建您的Web服务,这很容易使用...只需要在方法上使用注释来提供Web服务,以及您编写的所有内容想。

另外,如果你想要一个良好的EJB集成,你可以使用JBoss Seam Framework

的resteasy