我正在考虑使用Java创建自己的网站,并试图决定使用什么框架.但是,快速搜索Java框架可以选择50多个!
我的网站只是为了我自己在开始时构建它的乐趣,但如果它变得流行,那么它具有一定的可扩展性,或者至少能够为此重新设计将是一件好事.
更受欢迎的框架之间的主要区别是什么?有没有一个显着优于其他人的情况?例如,高流量企业应用程序与低流量小型应用程序.我也想知道有些人比其他人更容易学习和使用.
是否有人对这些框架有一些经验并可以提出建议?绝对数量的选择是否可以作为早期警告,以尽可能避免基于Java的Web开发?
我已经相当广泛地使用了Tapestry 3,Wicket,Echo和JSF.我真的建议你看看那些,并选择一个对你来说最容易的,并且最接近你喜欢的工作方式.
其中,对我来说最舒适的是Wicket,因为组件构建的轻量级特性和页面模板的简单性.如果您使用自己的db代码而不是Hibernate或其他框架(我对Wicket Hibernate或Spring Integration完全不满意),那就更加重要了.
如果你不介意用Java编写所有布局,那么Echo很棒.我知道现在有所不同,但我仍然认为该产品服务范围相当狭窄.它们似乎也改变了每个主要版本的开发模型.
Tapestry是一个很棒的产品,但在开发模式方面显然与其他产品有很大不同,因为它主要由一个人带领.Howard Lewis Ship无疑很聪明,但我对他们决定基本忘记每个版本的向后兼容性感到失望.但是,根据您的需求,这可能无关紧要,而且我总是发现Tapestry产品令人愉快.
JSF已经出了很多年了,但仍然感觉像是一个Struts人为修复Struts的所有问题而构建的东西.没有真正理解Struts的所有问题.它仍然有一种未完成的感觉,虽然该产品显然非常灵活.我使用它并对它有一些喜爱,对它的未来寄予厚望.我认为在JEE6中提供的下一个版本(2.0)将真正将它带入自己的版本,使用新的模板语法(类似于Facelets)和简化的组件模型(最终只有1个文件中的自定义组件).
当然,有一百万个较小的框架和工具可以获得自己的关注(Velocity用于基本需求,原始JSP,Struts等).不过,我通常更喜欢面向组件的框架.
最后,我建议您只看看Tapestry,Wicket和JSF,然后选择最适合您的那个.您可能会找到一个符合您喜欢的工作方式的工具.
我最喜欢的是Spring Framework.2.5 Spring Spring MVC是soooo kick ass,带有新注释,约定优于配置功能等.
如果你只是做一些非常简单的事情,你也可以尝试使用常规的Servlet API,而不是打扰框架.
我推荐面向组件的Wicket框架.它允许您使用普通的旧Java代码编写Web应用程序,您可以使用POJO作为所有组件的模型,而不需要处理大量的XML配置文件.
当我发现Wicket时,我已经成功开发了一个使用Struts的在线银行应用程序,并看到了Web应用程序开发的简单性!
我最近开始使用Stripes Framework.如果您正在寻找一个非常容易使用的基于请求的框架,但不会对您正在做的事情施加任何限制,我强烈推荐它.
它类似于struts,但它超越了它.甚至有一些插件项目可以让你使用很少的配置来使用hibernate或jpa.
虽然我听说wicket也是一个很好的框架,但是有很多很好的框架,但我还没有使用它.
我自己没试过,但我想
http://www.playframework.org/
有很大的潜力......
来自php和经典的asp,它是第一个听起来很有希望的java web框架....
更新:Tapestry 5.2已经淘汰,因此它不会像以前那样被抛弃.我的经验是Tapestry 4,而不是5,所以你的里程可能会有所不同.多年来,我对Tapestry的看法发生了变化; 我已修改此帖子以反映它.
我不能像以前那样推荐Tapestry.Tapestry 5似乎是一项重大改进,但Tapestry的主要问题不在于平台本身; 它背后的人是它.
从历史上看,Tapestry的每个主要版本更新都突破了对极端偏见的向后兼容性,远远超出人们的预期.这似乎是由于采用了需要大量重写的新编码技术或技术.
Howard Lewis Ship(Tapestry的主要作者)当然是一位出色的开发人员,但我不能说我关心他对Tapestry项目的管理.Tapestry 4发布后几乎立即开始开发Tapestry 5.据我所知,Ship非常致力于此,将Tapestry 4留在其他贡献者的手中,我认为他们并不像Ship那样有能力.在从Tapestry 3到Tapestry 4的痛苦转换之后,我觉得我几乎立刻就被抛弃了.
当然,随着Tapestry 5的发布,Tapestry 4成为了传统产品.如果升级路径不再那么残酷,我不会有这个问题.所以现在我们的开发团队处于一个相当不利的位置:我们可以继续使用一个基本上被遗弃的Web平台(Tapestry 4),对Tapestry 5进行令人发指的升级,或完全放弃Tapestry并使用另一个平台重写我们的应用程序.这些选项都不是很有吸引力.
据说Tapestry 5是为了减少从这一点开始更新破坏的可能性.一个很好的例子是在页面类中:在以前的版本中,页面类来自Tapestry提供的基类; 此类中不兼容的API更改是导致大量向后兼容性问题的原因.在Tapestry 5中,页面是POJO,它们在运行时通过注释"魔法Tapestry仙尘"得到增强.因此,只要保留了注释的合同,对Tapestry的更改不会影响您的页面类.
如果这是正确的,那么使用Tapestry 5编写新的应用程序可能会很好.但就个人而言,我不想再把手放在燃烧器上了.
免责声明:我在Vaadin(以前的IT工厂)工作
如果你正在做一些RIAish,你可能想看看Vaadin.这是一个面向开源UI的AJAX框架,对我来说很好用(我自己来自PHP背景).
有一个案例研究比较了Icefaces和Vaadin中相同的应用程序(即两个具有相同功能集的应用程序).简而言之,它表明UI开发速度要快得多.
虽然这项研究是在公司的维基上进行的,但我可以保证它是客观,真实和真实的,尽管我不能强迫你相信我.
经过一段时间的测试各种解决方案,对我来说原来是:
Spring MVC用于表示和控制器层(虽然没有Spring Webflow,因为我的流程基于ajax)
jQuery用于所有客户端的东西
Spring安全方面的安全性
Hibernate/JPA2
码头为了延续(彗星)
一个月非常陡峭的学习曲线,但现在我很高兴.
我还想提一下,我距离跳过所有Java内容并转而学习Scala/LIFT只是一步之遥.就我而言,Java中与尖端Web开发相关的一切(彗星,异步通信,安全性(是的,即使是Spring Security!))仍然有点像黑客攻击(证据证明我错了,pleeease !).对我来说,Scala/LIFT似乎是一个更加开箱即用的一体化解决方案.
我最终决定不使用Scala的原因是
作为项目负责人,我必须考虑人力资源,Java开发人员比Scala开发人员更容易找到
对于我团队中的大多数开发人员来说,Scala的功能概念虽然很好,但很难理解
干杯尔
我也听说过Spring Framework的好消息.但总的来说,我看过的大多数Java Web框架(esp Struts)都让我感到不知所措.
对于一个简单的应用程序,我肯定会考虑使用"原始"servlet和JSP,而不用担心采用框架.如果servlet编写得很好,那么在应用程序增加复杂性时,如果有必要,将来可以直接移植到框架.
我的选择是Wicket !!