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

Play 框架的目标是让基于 Java 的 web 应用开发变得更加容易,让我们看一下它是怎么做到的。

没有痛苦的 Java 框架

Play 是一个纯 Java 的框架,它让你保持使用你喜欢的开发工具和类库。如果你已经是一个使用 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 应用框架促进了 无共享(ShareNothing) 架构的发展。随着浏览器愈来愈强大,现在很容易使用 Ajax,或者离线存储去解决客户端的状态问题。

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

从 HTTP 到代码的映射

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

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

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

(代码)

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

高效的模板引擎

我们很喜欢 JSP 和 表达式语言背后的思想,但是为什么我们需要这么多的配置文件才能创建一个标签库呢?为什么我们不能完全地访问对象模型呢? JSP 有很多的约束,这的确令人沮丧。这就是为什么我们创建了一个自定义的模板系统,灵感来自 JSP ,但是没有它的那些约束。

你,还有其他人,应该已经疲倦了写类似这样的代码:

(代码)

我们认为,你一定更喜欢这样写: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作为超类时,它会帮助你把代码写得更漂亮。来看一下:

(代码)

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

集成的测试可以让你更容易的去进行测试驱动开发 (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 文件)。

Play Framework相关推荐

  1. Tengine Framework基础

    Tengine Framework基础 最受开发者喜爱的边缘AI计算框架 Tengine是OPEN AI LAB推出的自主知识产权的边缘AI计算框架,致力于解决AIoT产业链碎片化问题,加速AI产业化 ...

  2. EF-Entity Framework 相关技术点收集贴

    不定期.偶尔.添加更新 在网络上看到或者自己开发过程中碰到的EF-Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012 ...

  3. Qt Installer Framework实战

    Qt Installer Framework是Qt发布的安装程序支持框架,只需要简单的配置就可以生成安装文件,同时可以通过javascript脚本来定制安装过程. 目录结构 config packag ...

  4. 在虚拟机中 windows 2003 装.net framework 3.5 出现问题.

    错误信息: [11/27/09,08:52:50] Microsoft .NET Framework 2.0a: [2] Error: Installation failed for componen ...

  5. .Net Framework 3.0 概述

    Microsoft .NET Framework 3.0, the managed programming model for Microsoft® Windows®, includes the .N ...

  6. MIS开发中.net Framework的打印功能

    Microsoft .net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下. 打印操作通常包括以下四个功能 1 打印设置 ...

  7. python导入matplotlib出错_解决导入matplotlib的RuntimeError: Python is not installed as a framework....

    import matplotlib.pyplot as plt 报错: RuntimeError: Python is not installed as a framework. The Mac OS ...

  8. ios Standard Framework和Umbrella Framework

    Standard Framework:标准库,通过引用对应的header文件而不是引用master header 文件来引用类(也可以通过引用Master Header file来引用需要使用的类), ...

  9. ios .framework动态库重签名

    真机上运行.framework时,如果报 dyld'dyld_fatal_error:dyld: Library not loaded: @rpath/XX.framework/XXReference ...

  10. ios .a和.framework

    创建Aggregate来合并模拟器和真机通用的framework 然后在Build Phases下New Run Script Phase创建合并脚本: # Constants SF_TARGET_N ...

最新文章

  1. 研究人员使用脑机接口从神经信号中重建单词
  2. Kobe Bryant crash report
  3. java富文本编辑器wangEditor-3.1.1的使用流程
  4. extras mibs php7,ubuntu编译安装php7遇到的问题及解决方案
  5. 中兴通讯与寒武纪合作 加速5G时代边缘智能
  6. hack (浏览器兼容css hack)
  7. java设计app_一个APP的诞生——从零开始设计你的手机应用
  8. 关于javascript中apply()和call()方法的区别
  9. 拓端tecdat|TensorFlow 2建立神经网络分类模型——以iris数据为例
  10. CodeForces - 786B Legacy (线段树+DIjkstra+思维)
  11. 搜索引擎漫谈以及 Zinc 简介
  12. visio常用快捷键_Visio快捷键大全
  13. import settings 错误
  14. ibmr系列服务器怎么装架子,【R440/R540/R640/R740 R820 R930 DELL服务器导轨 滑轨 支架 理线架】价格_厂家 - 中国供应商...
  15. Stata:xtivreg与xtivreg2的区别
  16. mysql tcp性能优化_MySQL性能优化: 使用pt-query-digest分析慢查询日志
  17. sed 技巧一例:特定位置插入
  18. 4296. 【NOIP2015模拟11.2】有趣的有趣的家庭菜园
  19. 张量(Tensor)操作
  20. Error running 'PY201': Cannot run program C:\Users\GJ\AppData\Local\Programs\Python\Python37\python

热门文章

  1. Intellij idea -1-解决报错:Error executing Maven. The specified user settings file does not exist: C:\Use
  2. 三点估算法 PERT计划评审技术
  3. SmartWin++笔记
  4. mysql练习题及答案_mysql练习题及答案.doc
  5. 工控电脑服务器维修,2U机箱厂家分享:工控计算机电脑主板坏了如何维修?
  6. 计算机怎样同时运行多个程序的?进程相关概念介绍
  7. 学会python爬虫,这简直就是二次元宅男的福利
  8. 视频伪原创工具 苹果手机视频md5值修改
  9. 安卓高级8 支付宝支付
  10. 送书【新书】 |《python数据科学实战》