Playframework介绍


Play 框架概述

有别于其他臃肿的企业级 Java 框架,简洁的 Play 框架提供另外一种选择,它关注于开发者的效率和 RESTful 风格的架构。Play 是 敏捷软件开发 的完美伴侣。


Playframework可以做什么

使用java继续开发

你不需要切换到另一种语言,其他 IDE 或者其他类库, 而仅仅是切换到一个效率更高的 Java 环境!

修改 bug 后自动重新加载

Java 平台因为较低的开发效率,已经是声名狼藉了,主要的原因就是重复和繁琐的“编译-打包-部署”的周期。

这就是为什么我们重新对这种开发周期进行了思考,并且通过 Play 让开发变得更有效率。

Play 框架自动编译 Java 源代码,然后直接热加载到 JVM 中而不需要重启服务器。你可以编辑代码,框架自动重新加载,然后直接就看到修改后的结果,就像在 LAMP 或者 Rails 环境中一样。

更有趣的是你可以根据自己的喜好,仅仅使用一个简单的文本编辑器进行开发,而不需要使用功能齐备的 Java IDE。

当有错误发生时,框架会尽最大的努力,辨别并显示出错误信息。

Play 甚至对 Java 堆栈跟踪信息进行优化,以便帮助你更容易地解决问题。看看 Java 堆栈跟踪是如何展示模板的执行过程的。


简单的无状态的 MVC 架构

想想,你在一端有一个数据库,另一端是一个浏览器,为什么非要在两者之间存在一个状态呢?

基于有状态和组件式的 Java Web 框架使我们很容易自动保存页面状态,但是这带来了很多其他问题:如果用户打开了第二个窗口时会发生什么?如果用户单击了浏览器的后退按钮呢?

PHP,Ruby on Rails 和 Django 等许多 Web 应用框架促进了 无共享(Share Nothing) 架构的发展。随着浏览器愈来愈强大,现在很容易使用 Ajax,或者离线存储去解决客户端的状态问题。

我们不再需要为了在 web 上重建一个伪造的状态而去 hack HTTP 模型。 无共享(Share Nothing) 的另一方面好处是,可以更加容易地并行地渲染页面的各个部分,更容易地是实现页面局部更新(渐进式增强)。

从 HTTP 到代码的映射

如果你使用过另外一种 Java Web 框架,例如 Servlet API 或者 Struts 框架,那么你已经看到了一个把 HTTP 协议和 Java API 以及一些奇怪的概念关联起来的抽象体系。Play 和它们想的不同,一个 Web 应用框架应该让你可以完全地直接地访问 HTTP 协议,这是 Play 和其他 Java Web 框架的一个根本性区别。

HTTP 协议,请求/响应模式,REST 架构风格, 内容类型(content-type)协商 ,统一资源标识符(URI) 都是 Play 框架涉及的主要概念。

例如,绑定一个 URI 模式到 Java 调用只需要这样一行:

GET    /clients/{id}        Clients.show

如果 Ajax,REST 风格和在页面之间维护前进/后退操作,是你在日常的 web 开发工作中需要面对的问题,那么请给 Play 一个机会吧。

高效的模板引擎

我们很喜欢 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" %><c:choose><c:when test="${emails.unread != null && fn:size(emails.unread)}">You have ${fn:size(emails.unread)} unread email(s)!</c:when><c:otherwise>You have no unread emails!</c:otherwise>
</c:choose>

我们认为,你一定更喜欢这样写:

You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !

Play 模板引擎使用的表达式语言是 Groovy ,它的语法和 Java 一致。 Play 主要使用模板引擎来渲染 HTML 内容,不过你同样可以使用它去生成其他内容,例如 email 邮件消息,JSON 等等。

JPA 持久化

Java 持久化接口( Java Persistence API )是一个简洁的 Java 版的 ORM 框架,如果你使用过 JPA ,你会惊讶于它在 Play 框架中变得如此简单。不需要任何配置,Play 会自动启动 JPA 实体管理器,并在代码发生修改时自动地同步。

而且如果你使用 Play 提供的 play.db.jpa.Model 作为超类时,它会帮助你把代码写得更漂亮。来看一下:

public void messages(int page) {User connectedUser = User.find("byEmail", connected()).first();List<Message> messages = Message.find("user = ? and read = false order by date desc",connectedUser).from(page * 10).fetch(10);render(connectedUser, messages);
}

测试驱动开发(如果你喜欢)

集成的测试可以让你更容易的去进行测试驱动开发 (Test-Driven Development) ,你可以写下各种类型的测试,从简单的单元测试到完整的 acceptance 测试,然后直接在浏览器中使用 Selenium 运行测试。代码覆盖率也会被考量。

全栈的应用框架

Play 框架的最初灵感是来自于我们自己的 Java 应用。它包含了创建一个现代 Web 应用所需要的所有工具,包含:

  • 支持 JDBC 的关系数据库
  • 基于 Hibernate ( JPA 接口 ) 的对象-关系映射框架( ORM )
  • 集成的缓存支持,易用的分布式缓存系统( memcached )
  • 简单直接的提供 JSON 和 XML 的 Web Service 服务(我们说的是 真正 的 Web Services,而不是 SOAP 之类)
  • 支持使用 OpenID 进行分布式的身份认证
  • 可以将 Web 应用部署到任何地方(应用服务器,GAE ,云服务,等等)
  • 图像处理 API

Play 模块化的架构使你可以把你的 Web 应用和其他很多的模块组合起来。多亏了应用模块( application modules ),利用它你能够以一种非常简单的方式重用你的 Java 代码,模板,静态资源(如 JavaScript 和 CSS 文件)。

Playframework介绍相关推荐

  1. 轻量级 Java Web 服务框架漫谈

    博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔(&q ...

  2. 聊聊轻量级JavaWeb服务框架

    来源:my.oschina.net/greenlaw110/blog/3065695 概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖 ...

  3. play(一) play介绍,helloworld项目

    1.下载安装包并安装: (1)登录http://www.playframework.org/ 直接点击Download链接,下载.zip文件.选择版本play-1.4.2.zip (2) 直接解压该文 ...

  4. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  5. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  6. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  7. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  8. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  9. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

最新文章

  1. python加上子类的特性_Python--面向对象三大特性
  2. pandas的自带数据集_盘点 | Python自带的那些数据集
  3. mybatisplus修改单个属性_第二节 官封弼马温——类的属性
  4. 使用Firefox或Chrome的雇员表现更好不频繁跳槽
  5. php加mySQL制作网络硬盘_PHP实现的简单网络硬盘
  6. 浅谈 TypeScript【上】-- Flow 静态类型检查工具
  7. “搞机器学习没前途”
  8. 互联网时代: 从Uber的供需匹配看开发需求
  9. 【路径规划】基于matlab粒子群优化蚁群算法最短路径规划【含Matlab源码 076期】
  10. Drools规则引擎的基本使用
  11. 常微分方程机敏问答[3] #20210622
  12. JAVA根据手机号获取省份和地区
  13. 暗黑模式?安卓适配一波
  14. matlab中acos得到的弧度范围,C语言acos()函数:求余弦值为 x 的弧度数
  15. 点餐App火爆背后的冷思考
  16. Creo AFX钢结构设计视频教程
  17. c语言指针什么时候加星号,c语言中指针前面的星号,什么时候可以省去,什么时候又必须带上呢?(转载)...
  18. 训练集、验证集、测试集的作用和意义
  19. 武汉星起航——卖家关注!亚马逊为促进行业发展,近期有了新动作
  20. 安卓加固方案从落地加载到类指令抽取编写报告

热门文章

  1. 20-《电子入门趣谈》第四章_自己制作电路板-4.1面包板的介绍和经典案例使用教程
  2. C# HttpWebRequest 模拟下载
  3. 人工神经网络理论及应用pdf,人工智能的相关书籍
  4. Python分布式爬虫实战 - 豆瓣读书
  5. 解不等式之调和级数不等式
  6. 微信小程序分析送积分功能如何实现_微信小程序积分商城解决方案(一)
  7. CSS设置原生table表格边框样式(添加表格横线)(附最后表格td画斜线)
  8. ros执行catkin_make显示 /opt/ros/noetic/share/catkin/cmake/safe_execute_process.cmake:11 (message):`错误
  9. GB50016计算机房设计规定,建筑设计防火规范GB50016-2014
  10. 【林轩田】机器学习基石(七)——VC维