play框架之简介
Play Framework是一个开源的Web框架,背后商业公司是Typesafe。要介绍Play之前,首先理清Play的两个不同的分支。 Play 1.x 使用Java开发,最新版本是1.3.1,只支持Java项目。从11年开始就进入了维护阶段,新项目一般不考虑使用Play1。 Play 2.x 使用Scala和Java开发,同时支持Java和Scala项目。 这里主要介绍最新的Play2.4 for Java。有一点需要提前说明,虽然Play2主要由Scala开发,但是对于项目中的一般开发人员而言, 使用Play可以完全不懂Scala,具体情况后面会说明。
一、Play的特性
1. Play2的模板引擎
Play2的模板是很强大并且容易上手的. 相对于Java领域其他模板引擎(Freemarker, Velocity, JSP, Groovy, etc), 主要有三个特点.
1) 简单易上手, 没有JSP里面繁杂的内置对象和指令, 所有功能都通过方法调用完成.
2) 主流IDE中都支持Play模板的静态类型检查, 类似JSP.
3) 支持反向路由.
2. 热部署
这个上面介绍过,不用重启服务器。
3. 内置dev/prod环境,内置部署脚本
平常开发的时候使用run启动Play,是跑在dev模式。 Play会定时扫描源码目录进行热更新,并且类都是访问的时候再加载,提高启动速度。 使用start启动项目就运行在prod模式。Play内置dist命令,可以把所有的文件打包成一个zip,解压之后直接运行bin目录下的可执行文件即可启动项目,除了JDK之外无须任何其他外部依赖。 这大大减轻了运维成本,同时也能够很方便的进行持续集成(CI)。
4. 使用Play开发的Server大部分能做到Stateless
这个之前也说过,Play抛弃了Servlet/JSP里Session等概念, 内置没有提供方法将对象与服务器实例进行绑定(你要使用HashMap存的话Play也没办法)。 推荐的做法是使用外部缓存, 比如Redis, Memcached等。可能有人会觉得没有Session是Play的一个缺点(Play里的Session和Servlet Session不是一回事), 但是只要你开发过流量大一点的应用, 你就会理解这点。
5. 好用的配置库
如果你之前开发过Java项目, 肯定写过**.properties或者管理过一大堆的xml。Java内置库对properties文件的处理是很弱的,你不得不自己写一些工具类去进行处理, 而且properties文件还不支持更复杂的语法。Play使用Typesafe Config库,配置文件使用HOCON格式,默认配置文件为application.conf。 你能很容易读取里面的配置, 并且你也可以把自己的配置写在里面。所以项目中基本不需要使用properties或者xml文件了,除了第三方库需要的。
6. Play插件
RoR框架之所以好用,主要原因之一就是围绕RoR有相当丰富的插件可供选择,很多业务功能甚至都不需要开发就能实现。Play的插件数量当然相对于RoR还是要少一些, 不过你遇到的需求基本都有现成的插件可以使用。比如发邮件, 授权和验证, sitemap生成,第三方登录等等。自己写一个插件也很简单。
7. 优秀的测试支持
因为Play诞生的时候TDD已经很火热,所以Play对测试的支持非常好。
8. 优秀的REST支持
Play2从诞生起就能很容易的支持RESTful风格的架构
转载自:http://blog.csdn.net/u011225629/article/details/47971093
play框架之简介的更多相关文章
- DWZ富客户端框架+DWZ简介及其使用+DWZ讨论组
DWZ富客户端框架+DWZ简介及其使用+DWZ讨论组 地址: DWZ富客户端框架:http://jui.org/#_blank DWZ简介及其使用:http://blog.sina.com.cn/s/ ...
- 从零开始写一个武侠冒险游戏-0-开发框架Codea简介
从零开始写一个武侠冒险游戏-0-开发框架Codea简介 作者:FreeBlues 修订记录 2016.06.21 初稿完成. 2016.08.03 增加对 XCode 项目文件的说明. 概述 本游戏全 ...
- Twitter的RPC框架Finagle简介
Twitter的RPC框架Finagle简介 http://www.infoq.com/cn/news/2014/05/twitter-finagle-intro
- android hook 框架 libinject2 简介、编译、运行
Android so注入-libinject2 简介.编译.运行 Android so注入-libinject2 如何实现so注入 Android so注入-Libinject 如何实现so注入 A ...
- 自制简单的.Net ORM框架 (一) 简介
在自己研究ORM之前,也使用过几个成熟的ORM方案,例如:EntityFramework,PetaPoco,Dapper 等,用是很好用,但是对自己来说总是不那么方便,EF比较笨重,Dapper要自定 ...
- 河北省重大技术需求征集系统原型(MVC框架业务流程简介)
这段时间了解了一些MVC框架. 一.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式.它的模式是JSP + se ...
- Xposed 框架 hook 简介 原理 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 国内优秀MVC开源框架jfinal简介
JFinal简介 JFinal 项目开发始于2011年初,作者詹波(James Zhan)曾任搜格信息技术有限公司Java架构师,北京信息管理科学研究所CTO,现任微格网际(北京)科技有限公司联合创始 ...
- 前端测试框架jest 简介
转自: https://www.cnblogs.com/Wolfmanlq/p/8012847.html 作者:Ken Wang 出处:http://www.cnblogs.com/Wolfmanlq ...
- Spring.NET依赖注入框架学习--简介
Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...
随机推荐
- 简单的JAVA MVC框架模式--Java-servlet-JavaBean
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...
- Qt浅谈之十八:GraphicsView框架事件处理(有源码下载)
一.简介 GraphicsView支持事件传播体系结构,可以使图元在场景scene中得到提高了已被的精确交互能力.图形视图框架中的事件都是首先由视图进行接收,然后传递给场景,再由场景给相应的图形项. ...
- Java中文件的上传与下载
文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileupload实现文件上传,下载 [u ...
- 线程池;java的线程池的实现原理;适用于频繁互动(如电商网站)
线程池是一种多线程处理形式,处理过程中将任务加入到队列,然后在创建线程后自己主动启动这些任务.线程池线程都是后台线程.每一个线程都使用默认的堆栈大小,以默认的优先级执行.并处于多线程单元中. 假设某个 ...
- Qt Installer Framework 3.0.1 Released(功能比较强)
We are happy to announce the release of Qt IFW 3.0.1. 3.0.1 is fully compatible with 2.0.5, which me ...
- Android 混淆代码汇总
为了防止别人对自己被盗的劳动,混淆代码可以被反编译可以有效地防止,以下在下面的代码混乱总结的步骤: 1. 大家可能已经注意到一个新的项目将在下面看到的物品都有这个proguard-project.tx ...
- WPF媒体资源和图片资源寻址方式的杂谈
WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上.WPF中,资源定义的位置决定了该资源的可用范围.资源可以定义在如下范围中: (1)控件级:此时,资源只能 ...
- 在WPF中减少逻辑与UI元素的耦合
原文:在WPF中减少逻辑与UI元素的耦合 在WPF中减少逻辑与UI元素的耦合 周银辉 1, 避免在逻辑中引用界面元素,别把后台数据强加给UI 一个糟糕的案例 比如说主界 ...
- <input type="image"> 和 <img> 用法区别
原文:<input type="image"> 和 <img> 用法区别 w3c定义如下: Image <input type="image ...
- java的clone()、浅拷贝与深拷贝
clone()方法是Object的native方法.protected native Object clone() throws CloneNotSupportedException; 声明为pro ...