Play framework | 新手入門

前言

最開始接觸 Play Framework 是從 Android 開發(fā)轉(zhuǎn)型為 Java 后端開發(fā)猿诸,公司有現(xiàn)成的項(xiàng)目可以模仿,再加上本身對(duì)新技術(shù)的追求事秀,便義無(wú)反顧地?fù)肀Я怂布选V蠡ㄙM(fèi)不少時(shí)間打磨鉆研导俘,對(duì)比以前了解過的 JavaEE 開發(fā),深覺 Play 真是太方便了驳概。

我不想復(fù)制 Play 官網(wǎng)上的介紹赤嚼,我覺得找到這篇新手入門文章的同學(xué),都是對(duì) Play 有一定的興趣顺又,或者也像我一樣更卒,有現(xiàn)成的項(xiàng)目需要快速了解它。

不管怎樣稚照,你需要知道的就是蹂空,Play 也是排行前五的 Java Web 開發(fā)框架俯萌,通過 環(huán)信-本周頭條 你可以找到它的身影,里面有一些比較中立的觀點(diǎn)上枕。

另外咐熙,從開發(fā)者角度來(lái)看,Play 也是一個(gè)全棧式開發(fā)框架辨萍,使用簡(jiǎn)單的前端技術(shù)(HTML棋恼、CSS 和 JavaScript)加上內(nèi)置的模板引擎,就可以渲染出絢麗多彩的網(wǎng)頁(yè)锈玉,并且它從上到下都是純異步的爪飘,基于線程池對(duì)每個(gè)請(qǐng)求都分配處理線程,構(gòu)建于 Java8 之上的 Play 天生就支持并發(fā)編程拉背,可以更合理地分配資源师崎。

正文

更新這篇新手入門時(shí),Play 的版本是 2.6.15去团,所以接下來(lái)的內(nèi)容抡诞,都是基于這個(gè)版本的吐槽。

現(xiàn)在 Play Framework 官方發(fā)布的穩(wěn)定版本是:2.8.0土陪。

而 Github 上的 Play 倉(cāng)庫(kù)已經(jīng)在著手準(zhǔn)備 2.9.0-SNAPSHOT 版本昼汗。

由此可見,Play 的社區(qū)也很活躍鬼雀,至少他們?cè)诜e極開發(fā)新功能和修復(fù)缺陷顷窒。

一、快速啟動(dòng)

按照慣例源哩,我們通過啟動(dòng)一個(gè) Hello World 項(xiàng)目鞋吉,來(lái)觀察 Play Framework 到底有多簡(jiǎn)單。

1.1 準(zhǔn)備環(huán)境

查看 Play Requirements 得知運(yùn)行 Play 程序需要:

  1. Java SE 1.8 或更高版本
  2. 構(gòu)建工具:推薦是最新版本的 SBT励烦。

我不準(zhǔn)備介紹如何搭建開發(fā)環(huán)境谓着,因?yàn)檫@是 Java 開發(fā)的基本功,即便你現(xiàn)在不會(huì)搭建坛掠,通過百度/谷歌等搜索引擎赊锚,你也可以輕松學(xué)會(huì)這一點(diǎn)。

對(duì)于構(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ā)語(yǔ)言版本:

這里我們下載 Java 版本,并解壓出來(lái):

在 Windows 10 上藐窄,按住 Shift 鍵點(diǎn)擊目錄中的空白部分资昧,選擇 在此處打開 Powershell 窗口(S),然后輸入命令 ./sbt run 即可運(yùn)行荆忍。

你也可以通過其他命令行跳轉(zhuǎn)到這個(gè)目錄格带,然后運(yùn)行 ./sbt run 命令。

經(jīng)過漫長(zhǎng)的等待后刹枉,Play 程序終于運(yùn)行成功:

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

提示:Play 在開發(fā)模式下內(nèi)置了熱部署插件叽唱,因此每當(dāng)訪問 Play 應(yīng)用時(shí),如果檢測(cè)到未編譯字節(jié)碼(或源代碼已被修改)微宝,則會(huì)自動(dòng)觸發(fā)一次編譯(需要等待一會(huì)兒)棺亭,以便展現(xiàn)最新樣式。

二蟋软、基本開發(fā)

Play 2.8.0 版本的主頁(yè)完全變了模樣镶摘,不過不用擔(dān)心,所謂萬(wà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 會(huì)帶給我們什么樣的信息:

2.3 視圖渲染

接下來(lái)玩徊,我們復(fù)制 app/views/index.scala.htmlapp/views/hello.scala.html,修改并保存:

做完這一步邑遏,我們還需要引用這個(gè)新文件,現(xiàn)在進(jìn)入 app/controlles/HomeControllerhello 方法恰矩,修改為以下內(nèi)容:

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

現(xiàn)在讓我們刷新瀏覽器记盒,看看發(fā)生了什么變化:

Play 的視圖由 Twirl 引擎負(fù)責(zé)渲染,它通過一些模板語(yǔ)法將各個(gè)頁(yè)面模塊化外傅,開發(fā)者只需要關(guān)心 <body> 里面的細(xì)節(jié)纪吮,而不用每次都添加 HTML 的重復(fù)內(nèi)容俩檬。

本節(jié)內(nèi)容基本參考 http://localhost:9000/tutorial 教程,有興趣的同學(xué)可以深入探索一下碾盟。

三棚辽、官方文檔

我希望簡(jiǎn)單介紹一下官方文檔,以便大家遇到問題冰肴,可以第一時(shí)間找到解決方案屈藐。

Play 官方網(wǎng)站分為三大部分:1.開始入門;2.閱讀文檔熙尉;3.加入討論联逻。

第一部分的開始入門,我們已經(jīng)在前面簡(jiǎn)單學(xué)習(xí)過检痰,想要深入了解的話包归,可以點(diǎn)擊傳送門進(jìn)去看看。

第三部分的加入討論铅歼,不是本文的重點(diǎn)公壤,因此將略過不提,有興趣的同學(xué)可以去一探究竟椎椰。

所以主要講解的是第二部分:閱讀文檔厦幅。

3.1 文檔側(cè)邊欄

在文檔側(cè)邊欄的頂部位置,可以選擇文檔版本俭识、開發(fā)語(yǔ)言慨削、文檔語(yǔ)言,可惜沒有中文套媚。

接下來(lái)是文檔主目錄缚态,列舉了一些文檔章節(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)容也非常重要茫多,只是對(duì)于初級(jí)開發(fā)者來(lái)說(shuō)祈匙,除非項(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聘裁,在歡迎頁(yè)面點(diǎn)擊 Open,選擇下載下來(lái)的 [入門樣例]:

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

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

所有選項(xiàng)都保持默認(rèn)狀態(tài)洋访,點(diǎn)擊 OK 按鈕镣陕,這就在 IDEA 中打開了這個(gè)項(xiàng)目。

需要注意的是姻政,你有可能會(huì)看到 IDEA 提示需要安裝 Scala 插件:

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

4.2 啟動(dòng) Play 項(xiàng)目

首先,點(diǎn)擊圖片中被紅色橢圓圈中的地方(二選一):

選擇 Edit Configurations... 選項(xiàng)掌腰,在彈出的窗口中狰住,按照?qǐng)D片中的內(nèi)容操作:

Play 2 Appsbt Task 也是二選一,通常推薦 Play 2 App齿梁。

如果你選擇了 sbt Task催植,那么你需要做如下的處理:

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

當(dāng)然,如果 localhost:9000 不可用(比如啟動(dòng)多個(gè) Play 項(xiàng)目的情況下),你可以在此選擇其他端口查邢。

完成以上配置后,你可以選擇 SBT 或者 APP酵幕,然后點(diǎn)擊 Run 按鈕扰藕。

經(jīng)過一段時(shí)間等待后,在 Play 2 App 下芳撒,會(huì)自動(dòng)打開瀏覽器彈出主頁(yè)邓深。

而在 sbt Task 下,你需要打開瀏覽器去訪問:

localhost:9000

隨后你將看到【快速啟動(dòng)】那一節(jié)笔刹,你所看到的頁(yè)面芥备。

總結(jié)

Play 像玩具一樣,三歲小孩都可以輕松上手QAQ舌菜,只要你有 Java 語(yǔ)言基礎(chǔ)萌壳,并對(duì) HTTP 有一定了解,那么你就可以勝任后臺(tái)開發(fā)任務(wù)日月。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袱瓮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爱咬,更是在濱河造成了極大的恐慌尺借,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件精拟,死亡現(xiàn)場(chǎng)離奇詭異燎斩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜂绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門栅表,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人荡碾,你說(shuō)我怎么就攤上這事谨读。” “怎么了坛吁?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵劳殖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我拨脉,道長(zhǎng)哆姻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任玫膀,我火速辦了婚禮矛缨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己箕昭,他們只是感情好灵妨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著落竹,像睡著了一般泌霍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上述召,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天朱转,我揣著相機(jī)與錄音,去河邊找鬼积暖。 笑死藤为,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夺刑。 我是一名探鬼主播缅疟,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遍愿!你這毒婦竟也來(lái)了窿吩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤错览,失蹤者是張志新(化名)和其女友劉穎纫雁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倾哺,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轧邪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羞海。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忌愚。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖却邓,靈堂內(nèi)的尸體忽然破棺而出硕糊,到底是詐尸還是另有隱情,我是刑警寧澤腊徙,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布简十,位于F島的核電站,受9級(jí)特大地震影響撬腾,放射性物質(zhì)發(fā)生泄漏螟蝙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一民傻、第九天 我趴在偏房一處隱蔽的房頂上張望胰默。 院中可真熱鬧场斑,春花似錦、人聲如沸牵署。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奴迅。三九已至锁保,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間半沽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工吴菠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留者填,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓做葵,卻偏偏與公主長(zhǎng)得像占哟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酿矢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,282評(píng)論 25 707
  • 文丨劉子睿 丨 第18篇原創(chuàng) 丨 1000字 編者按: 個(gè)人品牌影響力對(duì)一個(gè)人的事業(yè)發(fā)展尤為重要瘫筐。 01 個(gè)人品牌...
    子睿自媒體閱讀 501評(píng)論 0 0
  • 今天早上的課程分享: [愛心]聚焦:潛意識(shí)蜜暑。 今早潘總的課程講了三個(gè)秘訣: 1、意念場(chǎng) 2策肝、能量...
    兩面純真閱讀 245評(píng)論 0 0
  • 孟孟和騎士先生從小一起長(zhǎng)大肛捍,孟孟最喜歡的便是騎士先生帶她到處玩耍,騎士先生會(huì)滿足她所有的要求之众,會(huì)背她飛高高拙毫,替她受...
    兔子孟孟閱讀 589評(píng)論 0 0