Play框架是臃肿的企业Java技术的一个简洁版替代品.基于RESTful架构,关注开发者的生产率.是敏捷软件开发的完美伴侣.
Play框架的目标就是减少使用Java进行Web应用开发时的痛苦.下面来看看是如何做到的.
一个无痛的Java框架
Play是一个纯Java的框架,你可以继续使用喜欢的开发工具和代码库.如果你已经是java平台的开发者,你不需要学习其他的语言、IDE和代码库。只是换成一个更具有生产力的Java环境而已。
修改bug,立刻看到效果
Java平台常以低生产率而被诟病,主要原因是重复而单调的编译-打包-部署过程。
这也是我们考虑重建开发流程,并为Play创造了一个更有效率的开发过程的原因。
框架直接编译你的Java源代码,热重载到JVM中,而无需重启服务。你可以编辑、刷新,即可立即看到你的修改效果了,就像在LAMP或Rails环境中一样。
如果愿意,你可以抛弃臃肿的Java集成开发环境,使用简单的文本编辑器就可以工作了,非常有意思!

如果出现了一个错误,框架将尽最大可能识别这个错误,并用友好的方式将错误信息显示出来。

错误堆栈跟踪被精简和优化过了,解决问题更加容易。看看模板的执行和Java的堆栈跟踪是如何优雅的集成在一起的吧:

简单的无状态MVC架构
既然数据库和web浏览器分别位于网络的两端,那为何一定要在两者之间保持状态呢?
虽然组件化的有状态JavaWeb框架通过自动保存页面状态简化了此需求的实现,但同时也带来了很多其他的问题:当用户打开第二个窗口时会发生什么?如果用户点击浏览器的后退按钮呢?
啥都不共享的架构(Share Nothing architecture)是从PHP、Rbuy、Ruby On Rails、Django等许多Web应用框架所推崇的。由于浏览器端变得越来越强大,现在,通过Ajax或离线存储等客户端技术来维护状态是非常容易的。
我们不需要修改包装HTTP模型来重建一个Web上的伪状态模型。“啥都不共享”架构的另一个好处是,可以更加容易的使页面各部分并发渲染,然后局部刷新(或局部增强)。
HTTP到代码的映射
如果你用过Servlet API或Struts之类的Java Web框架,你已经通过奇怪的Java API和概念使用了其对HTTP协议的抽象。而我们则认为,一个Web应用框架应该提供一个完整、直接的方式来访问HTTP和相关概念。这是Play和其他Java Web应用程序框架在根本上的不同。
HTTP,请求/响应模式,REST架构风格,内容类型协商,URI是Play框架的所有主要概念。
举例来说,绑定一个URI模式到Java调用只需要一行
GET /clients/{id} Clients.show
如果你在日常的web开发中经常遇到Ajax,REST、管理页面间的后退/前进等问题,那不妨试一试Play。
高效的模板引擎
我们喜欢JSP和表达式语言背后的思想。但我们为什么需要大量的配置文件才能创建一个标签库?我们为什么不能完全的访问背后的对象模型?JSP有大量的限制而且确实容易让人烦躁。这就是我们创建一个新模板系统的初衷:基于JSP的灵感,但没有JSP的限制。
你可能写过类似下面的代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
You have ${fn:size(emails.unread)} unread email(s)!
You have no unread emails!
我想你可能更愿意这样写:
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !
Play的模板引擎使用的表达式语言是Groovy,提供了与Java一致的语法。Play主要使用此模板系统来渲染HTML响应,你也可以用它来生成任何其他的文档,比如e-mail信息,JSON响应等。
加强的JPA
Java持久化API(JPA)是Java世界中最清晰的对象-关系映射API。如果你已经知道JPA,你将会惊讶于Play将其变得更加简单。不需要任何的配置,Play就会自动启动JPA实体管理器,并在代码重载时神奇的进行自动同步。
更进一步,如果你使用框架提供的play.db.jpa.Model基类,会使你的代码更加的简洁。比如:
public void messages(int page) {
User connectedUser = User.find("byEmail", connected()).first();
List messages = Message.find(
"user = ? and read = false order by date desc",
connectedUser
).from(page * 10).fetch(10);
render(connectedUser, messages);
}
测试驱动开发(如果你喜欢)
框架整合的测试运行器让你可以更加容易的开展测试驱动的开发(TDD)。你可以编写各种类型的测试,从简单的单元测试到完整的验收测试,然后使用Selenium直接在浏览器中运行它们。代码覆盖率也被会自动计算出来。

完整的应用框架栈
Play框架受我们已有的Java应用灵感启发。具有创建现代web应用所需的所有工具,包括:
- 基于JDBC的关系型数据库支持
- 基于Hibernate的ORM(通过JPA API)
- 集成缓存支持,如果需要使用分布式memcached系统也非常容易
- 直接的web service消费支持,包括JSON或XML(我们这里指的是真实世界的web service,而不是SOAP之类的东西)
- 分布式认证OpenID支持
- 你的应用可以部署到任何地方(应用服务器、Google App Engine,云,等等…)
- 图片处理API
- 模块化架构使你可以和其他人一起组合创建web应用程序。感谢应用模块,你可以通过简单的方式重用你的Java代码、模板和静态资源(例如JavaScript和CSS文件)
原文:http://www.playframework.org/documentation/1.2.1/overview