是的,我知道,最好的网络框架的老问题......但让我解释一下.
我正在寻找基于Java Servlet的Web框架,它允许RESTful交互,也适合构建Web GUI.
我想要的是:
REST支持与http内容协商和良好的URL映射
从请求参数到域对象的数据转换(理想情况下也是另一个方向)
无需将域对象复制为Web的接口(如struts)
易于EJB集成
依赖注入应该由Java EE服务器执行
可理解的代码(我不喜欢Spring MVC类路径中组件的魔法线路)
易于配置(在Spring中没有配置的神奇配置在容器中是繁琐的 - 我更喜欢直接依赖)
不应该重新发明轮子,例如应该使用JPA和BeanValidation之类的东西,而不是框架重新发明,或者至少这些标准应该易于使用.
验证支持,在表单中显示错误
支持国际化
候选人:
Spring MVC功能强大,但我厌倦了Spring配置,不喜欢编程模型.我认为它有点过于抽象和灵活,因此需要进行大量配置.我不喜欢Spring MVC使用注释的方式.但是也存在一些设计缺陷,比如return
通过输出参数返回值的方法- 真的很难看!我认为使用Spring MVC和Java EE依赖注入并不容易,因为Spring MVC严重依赖于Spring DI.
Roo似乎很酷,但它只是创建一个Spring MVC应用程序的另一种方式,它用AOP做了一些奇怪的事情.
Struts有点尴尬和outdatet.
Stripes ActionBean方法看起来并不比Struts好多少.我不喜欢它.
Grails很好,但是马车(至少在1.2之前).重新发明轮子:例如,我更喜欢JPA胜过Gorm.
另请参阅10个最佳Java Web框架
我不是在服务器上寻找具有UI状态的框架,如Wicket,Tapestry或JSF.我认为这种方法与网络的基本原则相矛盾!
那么该怎么办?从头开始编写框架?嗯......
我想拥有像JAX-RS这样的东西,支持经典的浏览器GUI.例如,框架应支持验证并将验证错误放入重新显示的表单中.有类似的东西吗?有什么建议?
我曾在博客中谈到过使用JAX-RS作为统一的Web框架.使用JAX-RS,您几乎可以完成所有工作; 主要的缺点是所有的部分可能没有像Spring MVC,Stripes,Grails,Seam等人那样记录在一个地方.
对于视图,除了JSON/XML /中的RESTful服务之外,它还非常容易使用带有Jersey的 JAX-RS 并支持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很好地支持隐式视图,因此您可以使用任何模板引擎(如JSP或Lift模板等)在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.
对于复杂的UI,您可能希望在客户端上使用JavaScript.虽然很容易从JavaScript调用restful服务(特别是如果他们使用JSON或JSONP) - 缺少的部分优雅地重用来自GWT的Java/JAX-RS中的RESTful服务.到目前为止,RestyGWT看起来最有前途.有一天也许是最好的JSON编组框架,杰克逊将拥有原生的GWT绑定.我们的想法是在客户端和服务器端JAX-RS中重用GWT中的DTO对象,同时保持完全RESTful.