Play是一個全棧框架
背景
沒有了Spring MVC,你就什麼都不會了嗎? no no no !
作為一個工程師你必須瞭解更多,Play MVC就是是你必備的技能,Play framework非常強大堪比Spring framework。
學習Play之前先要掌握sbt的使用。
介紹
Play是一個全棧框架,它包含了Web應用和Rest服務所需要的所有元件,如:http伺服器、表單處理、跨域請求保護、強大的路由機制、國際化等等。Play集成了很多ORM層。
同時Play支援java和scala兩種語言進行開發。它預設使用Akka框架和Akka Http伺服器。Play的應用天生是無狀態、非阻塞、事件驅動架構特點,支援水平和垂直監控測量,同時資源使用效率也更高。Play專案裡面包含Scala的模組元件,如果你是Java開發者也不用擔心要學Scala語法,元件都支援Java API供你對接。
優點總結:
- 它的MVC架構是主流框架,簡單易學,容易上手。
- 直接支援常規WEB開發任務模式和熱載入,節省寶貴的開發時間。
- 它有個很大且活躍的技術分享社群,可以交流學習也可以幫助解決疑問。
- 支援Twirl模版去渲染頁面,Twirl語法容易學、不需要特定的編輯器、自帶語法型別檢測、錯誤會直接展示在瀏覽器頁面上。
核心原理分析
Play元件架構:

architecture
Play Project 目錄結構

目錄結構
詳細目錄介紹:
- app:所有業務程式碼放在這裡
- controllers:Java程式碼存放目錄,MVC模型中的C。
- v1:常規業務程式碼所在,可以按時間情況進行命名。
- views:頁面模版存放目錄,如html。
- Module.java:這裡是編寫模組繫結程式碼,結合conf來設定。
- conf : 配置檔案
- META-INF:專案包構建的配置檔案,web服務必須的。
- application.conf:核心配置檔案,主要配置都寫在這裡。
- logback.xml:日誌檔案,logback元件。
- posts.routes:請求路由分發配置檔案,Post命令。
- routes:請求路由分發配置檔案,Get命令。
- project:專案編譯環境一些配置。
- public:靜態資源目錄:圖片、css、js等。
- images
- javascripts
- stylesheets
- target:編譯後class等檔案目錄。
- test:測試程式碼目錄。
- .gitignore:git提交過濾配置。
- README.md:專案說明文件。
- LICENSE:使用授權檔案。
- build.gradle:Gradle模式下依賴包管理,類似於maven的pom.xml檔案。
- build.sbt:Sbt模型下依賴包管理。
- gradlew.bat:window環境下Gradle定製指令碼。類似於mvn|grunt|gulp之類命令,可以執行task:build|init|dist|stage|tasks|help|test|check等。
- gradlew:linux環境下。
gradlew 類似於maven的功能,但是比它要強很多;和前端的gulp、grant比較像;
sbt是預設play的環境命令,也是一般常規學習入門命令,類似node的npm命令、springboot的spring命令。
核心用例講解
第一步:建立 Play 專案。
這裡採用官方推薦的模版建立基礎專案,可以參考官方文件: play-java-seed 。
開啟window的cmd執行執行命令,跟著流程一步步走輸入專案名和包名即可。
sbt new playframework/play-java-seed.g8
sbt命令需要自己去安裝,我使用的是1.2.6版本

結果展示
第二步:IDEA中執行專案。
intellij idea中需要安裝scala外掛,jetbrains官方文件描述很清晰: idea-scala-plugin 。

匯入已存在專案
安裝文件總描述,在idea中配置一個啟動task,這樣就可以run\debug。

runPlay
idea中直接執行右下角:sbt shell,會彈出介面使用sbt的命令,如:run(執行專案)、stop(停止專案)

run
在瀏覽器中輸入:localhost:9000 可以訪問預設的頁面,出現 Welcome to Play! 表示啟動成功。
對於project的管理不是採用gradle也不是maven,而是使用sbt提供的視窗,如下圖:

project
第三步:生產環境打包釋出執行。
Play專案的部署與傳統tomcat伺服器部署那種,和springboot可執行jar方式都不同;Play在生產環境下執行需要配置http.secret.key引數才能正常啟動, secretKey文件 ;
1.可以把原始碼專案直接部署到伺服器上,使用SBT命令執行服務,可以非常方便的測試、編譯、執行;
1、需要在伺服器上安裝sbt環境(也就是個軟體啦),可以去 SBT官網下載 。
- window安裝zip和mis都是很方便的;
- linux也可以直接安裝zip包來執行,但是需要配置一下環境,不然sbt命令執行會比較麻煩;
- linux也可以直接使用yum install sbt來安裝, linux-sbt文件參考 ;
- 記得把maven地址配置到sbt的配置中;
2、將整個專案資料夾Copy到伺服器上要部署的目錄下。
- 把什麼.idea .g8 等等目錄都刪除
3、進入專案根目錄下執行sbt命令(Play專案自帶內建伺服器)。
- 執行命令:sbt,linux環境下會切換成sbt模式,如:[play-java-sample] $ tasks
- 後臺執行服務命令,如: [play-java-sample] $ bgRun
SBT支援的commands清單,也可以檢視 官方命令文件 ;

sbt-command
2.使用命令:gradlew dist ,生成zip的部署包,和maven的assembly外掛類似;
1、執行命令:gradlew dist,打包playBinary.zip;
- 執行命令:gradlew dist,在專案的build/distributions/目錄下,生成了playBinary.zip|tar檔案;
2、playBinary.zip上傳伺服器,解壓啟動playBinary命令
- *.zip上傳伺服器並解壓,會生成bin\lib\conf三個目錄,此時的專案資源生成了jar檔案存放在lib資料夾裡面;
- 在/bin目錄中執行playBinary命令可啟動服務,配置檔案在conf目錄下;
總結
使用Play越深越是覺得這個框架很酷很方便,就像是tomcat+nginx+webmvc+html+freemarker的集合體。Play的程式碼熱載入能力比springboot要強很多,出現比它還有早。
sbt命令工具實在是太酷,完全超越了springboot一直在努力完善的spring命令工具,讓我覺得springboot可能抄襲了play。
如何你要掌握Play就得把spring mvc、freemarker|themeleaf、tomcat、nginx、maven都拋棄掉,因為它都有自己的一套標準需要你重新學習。官方的技術文件非常詳細,可惜是全英文對部分同學來說有門檻而網上的中文文件比較零散,推薦直接看英文版。
常用連結
play官網: play-framework
play2.x在idea中使用文件: play2.x
play 樣例下載中心: play-sample
個人測試例子: play-java-sample
作者:Owen Jia, 歡迎關注他的部落格: Owen Blog 。
學習的路上永無止境,我們當砥礪前行。