现在select一个Java Web框架?
我们正在将一个基于自定义开发的mvc框架构build的大型网站迁移到一个基于java的web框架,该框架提供了对ajax,富媒体内容,混搭,基于模板的布局,validation,最大html / java代码分离。 Grails看起来是一个不错的select,但是,我们不想使用脚本语言。 我们要继续使用java。 基于模板的布局是一个主要的关注点,因为我们打算将这个Web应用程序与具有相似function但外观和感觉完全不同的多个网站一起使用。
基于门户的解决scheme是否适合这个问题?
任何有关使用“Spring Roo”或“Play”的见解都将非常有帮助。
我的确发现了类似的post,但已经有一年多了。 事情一定会改变的!
编辑1:谢谢你的伟大的答案! 这个网站正在成为壕沟程序员信息的最佳单一来源。 不过,我期待更多关于使用portal-cms二重奏的信息。 Jahia看货物。 任何类似的东西?
基于门户的解决scheme是否适合这个问题?
就个人而言,我会远离大型门户解决scheme(他们往往是生产力的杀手)。 虽然我已经听说了有关Gatein的好东西,但是我没有任何实际的经验。
任何有关使用“Spring Roo”或“Play”的见解都将非常有帮助。
关于Spring Roo,我已经阅读过Spring Roo Vs(Wicket and Spring)等在Internet上的其他答案,但是我仍然不确定(也许我不明白),我不确定它的成熟度,更重要的是,我真的很想知道SpringSource在Grails和Roo上做了什么(不, Grails vs Roo – 为什么SpringSource推出了两个非常相似的技术?并不能说服他们两个都能存活)。
我不能说太多关于游戏。 我看过每个人都喜欢的演示,但是我想读一些真实的反馈。 在此之前,我会等。
我确实find类似的post(…)。 事情一定会改变的!
是的,没有:)但让我们进入演示文稿框架地狱:你的问题没有单一的答案(如一年前),那里有十几个框架,没有明确的赢家。 只举几个例子:
- JSF:很多关于这个基于组件的框架的怀疑者,包括我,所以我不是最好的人谈论它,但…
- JSF 2(+ CDI /焊接):JSF的怀疑者( Gavin King )鼓励“再看一眼”。 事实上,我认为JSF 2是一个很大的改进,特别是在CDI方面,但是…它还是很新的(理解,它缺乏反馈)。 如果您想拥抱Java EE 6,请检查它。
- Wicket:另一个基于组件的框架越来越受到关注。 我听到的主要是关于它的好东西:比JSF简单,devise好,可testing性高,HTMLdevise器友好等等。你可能喜欢它。
- 挂毯:只是不要(看你为什么停止使用挂毯? )
- Struts 2,Spring MVC,Stripes:基于Action的框架。 所有体面的,将涵盖您的需求 (个人,我喜欢条纹和其约定configuration方法,看Stripes与Struts2来了解它)。
- GWT,Flex,Grails:这些不是你想要的。 我不能真正谈论Flex和GWT的(最新版本),但我知道Grails确实有 一些 粉丝 。
实际上,我build议看看Matt Raible的演讲 ,他在比较web框架,展示自己的长处和弱点,收集事实和数字,展示趋势方面做得非常出色。我build议:
- 比较JSF,Spring MVC,Stripes 2,Tapestry和Wicket (还没有过时)
- 未来的Web框架:Flex,GWT,Rails和Grails (只是为了体验其他select)
- 比较踢屁股networking框架 (这是最新的)
真的,看看这些演讲,他们会帮助你find一个合适的框架(没有独特的答案,但你可以通过消除限制select),并可能改变你的观点。
我一直在使用Spring 3和Jquery一段时间,但听说Play,并给了它一个镜头。 我真的很喜欢它,Play是一个非常适合PHP和像Spring这样的重型Java框架之间的东西。
我最喜欢玩的东西是:
- 非常容易得到一个播放应用程序的地面,你必须很长的编码和configuration,以得到一个简单的Crud应用程序在屏幕上与Spring(虽然spring3使它变得更容易)。
- Spring Security非常棒,但它的代价是复杂性。 Play的安全模块非常简单,覆盖了大概90%的应用需求。
- 您可以更改代码并在浏览器中进行刷新,以便像使用PHP一样查看更改,而不必使用基于Servlet的框架执行整个重新部署。
- 错误消息很好地显示,大部分时间都不那么神秘。 玩仍然需要在他们的error handling工作
- Play有一个插件机制,非常简单。
- 对象持久性是非常好的,因为内存数据库和JPA带有框架,所以没有外部对象持久性工具的configuration。 从内存数据库到实际的RDBMS是configuration文件中的一行更改。
- MVC设置完成得非常好。 您扩展以创build您的域对象的Model类与JPA实体pipe理器集成。 他们不只是POJO的。
- 将URL映射到控制器是简单而灵活的,并且都在一个“路由”文件中。
- 每当你创build一个项目时,Play就会处理所有的jar依赖项,而且Play有一个工具可以让eclipse-ify(或者其他你喜欢的IDE)项目直接导入到你最喜欢的IDE中。
我不喜欢玩的东西
- 该文档还没有完成,还有很多未logging的function。
- 该框架是服务器,所以你必须为每个应用程序分配一个端口。 我想有人正在做一个虚拟主机插件,但我还没有看到它的行动。
- 这是年轻的,这个项目真棒,技术真棒,但真的需要更多的开发人员。 我很乐意花一些时间,我们会看到的。
我最喜欢的是Wicket 。 标记和java代码清晰分离。 很容易编写和使用组件。 简单的使用Ajax,可testing性。 您可以直接debugging到您的页面/组件,并且不会从JSF实现中获取神秘的错误消息;)
在性能方面也有一个比较好的JSF比较
我的前三个select是(按字母顺序):
- JSF
- Spring MVC
- Struts 2
他们:
- 有良好的Ajax支持
- 允许您制作实际的网站,而不是应用程序(如GWT)
- 稳定,有据可查,应用广泛
- MVC
- 纯Java
- 与Spring轻松集成为中间件
Play与ROR(Java中的ROR版本)非常相似
与其他答案相反,我想强调stream行的Web框架的缺点(恕我直言):
JSF2 – 已发布并已经过时。 还只有一些新闻/文章/博客文章/经验。 我很怀疑。 还在等待完全支持jsf 2的Richfaces / Icefaces的下一个主要版本 – 目前只有alpha版本可以下载。
Struts 2 – 似乎只是一个好东西,如果你仍然依靠struts,并想重构你的大部分代码。 否则:不要。
GWT – 我不喜欢单页和java-> javascript的方法。 我不确定是否可以轻松实现一个会话 – 多个视图/窗口。 对我来说,这个框架应该用于大量用户的单窗口丰富的互联网应用程序。
Wicket – 很好的方法,但有一点冗长,文档太less(除了在行动手册中的好门子,但是这只包括1.3)。 另外,对我来说,它缺乏build立在它上面的大项目。 而我目前无法看到检票口的路在哪里,或者是否已经被驱赶到死胡同。
Spring MVC – 还没有尝试过,但是你必须在你的类path中包含许多jar(spring mess)来正确地处理这个框架。 它依赖于JSP(在大多数项目中),我认为它已经死了。 而且你只能得到一个纯粹的MVC框架 – 所有其他的东西(Ajax和其他)必须被实现/集成。
Stripes – 一个小而精美的MVC框架,但文档太less,提交/提交者太less,发布太less,行业支持太less,邮件列表活动太less。
我也很好奇,如果我错过了一个主要的框架(我故意离开Tapestry),这可能是一个select(也为我)。
我在JAX-RS方面取得了巨大的成功。 它是唯一的Java Web框架,它具有某种types的JSR规范和除servlet和portlet规范之外的多个实现(尽pipe这可能是一件坏事)。
有一件事情对于Java来说不好而且好,就是你可以select和匹配框架(python也有这个特性/问题)。 它很好,因为你不必把所有的鸡蛋放在一个篮子里。
这是一个通用的Java Web应用程序堆栈配方:
Javascript / Flash +请求/响应处理+dependency injection+持久化
Javascript: JQuery,Prototype,Dojo
请求/响应: Spring MVC,Stripes和我最喜欢的JAX-RS(Jersey,Apache CXF)
dependency injection: Spring,Guice
持久性: JPA(Hibernate,Google App存储),Hibernate,JDO等等。
我也在使用AspectJ让Java“less吸”方面取得了巨大的成功。 通过使用Spring的@Configurable和AspectJ的ITD mixin,你可以得到类似于Domain对象的Rails(这实际上是Roo做的,但是你不需要Roo来做到这一点)。
我发现条纹是非常有效和令人惊讶的轻量级….它的目标是比struts更轻量级。 我从朋友那里听说JSF不值得打扰,尽pipe我没有第一手的经验,也不能用例子(!)来支持。
看看RESThub ,它遵循Play的相同原则! 而是通过重用一些企业级框架/工具(如Maven 3 / Spring 3 / Jersey / jQuery)来实现。
与其他框架相比,RESThub是非常具有破坏性的,因为它是一个完整的堆栈工具包,但没有任何服务器端的MVC或基于servlet的framworks。 相反,它使用基于jQuery UI的GUI,使用JAX-RS(REST)web服务和基于embeddedJs的Javascript模板系统。
服务器是无状态的,我们使用HTML5 sessionStorage来保持客户端的会话。 这种方法是为RIA和可扩展性devise的。
提供了一些演示应用程序(即使正在build设中)。
JSF是一个很好的框架,但是JSF 1.2在发布之前几年都缺乏远见。 JSF 2.0看起来很有希望,并且在JSF 1.2中增加了许多新的东西,比如ajax支持,facelets,Annotation支持和默认约定(lessXML),易于组件构build等等。
如果你关心DI的支持,它也可以很好的与Spring集成。
我会第二个spring的build议。 我不是一个巨大的粉丝GWT,我不认为Java – > JavaScript交叉编译器还有。 我正在使用服务器上的弹簧和客户端上的jQuery的AJAX应用程序。 尽pipe从技术上讲,jQuery并不是“开箱即用”的支持,但实现spring-MVC AjaxView非常简单,只需要大约25行代码。
也许有点迟到的演出,但我不得不提到Vaadin 。 编程只能通过基于组件的方法在Java中完成。 客户端 – 服务器通信更多地是关于用户交互而不是数据传输,所有业务逻辑驻留在服务器上。
分机GWT +spring
我认为你所寻找的是接近Jahia的东西。 它支持GWT,Mashups,媒体内容等
http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html
后台门户软件
几年前已经使用门户软件“ Backbase ”,这是不是很成熟。 但是发展很好,很容易。
看看ItsNat
ItsNat基本上是一个服务器上的Java W3C浏览器,非常简单(服务器中的DHTML),促进了AJAX密集型单页面应用程序
不仅仅是一个子弹,值得一提的是基于玩家的RIA框架。 防爆。 Adobe Flex + Java(当然,这可能会取决于你的“网站”是真正的“网站”还是更像是一个“应用程序”,你不会在Flex中做一个博客网站。
AJAX,
在AJAX这个术语的意义上,Flex通常使用AMF(一个比AJAX应用程序使用的协议更高效的二进制协议),尽pipe你也可以使用Flex来严格控制AJAX。 所以Flex支持AJAX,但也支持“比AJAX好”。
丰富的媒体内容,混搭,
由于Flex在Flash的“虚拟机”平台上运行,我认为很less需要添加。
基于模板的布局,
不知道这到底是什么,但它听起来像Flex mxml。
validation,
当然支持,但是如果你想要看起来,你可能会决定做一些自定义的东西。 (不是说你必须这样做。)好的是,你可以像你想要的那样复杂 – 不然。
最大的html / java代码分离
您不能通过使用像Flex / Silverlight / JavaFX这样的“虚拟机”开发方法来获得更多的分离。 这不仅可以使您的演示代码与服务器端逻辑和数据访问层保持分离,而且可以确保它们分离。 “虚拟化”您的开发环境可以使您跨浏览器兼容性,一致的目标平台,不用担心新浏览器或新的浏览器发布会破坏您的应用程序,顶级的类javadebuggingfunction,以及更专业/令人印象深刻的最终产品。