原文链接:vanadiumlin.iteye/blog/947046
Play Framework介绍
Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。颠覆臃肿的JavaEE开发框架(bloated Enterprise Java stacks)的Play框架1.0发布,它在很多方面有其革命性的独创,也有助于我们了解现在JavaEE框架的不足。
Play框架吸收PHP RUBY动态语言的特点,采取即时源码编写,即时激活,框架本身融合了编译器和服务器。取代了 compile-package-deploy 过程,提高产品的开发效率。Play框架甚至提供在线编辑器,在线修改BUG后即时投入应用。
主要架构特点:
1、一个非常简单的开发周期。此框架自动编译和重新装载源文件的任何改变。
2、简单的无状态MVC架构:智能捆绑HTTP参数到Java方法参数。
(Play框架认为一边是数据库保存状态,一边是浏览器也可以保存状态,那么还要中间件MVC保存Session状态干什么呢?HttpSession有很多问题,虽然可以处理针对某个用户的状态,但是万一用户中途离开怎么办,HttpSession对资源消耗,以及在可伸缩性方面是有问题的。Play框架秉承share nothing架构思想,不再象黑客那样破解原本自然正常Http模型,然后强行植入状态,无状态架构可以并行同时输出多个页面,提高Web性能。)
3、内置基于Apache Mina的快速HTTP服务器。
4、一个基于Groovy的强大的模板引擎,具有多层继承,定制用户标签的能力,Play框架认为JSP & Expression Language模板机制很好,但是需要太多配置,吸收其模板设计,剔除配置。等。
5、优秀的错误报告功能:当发生异常,此框架会直接显示出错代码,甚至是模板代码。
6 、RESTFul
众所周知的Servlet API 和Struts其实是扭曲的,使用奇怪的API将Http协议隐藏起来,Play框架认为一个Web应用框架应该给用完整的直接的对Http调用和使用,这其实就是RESTFu
l精神。这样 URI是play framework的主要概念。
对一个Java对象的调用,不是写Java语句,而是使用URI就可以,如下:
GET /clients/{id} 实际是调用Clients对象的show方法。
7、集成JPA 持久层
(Play框架采取JPA作为持久化,并且使其更方便使用。个人意见:这段代码倒是直接将持久层和表现层直接耦合在一起,没看到Domain Model了。看来DDD需要普及到每个角落不容易啊。)
8、整合了缓存支持,可以使用memcached作为分布式缓存。
9、融入了OpenID 这样单点登录SSO技术。
10、提出组件重用,可以重用各种组件,包括CSS Javascript
个人点评:总体来说,Play框架是一个与Struts2 JSF Tapestry竞争的框架,但是又整合了持久层和服务器。
业务系统市场分析:
90%的web业务开源系统都是php版本的,特别是新兴产品的开源实现,java的身影几乎销声匿迹了。可惜j要ava出身的人去阅读php风格的代码简直是一种受虐。这其实说明一个道理,java优美的架构还是很有价值的。但优美+务实的平衡才是最佳选择。
框架对比:
运行方式与服务器兼容性:
Play 应用可使用这么几种方式运行:标准Servlet容器、独立服务器、Google App Engine、Stax 云计算平台,等等。
你也可以将应用发布到标准的应用服务器上执行,大部分应用程序支持Play应用,下面的应用服务器都可以用来运行Play应用。这些应用服务器经过测试是支持Play 1.0.2的,但其他版本尚未经过充分测试。
JBoss 4.2.x | JBoss 5.x | JBoss 6M2 | Glasshfish v3 | IBM Websphere 6.1 | IBM Websphere 7 | Geronimo 2.x | Tomcat 6.x | Jetty 7.x | Resin 4.0.5 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
详细分析与外界介绍:
下图是 Play Framework 框架中用到所有的 jar 包的集合,位于 {play}/framework/lib 目录。
Play! Framework 是07年的一个项目,08年开源,09年11月25日发布了1.0版。发布后我就一直在学习这个框架。现在正式发布版本已经是1.01版,而且1.1版本也在每日更新。可以在 下载已发布版本,和每日的最新版。
bc. # Additional modules
# ~~~~~
mdoule.gwt=../gwt
s=../cms
module.forum=../forum
module.directory=../directory
学习Play!的过程中,最经常的感受就是——简直太简单了!并不是说Play!是一个设计简单的框架,相反学习中发现处处都会发现Play!设计的完整,这种完整性甚至包括网站设计和学习文档。Play!的简单之处在于它学习和使用起来非常简单。使用Play!新建项目,所有的目录结构都会自动建立。Play!摒弃了传统的JSP,Servlet技术(这太伟大了),自己提供了一套非常易用的MVC 框架。Play!内建了JPA的支持,内置了Hibernatephp文件管理系统mvc 源码作为默认的持久化引擎。
Play! 还内置了HSQLDB 数据库,支持内存数据库,非常方便做项目开发和测试。
Play!的Controller采用命名约定:
<form action="@{ateUser}">
<input name="name" />
<input name="password" />
<input type="submit" value="Create User" />
</form>
无需其他任何配置,Play!会自动映射form中的name和password参数至createUser方法。
View层Play!使用以Groovy语法写好的html模板中去以render()方法的参数渲染,并将结果回传给客户端。
外界介绍:
Play!虽然使用简单,扩展性却非常强大,篇幅所限所述不能详尽。 是Play!的,推荐大家到这儿看看。Play!的文档非常详细,教程中有份手把手做一个Blog引擎的教程,相信照着做一下之后一定会让你学会Play! Framework,那时你一定会爱上她的!
貌似正常的开发流程,总要面对项目原型构建的问题,重新发明轮子,或者把以前的家伙式儿再搬出来reuse一下?此时此景,都不是最佳选择。
90%的web业务开源系统都是php版本的,特别是新兴产品的开源实现,java的身影几乎销
声匿迹了。可惜j要ava出身的人去阅读php风格的代码简直是一种受虐。这其实说明一个道理,java优美的架构还是很有价值的。但优美+务实的平衡才是最佳选择。这不,基于java的类RoR风格的full-stack framework的话题又回到我的视线内了,几年前是appfuse,基于此搞过几个小项目,但发现熟悉appfuse本身就已经稍重了。而appfuse看起来还真只是个toy,demo show +study 为主。
后来国内出现了springside,应该是借鉴了appfuse的思想,更简单,更符合国情一些了。基于springside开发中小项目也没问题,但国内的开源产品很少能在真正意义上通过多人协作持续变得越来越健壮,版本发布计划总是落单,向下兼容,核心代码等品质还不稳定。
再到今天的play!framework,几个同事也对play!framework很看好,貌似是目前java阵营里最ROR,同时java开发人员又最易上手的框架了。
不得不承认,web开发已经完全是php等脚本语言占优了,就算你开发新一代的企业级产品,你也会发现互联网化+轻量化也是个潮流。就算是IBM team collaboration software - Lotus Quickr ,虽然server端是开发了10多年的老系统。但quickr要做的也是在应用层上基于server做业务扩展。这样,再复杂的系统,在前端应用层上来看其实也可以轻装上阵了。
很多java开发人员对ROR风格不屑一顾甚至根本不关注,不了解,也许是被sun+ibam下毒太深了吧?其实想想,spring的基于接口 bean管理的xml在很多时候也是写一次,到项目下线也未曾修改过。
java本身也太过强调仅仅java语法层面上的通用,抽象,配置,甚至太OO了,在java诞生的时代,这种做法是很先进的,而当今web应用开发算是一个特定领域,这种不与时俱进,不考虑web开发实际特点的做法有点杀鸡用牛刀之嫌,必然打不过转为web开发场景设计的新的动态脚本语言。 java毕竟不是专为web开发设计的语言,随着时间的推移,java的身躯越来越笨重,版本升级很慢,期待jdk7加强对动态语言的支持:JSR292。但这还不够,就像ruby on rails一样。还得有一个rails框架支撑。java官方的脚步实在是。。。只能用非官方的框架了。
在中国,企业级系统至少一大半是比互联网线上产品还小的系统。特别是中国互联网公司的玩得还是硬气功,之内的企业级系统开发很多还是停留在一个人,两三个人搞定一个系统的层次上。那这样看来,就算有人认为play!framework不一定适合巨复杂的业务系统,那怎么也很适合这样场景的系统开发了吧。
appfuse更新的越来越慢,是有原因的。因为play!framework这样的新一代类java ROR full-stack framework已经初长成。Grails,JRuby,也占据新一代java 类ROR full-stack framework的市场,但与之相比,play!framework的好处是兼容现有的java代码,语法,更加适合过渡期的需要,当然由于基于java这种强类型的静态类型安全检查语言,这也势必通过一些hack手法使play!变得很ROR。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论