终于开始学习我们这次的主角:play!框架了。 首先,一如既往的我是抱着几个问题来开始学习play!的,那就是play!是什么?为什么要用play?它的基本原理(基础)是什么?
本文基本是基于play官方文档以及其翻译再加上一点点自己的补充理解写的,参考已经附加到文末了。51CTO.com上有一个关于play 的专题(拯救Java程序猿的神器:Play Framework --- 51CTO.com 专题),其中有一些play 1.0 文档的翻译,以及一些教程介绍,其中 Play!Framework学习笔记:初识Play 一文写的通俗易懂有趣。
Play是什么
既然我们说过应用框架是为了解决我们在程序开发是遇上的问题的,那么play!这个框架又是为了解决什么问题的呢? 我们从 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式---itao_o 一文给的中的例子可以发现建立一个易于维护的网络应用程序是十分困难的。“Java EE 平台的网络应用(web application)开发效率低下,有很大一部分原因是因为其重复和繁琐的“编译-打包-部署”的周期。”(需要编译java源代码,打成jar包,上传并配置到服务器) Play!框架就是为了简化这里流程,使得开发变得更有效率。
“Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。”
Play关键字
-
full-stack 框架: play包含了创建一个现代 Web 应用所需要的所有工具。
-
包含以下工具:
-
支持 JDBC 的关系数据库
-
基于 Hibernate ( JPA 接口 ) 的对象-关系映射框架( ORM )
-
集成的缓存支持,易用的分布式缓存系统( memcached )
-
简单直接的提供 JSON 和 XML 的 Web Service 服务
-
支持使用 OpenID 进行分布式的身份认证
-
可以将 Web 应用部署到任何地方(应用服务器,GAE ,云服务,等等)
-
图像处理 API
-
-
链接 Full-stack框架到底是指什么?(一个full-stack的框架,其各个层是无缝集成在一起的,同时在层与层之间利用回调的接口保持灵活的扩展性。例如:SSH(Struts+Spring+Hibernate),ruby on rails)
-
-
RESTful 风格:REST 是一组协作的架构约束,它定义了应该如何正确地使用Web标准,例如HTTP和URI。它试图使延迟和网络通信最小化,同时使组件实现的独立性和可伸缩性最大化。REST由五条关键原则组成。
-
链接 深入浅出REST
-
-
纯粹的Java:Play 是一个纯 Java 的框架,可以使开发者保持使用其喜爱的开发工具和类库。
-
基于Groovy 的模板系统:Groovy是一种语法Java十分相似并且运行在JVM上的动态语言。
-
无状态 MVC 架构:对象无动态成员变量(不保存页面状态),易于实现高并发,高可用。 MVC (Model–View–Controller )。
-
修改即时生效:没有了“编译 - 打包 - 部署”,直接“修改 - 保存 - 刷新”。
-
从HTTP到代码的映射:完全地直接地访问 HTTP 协议 而不必经过Java API
-
JPA持久化:加强了的JPA接口。
Play主要概念 链接 Play Framework介绍1--主要概念 --- 倚楼听风雨 & 官方文档 The main concepts
上面的链接是play官方关于其结构的文档 及其翻译,注意这是1.0的文档我们之后要用的应该是play2.0,但是我在2.0的文档中没有找到类似内容,我只能认为play2.0的结构与1.0相比没有大的变化,如果有错误的话请及时提醒。
一个Play应用遵循Web架构使用的MVC架构模式。下面的这幅图非常好的表现了这点。
主要来讲就是通过 Controller 监听HTTP请求然后通过Update改变数据层对象,通过Render改变显示。 这三层分别被放在play的不同package中(app/controllers, app/models, app/views),app/views 这个package里包含 HTML,XML等模板文件,Controller 从 Model 那里获取数据然后用模板去动态生成模型的表述(Representation)。
一个play请求的周期是像下图所示那样的:
- 框架收到一个HTTP请求
- Router匹配请求和Controller、Action,执行动作方法。
- 应用代码执行
- 绘制模型,呈现视图
- 动作方法的结构作为HTTP响应返回
总结
经过上面 长长长长的概念介绍(看起来没有多长,但是中间连接了许多关键词的解释,一一读并且试着理解下来还是觉得有些累的),主要还是想说明play的设计理念还是十分先进的,它也有着许多很强大的优点:
-
开发周期简单,play可以自动编译装载源文件的改动
-
从HTTP到代码的映射 : 智能捆绑HTTP参数到Java方法参数
-
简单的无状态的MVC架构
-
优秀的错误报告功能
-
内置基于Apache Mina的快速HTTP服务器
但是说到底,好不好要用一用才知道。而且经历的长长长长的概念之后我也有点迫不及待的想实际操作起来看看。在下面的学习中我就会尝试着写写看实际的例子。
附上一个技术研究上的链接,有需要的可以看一看:
Rails, Wicket, Grails, Play, Lift, JSP性能比较测试
浙公网安备 33010602011771号