以上所有内容都应该集成在框架中,而不是某些第三方用户贡献的模块中,当框架的新版本出现时它们就会消失。
我花了一天时间进行实验,并找到了以下候选者:
Spring MVC 3
1)要在Spring MVC 3中运行传统的“Hello World”示例,我需要以下jar包:
- org.springframework.beans-3.1.0.RELEASE.jar
- org.springframework.expression-3.1.0.RELEASE.jar
- org.springframework.asm-3.1.0.RELEASE.jar
- org.springframework.context-3.1.0.RELEASE.jar
- org.springframework.core-3.1.0.RELEASE.jar
- org.springframework.web-3.1.0.RELEASE.jar
- org.springframework.web.servlet-3.1.0.RELEASE.jar
2) Spring 3支持此功能,从examples中看来,它看起来并不太复杂。
3) 支持,但从(2)中的链接看来,处理json似乎仅限于使用jackson库。至少如果您想使用内容协商的魔术注释的话。
引用:
"在底层,Spring MVC委托给HttpMessageConverter执行序列化。在这种情况下,Spring MVC调用基于Jackson JSON处理器构建的MappingJacksonHttpMessageConverter。当您在类路径中使用Jackson时,此实现会自动启用mvc:annotation-driven配置元素。"
对我来说有点警告信号。我希望能清楚地对所使用的JSON处理器进行编程控制。也许我在这里漏掉了什么。在我的书中,这就是不需要的“幕后魔法”。
4) 是的
5) 是的
6) 是的
Play Framework
1) 版本1.2在我的磁盘上占用了88.5 MB。它不在servlet容器中运行,因此与Spring相比,获取hello world示例并运行非常容易,而在Spring中,即使找出我需要哪些jar包也是神秘的。显然,在play中发生了很多事情。我想我能希望的就是它不会做超出必要的事情。并且架构是合理的。但是,当我有一天必须与框架作斗争时,我是否会死亡?谁知道...
2) 是的,而且它非常优雅。点赞。
3) 是的,但它在幕后使用gson。同样,为什么我不能通过编程方式控制这个?幸运的是,可以向gson传递任意序列化程序以覆盖默认值。而且我认为该参数映射到play renderJSON()本机函数的第二个参数。所以play只通过了一半。
4) 是的。有一个JPA模块
5) 是的。使用Groovy。对我来说很好。
6) 通过组合安全和死锁模块应该是可能的。不知道它在与Spring Security相比如何。我没有看到任何内置支持密码加密等功能。也不知道与Spring Security集成有多难(如果可以的话)。不知道是否愿意部署敏感数据并依赖Play!框架进行安全性保障。可能需要在其上构建一些东西。
Restlet
作为“无休止Web服务”的营销对象,Restlet可能是一个奇特的候选者。但对于我的1-6点和大多数用户交互都是异步的应用程序类型,它似乎很适合。我可以在静态资源或动态生成的内容上运行它,并输出任何内容类型。
1) Restlet 1.1.1大约为54 MB。浏览了hello world示例。我喜欢没有XML文件的方式。就像play一样,它有自己的服务器(jetty连接器)。hello world示例看起来非常干净和简单。
2) 是的,方法非常“编程化”。
3) 是的,但似乎只能通过jackson扩展模块实现。考虑到这个框架的编程性质,很可能还有其他选项,但我在文档或用户组论坛中没有找到任何信息。
4) 自称为“持久性无关”。好吧,我想这很好。但我想要持久化而不是自己重新发明轮子。或者至少我希望有一个小教程,展示它可以通过一些努力来完成。有一个第三方jpa模块。但它是建立在restlet 1.0之上的。Restlet有一个spring模块,所以也许我可以集成spring持久性东西...
5) 是的,有一个freemarker扩展
6) 有一个本地方案。乍一看,不如spring security“丰富”。再次,也许我可以集成?
总结
Spring MVC 3: 支持所有要求,可能除了(1)。唯一的担忧是它似乎很复杂,我有一种模糊的不掌控感。我真的不想在我的应用程序增长后被框架所束缚。 Play: 非常愉快的体验。甚至很有趣。如果安全方案更先进,或者我至少可以与Spring Security集成(并找到如何做到这一点的文档),那就好了。 Restlet: 出于某种原因,这个框架让我感觉很好。编程方法引发了一种控制感。但如果我不能以某种简单易行的方式进行持久化,那么就不行了。我真的不明白为什么这不是内置的。难道不是每个人都需要吗?- 使用过上述任何一个框架的人有什么看法?
- 我的观察准确吗?
- 我是否遗漏了应该在此处的框架?
- 其他选择?