是的,我知道,最好的网络框架的旧问题......但让我解释一下。
我正在寻找基于Java Servlet的Web框架,它允许RESTful交互,也适合构建Web GUI。
我想要的是什么:
候选人:
Spring MVC 功能强大,但我厌倦了Spring配置,不喜欢编程模型。我认为它有点过于抽象和灵活,因此需要进行大量配置。我不喜欢Spring MVC使用注释的方式。但是也有一些设计缺陷,比如通过return
和输出参数返回值的方法 - 真的很难看!我认为将Spring MVC与Java EE依赖注入一起使用并不容易,因为Spring MVC严重依赖于Spring DI。
Roo 似乎很酷,但它只是创建一个Spring MVC应用程序的另一种方式,它使用AOP做了一些奇怪的事情。
Struts 有点尴尬和过时。
Stripes ActionBean方法看起来并不比Struts好多少。我不喜欢它。
我不是在服务器上寻找具有UI状态的框架,如Wicket,Tapestry或JSF。我认为这种方法与网络的基本原则相矛盾!
那该怎么办?从头开始编写框架?嗯...
我想要JAX-RS with support for classic browser GUIs之类的东西。例如,框架应支持验证并将验证错误放入重新显示的表单中。有类似的东西吗?有什么建议吗?
答案 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 JSP或Lift 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版处于最终开发阶段,提供了广泛的功能集,包括:
看一下该项目并尝试一下: http://www.restlet.org/
答案 3 :(得分:2)
也看看dropwizard。
答案 4 :(得分:1)
它不在您的列表中,但我建议resteasy来构建您的Web服务,这很容易使用...只需要在方法上使用注释来提供Web服务,以及您编写的所有内容想。
另外,如果你想要一个良好的EJB集成,你可以使用JBoss Seam Framework
的resteasy