前言
最開始接觸 Play Framework 是從 Android 開發(fā)轉(zhuǎn)型為 Java 后端開發(fā),公司有現(xiàn)成的項(xiàng)目可以模仿,再加上本身對新技術(shù)的追求,便義無反顧地?fù)肀Я怂V蠡ㄙM(fèi)不少時(shí)間打磨鉆研,對比以前了解過的 JavaEE 開發(fā),深覺 Play 真是太方便了。
我不想復(fù)制 Play 官網(wǎng)上的介紹,我覺得找到這篇新手入門文章的同學(xué),都是對 Play 有一定的興趣,或者也像我一樣,有現(xiàn)成的項(xiàng)目需要快速了解它。
不管怎樣,你需要知道的就是,Play 也是排行前五的 Java Web 開發(fā)框架,通過 環(huán)信-本周頭條 你可以找到它的身影,里面有一些比較中立的觀點(diǎn)。
另外,從開發(fā)者角度來看,Play 也是一個(gè)全棧式開發(fā)框架,使用簡單的前端技術(shù)(HTML、CSS 和 JavaScript)加上內(nèi)置的模板引擎,就可以渲染出絢麗多彩的網(wǎng)頁,并且它從上到下都是純異步的,基于線程池對每個(gè)請求都分配處理線程,構(gòu)建于 Java8 之上的 Play 天生就支持并發(fā)編程,可以更合理地分配資源。
正文
更新這篇新手入門時(shí),Play 的版本是 2.6.15,所以接下來的內(nèi)容,都是基于這個(gè)版本的吐槽。
現(xiàn)在 Play Framework 官方發(fā)布的穩(wěn)定版本是:2.8.0。
而 Github 上的 Play 倉庫已經(jīng)在著手準(zhǔn)備 2.9.0-SNAPSHOT 版本。
由此可見,Play 的社區(qū)也很活躍,至少他們在積極開發(fā)新功能和修復(fù)缺陷。
一、快速啟動
按照慣例,我們通過啟動一個(gè) Hello World 項(xiàng)目,來觀察 Play Framework 到底有多簡單。
1.1 準(zhǔn)備環(huán)境
查看 Play Requirements 得知運(yùn)行 Play 程序需要:
- Java SE 1.8 或更高版本
- 構(gòu)建工具:推薦是最新版本的 SBT。
我不準(zhǔn)備介紹如何搭建開發(fā)環(huán)境,因?yàn)檫@是 Java 開發(fā)的基本功,即便你現(xiàn)在不會搭建,通過百度/谷歌等搜索引擎,你也可以輕松學(xué)會這一點(diǎn)。
對于構(gòu)建工具,其實(shí)只要你使用 IntelliJ IDEA 旗艦版,那就不用額外下載,IDEA 已經(jīng)內(nèi)置好了。另外,在所有 Play 的樣例中,也是自帶了構(gòu)建工具,所以暫時(shí)可以跳過它們。
1.2 下載運(yùn)行
包含 Hello World 的示例項(xiàng)目已經(jīng)打包成 zip 壓縮文件,并且擁有兩個(gè)不同的開發(fā)語言版本:
這里我們下載 Java 版本,并解壓出來:

在 Windows 10 上,按住 Shift 鍵點(diǎn)擊目錄中的空白部分,選擇 在此處打開 Powershell 窗口(S),然后輸入命令 ./sbt run 即可運(yùn)行。
你也可以通過其他命令行跳轉(zhuǎn)到這個(gè)目錄,然后運(yùn)行 ./sbt run 命令。
經(jīng)過漫長的等待后,Play 程序終于運(yùn)行成功:

通過在瀏覽器中訪問 http://localhost:9000 可以看到 Play 呈現(xiàn)在用戶面前的樣子:

提示:Play 在開發(fā)模式下內(nèi)置了熱部署插件,因此每當(dāng)訪問 Play 應(yīng)用時(shí),如果檢測到未編譯字節(jié)碼(或源代碼已被修改),則會自動觸發(fā)一次編譯(需要等待一會兒),以便展現(xiàn)最新樣式。
二、基本開發(fā)
Play 2.8.0 版本的主頁完全變了模樣,不過不用擔(dān)心,所謂萬變不離其宗,只要知曉其中的關(guān)鍵開發(fā)流程,它再怎么變也不怕。
2.1 路由表
首先用記事本打開示例項(xiàng)目中的 confg/routes 文件:

路由表提供所有接口的相關(guān)信息,我們可以試著添加以下內(nèi)容到文件尾行并保存:
GET /hello controllers.HomeController.hello
然后我們刷新瀏覽器,查看 Play 是否重新編譯代碼,以及在編譯過程中出錯(cuò),是如何反饋的:

非常清晰的錯(cuò)誤反饋,它告訴我們,在哪個(gè)文件的哪一行代碼出了問題,具體是在 controllers.HomeController 中沒有找到 hello 成員。
2.2 控制器
現(xiàn)在讓我們打開 app/controllers/HomeController,添加一個(gè) hello 方法:
public Result hello() {
return ok("hello Play!");
}
訪問 http://localhost:9000/hello,看看 Play 會帶給我們什么樣的信息:

2.3 視圖渲染
接下來,我們復(fù)制 app/views/index.scala.html 為 app/views/hello.scala.html,修改并保存:

做完這一步,我們還需要引用這個(gè)新文件,現(xiàn)在進(jìn)入 app/controlles/HomeController 的 hello 方法,修改為以下內(nèi)容:
public Result hello() {
return ok(views.html.hello.render());
}
現(xiàn)在讓我們刷新瀏覽器,看看發(fā)生了什么變化:

Play 的視圖由 Twirl 引擎負(fù)責(zé)渲染,它通過一些模板語法將各個(gè)頁面模塊化,開發(fā)者只需要關(guān)心 <body> 里面的細(xì)節(jié),而不用每次都添加 HTML 的重復(fù)內(nèi)容。
本節(jié)內(nèi)容基本參考 http://localhost:9000/tutorial 教程,有興趣的同學(xué)可以深入探索一下。
三、官方文檔
我希望簡單介紹一下官方文檔,以便大家遇到問題,可以第一時(shí)間找到解決方案。
Play 官方網(wǎng)站分為三大部分:1.開始入門;2.閱讀文檔;3.加入討論。
第一部分的開始入門,我們已經(jīng)在前面簡單學(xué)習(xí)過,想要深入了解的話,可以點(diǎn)擊傳送門進(jìn)去看看。
第三部分的加入討論,不是本文的重點(diǎn),因此將略過不提,有興趣的同學(xué)可以去一探究竟。
所以主要講解的是第二部分:閱讀文檔。
3.1 文檔側(cè)邊欄
在文檔側(cè)邊欄的頂部位置,可以選擇文檔版本、開發(fā)語言、文檔語言,可惜沒有中文。

接下來是文檔主目錄,列舉了一些文檔章節(jié),比如:最新發(fā)布、開始入門、Hello World 教程等等。

最后是一些相關(guān)書籍,有興趣的同學(xué)可以看看。
3.2 文檔核心
整個(gè)文檔的核心部分是 Working with Play 章節(jié),大概看一下它的結(jié)構(gòu):

它分為 Java 開發(fā)者和 Scala 開發(fā)者需要了解的內(nèi)容,以及公共的主題。
這里以 Java 開發(fā)者的主要內(nèi)容為例,列舉需要重點(diǎn)了解的內(nèi)容:

還有公共主題里面的重點(diǎn)了解內(nèi)容:

文檔的其他內(nèi)容也非常重要,只是對于初級開發(fā)者來說,除非項(xiàng)目需要,否則只是看看即可。
四、在 IntelliJ IDEA 中開發(fā) Play
這部分內(nèi)容是以前寫的,可能與最新版本的 Play 有一點(diǎn)點(diǎn)出入,僅供參考。
4.1 打開 Play 項(xiàng)目
首先確認(rèn)已經(jīng)關(guān)閉運(yùn)行 Play 的命令行,這一點(diǎn)很重要,因?yàn)?[SBT] 構(gòu)建時(shí),采用的是單任務(wù)模式,其他任務(wù)沒有退出,將不能進(jìn)行下一次任務(wù)。
運(yùn)行 IDEA,在歡迎頁面點(diǎn)擊 Open,選擇下載下來的 [入門樣例]:

繼續(xù)展開,選擇項(xiàng)目目錄下的 build.sbt 文件,點(diǎn)擊 OK 按鈕:

這是作為 [SBT] 項(xiàng)目來打開,那么我們選擇 Open as Project:

所有選項(xiàng)都保持默認(rèn)狀態(tài),點(diǎn)擊 OK 按鈕,這就在 IDEA 中打開了這個(gè)項(xiàng)目。
需要注意的是,你有可能會看到 IDEA 提示需要安裝 Scala 插件:

點(diǎn)擊 Install plugins,等待所有安裝完成后,重啟一下 IDEA,然后再下載一些依賴,比如 scala-sbt,這樣就可以在 IDEA 中玩耍 Play 樣例了。比較舒服的是,一般這樣的步驟只需要進(jìn)行一次,以后即便 IDEA 版本更新,也不用對此重復(fù)勞動。當(dāng)然,Scala 插件相關(guān)的更新,另當(dāng)別論。

4.2 啟動 Play 項(xiàng)目
首先,點(diǎn)擊圖片中被紅色橢圓圈中的地方(二選一):

選擇 Edit Configurations... 選項(xiàng),在彈出的窗口中,按照圖片中的內(nèi)容操作:

Play 2 App 和 sbt Task 也是二選一,通常推薦 Play 2 App。
如果你選擇了 sbt Task,那么你需要做如下的處理:

而 Play 2 App 只需要給定一個(gè)別名:

當(dāng)然,如果 localhost:9000 不可用(比如啟動多個(gè) Play 項(xiàng)目的情況下),你可以在此選擇其他端口。
完成以上配置后,你可以選擇 SBT 或者 APP,然后點(diǎn)擊 Run 按鈕。

經(jīng)過一段時(shí)間等待后,在 Play 2 App 下,會自動打開瀏覽器彈出主頁。
而在 sbt Task 下,你需要打開瀏覽器去訪問:
localhost:9000
隨后你將看到【快速啟動】那一節(jié),你所看到的頁面。
總結(jié)
Play 像玩具一樣,三歲小孩都可以輕松上手QAQ,只要你有 Java 語言基礎(chǔ),并對 HTTP 有一定了解,那么你就可以勝任后臺開發(fā)任務(wù)。