Play framework | 新手入门

前言

最开始接触 Play Framework 是从 Android 开发转型为 Java 后端开发,公司有现成的项目可以模仿,再加上本身对新技术的追求,便义无反顾地拥抱了它。之后花费不少时间打磨钻研,对比以前了解过的 JavaEE 开发,深觉 Play 真是太方便了。

我不想复制 Play 官网上的介绍,我觉得找到这篇新手入门文章的同学,都是对 Play 有一定的兴趣,或者也像我一样,有现成的项目需要快速了解它。

不管怎样,你需要知道的就是,Play 也是排行前五的 Java Web 开发框架,通过 环信-本周头条 你可以找到它的身影,里面有一些比较中立的观点。

另外,从开发者角度来看,Play 也是一个全栈式开发框架,使用简单的前端技术(HTML、CSS 和 JavaScript)加上内置的模板引擎,就可以渲染出绚丽多彩的网页,并且它从上到下都是纯异步的,基于线程池对每个请求都分配处理线程,构建于 Java8 之上的 Play 天生就支持并发编程,可以更合理地分配资源。

正文

更新这篇新手入门时,Play 的版本是 2.6.15,所以接下来的内容,都是基于这个版本的吐槽。

现在 Play Framework 官方发布的稳定版本是:2.8.0

而 Github 上的 Play 仓库已经在着手准备 2.9.0-SNAPSHOT 版本。

由此可见,Play 的社区也很活跃,至少他们在积极开发新功能和修复缺陷。

一、快速启动

按照惯例,我们通过启动一个 Hello World 项目,来观察 Play Framework 到底有多简单。

1.1 准备环境

查看 Play Requirements 得知运行 Play 程序需要:

  1. Java SE 1.8 或更高版本
  2. 构建工具:推荐是最新版本的 SBT

我不准备介绍如何搭建开发环境,因为这是 Java 开发的基本功,即便你现在不会搭建,通过百度/谷歌等搜索引擎,你也可以轻松学会这一点。

对于构建工具,其实只要你使用 IntelliJ IDEA 旗舰版,那就不用额外下载,IDEA 已经内置好了。另外,在所有 Play 的样例中,也是自带了构建工具,所以暂时可以跳过它们。

1.2 下载运行

包含 Hello World 的示例项目已经打包成 zip 压缩文件,并且拥有两个不同的开发语言版本:

这里我们下载 Java 版本,并解压出来:

在 Windows 10 上,按住 Shift 键点击目录中的空白部分,选择 在此处打开 Powershell 窗口(S),然后输入命令 ./sbt run 即可运行。

你也可以通过其他命令行跳转到这个目录,然后运行 ./sbt run 命令。

经过漫长的等待后,Play 程序终于运行成功:

通过在浏览器中访问 http://localhost:9000 可以看到 Play 呈现在用户面前的样子:

提示:Play 在开发模式下内置了热部署插件,因此每当访问 Play 应用时,如果检测到未编译字节码(或源代码已被修改),则会自动触发一次编译(需要等待一会儿),以便展现最新样式。

二、基本开发

Play 2.8.0 版本的主页完全变了模样,不过不用担心,所谓万变不离其宗,只要知晓其中的关键开发流程,它再怎么变也不怕。

2.1 路由表

首先用记事本打开示例项目中的 confg/routes 文件:

路由表提供所有接口的相关信息,我们可以试着添加以下内容到文件尾行并保存:

GET  /hello  controllers.HomeController.hello

然后我们刷新浏览器,查看 Play 是否重新编译代码,以及在编译过程中出错,是如何反馈的:

非常清晰的错误反馈,它告诉我们,在哪个文件的哪一行代码出了问题,具体是在 controllers.HomeController 中没有找到 hello 成员。

2.2 控制器

现在让我们打开 app/controllers/HomeController,添加一个 hello 方法:

    public Result hello() {
        return ok("hello Play!");
    }

访问 http://localhost:9000/hello,看看 Play 会带给我们什么样的信息:

2.3 视图渲染

接下来,我们复制 app/views/index.scala.htmlapp/views/hello.scala.html,修改并保存:

做完这一步,我们还需要引用这个新文件,现在进入 app/controlles/HomeControllerhello 方法,修改为以下内容:

    public Result hello() {
        return ok(views.html.hello.render());
    }

现在让我们刷新浏览器,看看发生了什么变化:

Play 的视图由 Twirl 引擎负责渲染,它通过一些模板语法将各个页面模块化,开发者只需要关心 <body> 里面的细节,而不用每次都添加 HTML 的重复内容。

本节内容基本参考 http://localhost:9000/tutorial 教程,有兴趣的同学可以深入探索一下。

三、官方文档

我希望简单介绍一下官方文档,以便大家遇到问题,可以第一时间找到解决方案。

Play 官方网站分为三大部分:1.开始入门;2.阅读文档;3.加入讨论。

第一部分的开始入门,我们已经在前面简单学习过,想要深入了解的话,可以点击传送门进去看看。

第三部分的加入讨论,不是本文的重点,因此将略过不提,有兴趣的同学可以去一探究竟。

所以主要讲解的是第二部分:阅读文档。

3.1 文档侧边栏

在文档侧边栏的顶部位置,可以选择文档版本开发语言文档语言,可惜没有中文。

接下来是文档主目录,列举了一些文档章节,比如:最新发布、开始入门、Hello World 教程等等。

最后是一些相关书籍,有兴趣的同学可以看看。

3.2 文档核心

整个文档的核心部分是 Working with Play 章节,大概看一下它的结构:

它分为 Java 开发者和 Scala 开发者需要了解的内容,以及公共的主题。

这里以 Java 开发者的主要内容为例,列举需要重点了解的内容:

还有公共主题里面的重点了解内容:

文档的其他内容也非常重要,只是对于初级开发者来说,除非项目需要,否则只是看看即可。

四、在 IntelliJ IDEA 中开发 Play

这部分内容是以前写的,可能与最新版本的 Play 有一点点出入,仅供参考。

4.1 打开 Play 项目

首先确认已经关闭运行 Play 的命令行,这一点很重要,因为 [SBT] 构建时,采用的是单任务模式,其他任务没有退出,将不能进行下一次任务。

运行 IDEA,在欢迎页面点击 Open,选择下载下来的 [入门样例]:

继续展开,选择项目目录下的 build.sbt 文件,点击 OK 按钮:

这是作为 [SBT] 项目来打开,那么我们选择 Open as Project

所有选项都保持默认状态,点击 OK 按钮,这就在 IDEA 中打开了这个项目。

需要注意的是,你有可能会看到 IDEA 提示需要安装 Scala 插件:

点击 Install plugins,等待所有安装完成后,重启一下 IDEA,然后再下载一些依赖,比如 scala-sbt,这样就可以在 IDEA 中玩耍 Play 样例了。比较舒服的是,一般这样的步骤只需要进行一次,以后即便 IDEA 版本更新,也不用对此重复劳动。当然,Scala 插件相关的更新,另当别论。

4.2 启动 Play 项目

首先,点击图片中被红色椭圆圈中的地方(二选一):

选择 Edit Configurations... 选项,在弹出的窗口中,按照图片中的内容操作:

Play 2 Appsbt Task 也是二选一,通常推荐 Play 2 App

如果你选择了 sbt Task,那么你需要做如下的处理:

Play 2 App 只需要给定一个别名:

当然,如果 localhost:9000 不可用(比如启动多个 Play 项目的情况下),你可以在此选择其他端口。

完成以上配置后,你可以选择 SBT 或者 APP,然后点击 Run 按钮。

经过一段时间等待后,在 Play 2 App 下,会自动打开浏览器弹出主页。

而在 sbt Task 下,你需要打开浏览器去访问:

localhost:9000

随后你将看到【快速启动】那一节,你所看到的页面。

总结

Play 像玩具一样,三岁小孩都可以轻松上手QAQ,只要你有 Java 语言基础,并对 HTTP 有一定了解,那么你就可以胜任后台开发任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,409评论 25 707
  • 文丨刘子睿 丨 第18篇原创 丨 1000字 编者按: 个人品牌影响力对一个人的事业发展尤为重要。 01 个人品牌...
    子睿自媒体阅读 491评论 0 0
  • 今天早上的课程分享: [爱心]聚焦:潜意识。 今早潘总的课程讲了三个秘诀: 1、意念场 2、能量...
    两面纯真阅读 237评论 0 0
  • 孟孟和骑士先生从小一起长大,孟孟最喜欢的便是骑士先生带她到处玩耍,骑士先生会满足她所有的要求,会背她飞高高,替她受...
    兔子孟孟阅读 580评论 0 0