背景
后台同事离职,公司安排我(Android)接手项目,由于后台开发的核心是 Play framework,作为这个领域的萌新,必须了解官方文档的一切秘密。
正文
更新这篇新手入门时,Play 的版本是 2.6.15
,所以接下来的内容,都是基于这个版本的吐槽。
官方主页
打开 Play framework 主页,有这样一句话:
The High Velocity Web Framework For Java and Scala
翻译过来就是:适用于 Java 和 Scala 的高速 Web 框架。
简洁,干脆,清晰。
简介
- Play Framework makes it easy to build web applications with Java & Scala.
- Play is based on a lightweight, stateless, web-friendly architecture.
- Built on Akka, Play provides predictable and minimal resource consumption (CPU, memory, threads) for highly-scalable applications.
机翻一下:
- Play Framework 可以使用 Java 和 Scala 轻松构建 Web 应用程序。
- Play 基于轻量级,无状态,网络友好型架构。
- Play 基于 Akka 构建,为高度可扩展的应用程序提供可预测的最小资源消耗(CPU,内存,线程)。
很好,虽然不知道在讲什么,但是感觉很高大上的样子,用起来不亏,不亏。
特性
-
Developer friendly.
只需要准备 Oracle JDK 1.8,以及一个【文本编辑器】(Atom 或者 Sublime Text)和一个【浏览器】,就能够胜任 Play 的开发工作。当然它也支持在 Eclipse 和 IntelliJ IDEA 中愉快地敲打键盘。 -
Scale predictably.
从上到下是完全异步的模型,非阻塞 IO,并且具有高度可扩展的特性。 -
Modern web & mobile.
是现代网络和移动应用的接口开发神器。 -
Solid & fast.
相信 Java 的品质,相信 JVM 的速度。 -
Massive ecosystem.
基于 Java 则天生立于不败之地——庞大的 Maven 库。 -
Proven in production.
Play 经过实际证明,它很可靠,具体有多可靠?有图为证。
官方文档
Play 官方文档 是最合适的入门文档,当然它会有一些吐槽点,但相对来说,它是最权威的指南。
文档结构
起初作为萌新,并不了解这部分的情况,因此造成了许多误会,此次回头来看,其实 Play 文档相对于 Google 的 【Android 开发者文档】,真的好太多有木有!
-
文档选项
在右侧可以选择【文档版本】、【开发语言】、【文档语言】三个选项,可惜的是,并没有中文语言。
-
文档目录
这里是文档目录,以这里为起点,会让你拨开很多云雾,直达问题本质。
-
Play 简介
这部分在主页中有介绍,可以跳过它。
-
最新发布
讲到了当前版本的新特性,从低版本迁移的指南,还有其他发布的版本列表。
-
新手入门
从安装到使用,Play 的简单超乎你的想象,并且只使用文本编辑器的话,配合控制台会有奇效,而选择一个好的 IDE,则可以帮助提升开发效率,再通过解析 Play 应用的结构,你会更懂得 Play 的美妙之处,至于教程则是提供了一个功能预览,以及第三方博客的一些经典教学。
-
使用 Play
这边有三个主题,一个是对于 Java 开发者,一个是对于 Scala 开发者,剩下的是公共主题。对于开发者而言,分别阐述了主要概念和高级主题;对于公共主题来说,涵盖了构建、配置、资源、HTTP 过滤、模块扩展、数据库、服务器后端、部署、调度任务的方方面面,非常详细且实用。
-
贡献 Play
作为萌新来说,唯一的贡献就是学习、探索、应用。
-
关于 Play
从 Play 的诞生以及发展历程,娓娓道来一部波澜壮阔的史诗,额,这个有点夸张,不过这里就像一本书的序,如果你不花点时间了解一下,可能你对这本书的理解并没有到位。至于 Play 的用户组,没有中国的话,根本不需要关心,你说是不是?
-
Play 发布版本
对于萌新来说,从一开始就是 2.6.x
,因此也不必过多关注。但是有一点,如果以前的项目也是 Play 框架,那么最好看看是不是旧版本,如果是,怎么样做到版本迁移,以防止不同版本的冲突。
-
模块
Play 把大部分工具作为一个模块贡献在 Maven 上,比如认证授权、数据存储、定位、页面渲染等。
-
相关书籍
如果你觉得实在需要一本手头上的文档,你就应该购置上面的书籍,生啃下来。当然,恐怕很难有中文翻译本,要有也不会针对最新版本的 Play,还须慎之又慎啊。
萌新入门体验
本文内容基于以下开发环境,若因环境不同而产生困惑,请参考相应替代方案。
学习一段时间发现,毕竟 Play framework 需要部署到服务器上,而大多数服务器是 Linux 系统,在 Windows 上的开发即便再顺风顺水,到了 Linux 上还是有各种各样的坑,所以为了统一开发环境,这里将提供一个神奇的折中方案,那便是无敌的 WSL!
WSL 是在 Windows 10 中安装一个 Linux 子系统,有需要的同学请移步:【笔记】Windows Subsystem for Linux。
需要注意的是,Windows 10 中安装的 JDK 并不能在 WSL 中作为环境变量,尽管可以通过 java.exe 命令来调用,但最好还是安装一下 Linux 的 JDK 来运行 Play 应用程序。
回归正题,官方推荐的 Play framework 开发环境为:
-
IntelliJ IDEA(注意,需要下载
Ultimate Edition
版本来进行 Web 开发)
Oracle JDK 属于开发必备环境,选择 JDK 1.8 是为了提升开发效率,当然,如果你使用更高的 JDK 版本,那是再好不过的事情。在 Play 的一些样例中,有 JDK 1.8 的新特性实例,比如 Stream
、CompletionStage
等等,学习它们使用方法,了解并熟悉之后,你才会感觉到后台开发的快乐。
IDEA 属于开发神器,你所能想到的效(tou)率(lan)方式,它已经浓缩为快捷键,所以当你不再需要鼠标来进行编写代码,我想你会感激 IDEA 的。
激活 IDEA Ultimate Edition 版本
对于 IDEA 来说,首先请确认已经执行以下步骤:
- 进入 IntelliJ IDEA 官网
- 点击
DOWNLOAD
跳转到下载页面 - 选择
Ultimate
下载并安装
目前最新的 IDEA 版本是:
Version: 2018.1.1
Build: 181.4445.78
Released: April 10, 2018
温馨提示:若经济允许,请购买授权。
需要简单许可的同学,可以尝试在 IntelliJ IDEA License Activation
对话框的 License server
选项下,填写:
http://idea.randall.top
进行授权,或通过 lanyu 注册 IDEA 获取相关授权方式。
下载样例运行
从 Play 下载页面 获取 入门样例,然后通过 SBT 在 Oracle JDK 1.8 环境下,快速构建并启动。
你不需要提前安装 SBT,因为所有的一切,都只需要双击一个文件就搞定。
将下载下来的 play-java-starter-example.zip
文件解压,然后进入解压出来的工程目录,找到 sbt.bat
文件并双击它,就已经开始构建一个 Play 项目。
需要注意的是,这里选择的是 Java 工程,这是因为做 Android 的时候也是用 Java,自然选择看得懂的代码进行学习。当然,下载 Scala 工程也没有问题,照样可以跑起来。
冗长的时间之后,构建完成的情况是:
由于 SBT 将相关依赖缓存了,所以这里的显示有些简单。通常来说,第一次要耐心等上一段时间。
直接在命令中输入 run
并按下回车键:
这里可以看到有很多下载成功的信息,最后一行的提示表示服务已经启动,可以通过在浏览器中输入:
localhost:9000
来访问刚刚建立的网站:
(最开始写这篇文章的时候,Play 的版本是 2.6.10
,所以图中显示可能不太一样。)
很吃惊是吧?几乎什么事也没做,就跑出来一个这么漂亮的网站?
Play 果然如它的名字一样,玩,就能玩出来花样。
项目结构
基本的项目结构如下:
-
root
:项目的根目录,默认为 root 别名-
app
:应用主体,通常是后台相关的源码-
controllers
:控制器,接口逻辑相关 -
views
:视图,网页内容相关 -
models
:模型,数据相关
-
-
conf
:配置目录-
application.conf
:应用配置,可以覆盖子模块中的默认配置reference.conf
-
routes
:路由器,配置所有接口的地方
-
-
project
:工程目录,具体作用不明确,新手不关心-
plugins.sbt
:插件配置文件,可以用来增强安全性等功能
-
-
public
:公共资源-
images
:图片 -
javascripts
:JS 脚本 -
stylesheets
:CSS 样式
-
-
test
:测试目录 -
build.sbt
:项目构建文件
-
其中最为重要的是 build.sbt
、plugins.sbt
、application.conf
和 routes
这四个文件,由它们决定了整个项目的体系。
在 IDEA 中打开 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 插件相关的更新,另当别论。
建立新的接口
Play framework 项目基于 MVC 的程序设计结构,所以开发起来特别顺手。要创建一个新的 HTTP 接口,只需要先在 routes
文件中输入:
GET /custom controllers.HomeController.custom
然后打开 controllers
包中的 HomeController.java
文件:
需要注意的是,你在 routes
中提供的路径,必须要有真实的 Java 类和方法对应,否则将不能编译通过。
回归正题,我们加上签名名字为 custom
的方法:
public Result custom() {
return TODO;
}
差不多就是这个样子:
Result
在 Play 中就是 HTTP 的 Response,包含很多内容,作为新手,暂不关心这些。而 TODO
是 Play 内置的预定义 Result
对象,和 ok(index.render(...))
一样,位于 Results
这个静态工厂类中,所以你也随意选择其他的预定义 Result
对象,比如 notFound()
。
这些由你自己决定,反正 Play 就是给你玩的。
如果你还记得前面的内容,那你应该会去找 sbt.bat
文件,尝试 run
起来并在浏览器中访问新的接口。
更厉害的萌新会对【Developer friendly】这个特性充满好奇,然后继续创建一些接口,在不停止 Play 项目的情况下,直接访问新接口,试一下 Hit refresh workflow
是否可行。
事实上确实是可以的,你无需在编写代码之后重启 Play 项目,因此你可以用记事本装一装大神。
通过 IDEA 启动项目
首先,点击图片中被红色椭圆圈中的地方(二选一):
选择 Edit Configurations...
选项,在弹出的窗口中,按照图片中的内容操作:
Play 2 App
和 sbt Task
也是二选一,通常推荐 Play 2 App
。
如果你选择了 sbt Task
,那么你需要做如下的处理:
而 Play 2 App
只需要给定一个别名:
当然,如果 localhost:9000
不可用(比如启动多个 Play 项目的情况下),你可以在此选择其他端口。
完成以上配置后,你可以选择 SBT
或者 APP
,然后点击 Run
按钮。
经过一段时间等待后,在 Play 2 App
下,会自动打开浏览器弹出主页。
而在 sbt Task
下,你需要手动去访问接口:
localhost:9000/custom
到此就结束了萌新的体验之旅,感觉还是蛮神奇的,全程就是在 Play 嘛。
总结
Play 像玩具一样,三岁小孩都可以轻松上手,只要你有 Java 语言基础,并对 HTTP 有一定了解,那么你就可以胜任后台开发任务。
所以到这里你可以,Play!玩后台去吧!
网友评论