play框架03--建立專案
安裝Play
從下載頁面下載最新的二進位制包,然後在你喜歡的地方解壓它。
如果你用的是Windows,最好避免在路徑中混入空格。比如c:\play就是個比c:\Documents And Settings\user\play更好的選擇。
- 1
為了方便操作,你需要新增Play資料夾到你的系統路徑中。這樣你就不需要在play命令前面敲一大通路徑名了。要想檢查安裝是否成功,開啟一個新的命令列視窗,敲下play
;應該會出來play的基本使用幫助。
建立專案
現在Play已經安好了,是時候開始寫部落格應用。建立一個Play應用非常簡單,僅需要play命令列工具。之後會生成Play應用的基本架構。
開啟一個新的命令列並敲入:
~$ play new yabe
- 1
它會提醒輸入應用的全名。輸入yabe。 play new
命令建立了一個新的資料夾yabe/外加一系列檔案和資料夾。其中包括下面各部分:
app/ 包括應用的核心,劃分為models,controllers和views資料夾。它也可以包括其他Java的包。這是.java原始碼檔案所在之處。
conf/ 包括所有的應用配置檔案,特別是主application.conf檔案,路由定義檔案和用於國際化的資訊檔案。
lib/ 包括所有可選的Java庫,比如標準的.jar。
public/ 包括所有可以公開的資源,比如Javascript檔案,樣式表和圖片。
test/ 包括所有的應用測試。測試可以是Java的JUnit測試或者Selenium測試。
因為Play只使用UTF-8編碼,故所有的文字檔案都需要使用UTF-8編碼。確保你的文字編輯器已經做了相應的配置。
- 1
如果你開發過Java應用,你可能會奇怪.class
檔案到哪兒去了。答案是……沒有.class
檔案了:Play並不使用任何class
檔案;相反它直接處理Java原始碼。實際上我們使用Eclipse的編譯器來即時編譯Java原始碼
這導致了開發過程中的兩點重要的改進。第一個,Play會自動監測Java原始碼的改變並在執行時自動過載。第二個,當一個Java異常發生時,Play能向你展示更好的錯誤報告 - 帶對應的原始碼的哦~
事實上Play在應用的tmp/資料夾下有位元組碼的快取,但只用於加速重新啟動專案的過程。如果需要,你可以用play clean清空快取。
執行程式
現在可以測試一下新建立的程式了。回到命令列視窗,在yabe/目錄下輸入play run命令。Play框架將載入程式,啟動Web伺服器並監聽9000埠。
開啟瀏覽器鍵入http://localhost:9000,程式顯示了一個預設的歡迎頁。
現在我們來看看這個頁面是怎樣顯示的。
程式的主入口配置在conf/routes檔案裡。這個檔案定義了程式所有可訪問的URL。開啟routes檔案,會看到第一個“route”:
GET / Application.index
它告訴Play,當伺服器收到來自於/路徑的GET請求時要呼叫Application.index的方法。在這個程式中,Application.index是controllers.Application.index簡寫,因為controllers包是隱式附加的。
在建立一個標準Java程式時,通常會定義一個入口方法,比如:
public static void main(String[] args) { ... }
Play程式則有多個入口方法,每個URL就有一個。這些方法稱為action方法。定義Action方法的類稱為controller。
看看什麼是controller。開啟yabe/app/controllers/Application.java原始檔:
package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { render(); } }
controller 類繼承於play.mvc.Controller類,這個類提供了許多controller需要的方法,比如在index action中的render方法。
index action定義為public static void,因為controller類不需要例項化和返回值。
index action很簡單,只是呼叫了render()方法來通知Play渲染模板。使用模板是返回HTTP響應的一個最通用的方式。
模板是在/app/views 目錄下的簡單文字檔案。因為這裡沒有指定一個模板,index action會使用一個預設的模板:Application/index.html。
開啟/yabe/app/views/Application/index.html:
#{extends 'main.html' /}#{set title:'Home' /} #{welcome /}
在這個模板中,只有Play tag,與JSP tag類似,#{welcome /} tag會在瀏覽器中生成歡迎資訊。#{extends /} tag 表示這個模板繼承於main.html這個模板。模板繼承可用來建立複雜的web也並重用公共部分。
開啟/yabe/app/views/main.html模板:
<!DOCTYPE html><html> <head> <title>#{get 'title' /}</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" media="screen" href="@{'/public/stylesheets/main.css'}" /> <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}" /> </head> <body> #{doLayout /} </body></html>
#{doLayout /}tag表示index.html插入內容的地方。
試著編輯controller類來看看Play怎麼自動載入它。開啟yabe/app/controllers/Application.java,刪除render()後的分號,讓它出錯,就像這樣:
public static void index() { render()}
然後到瀏覽器重新整理這個頁面,Play會檢測原始檔變更並試著載入程式controller,但是因為controller有錯誤,所以在瀏覽器中顯示一個編譯錯誤。
把剛才的錯誤修改正確,在編輯模板,開啟yabe/app/views/Application/index.html覆蓋歡迎訊息。
#{extends 'main.html' /}#{set title:'Home' /} <h1>A blog will be here</h1>
在瀏覽器重新整理這個頁面。
配置資料庫
在開始寫程式碼之前還要多做一件事。作為部落格引擎,我們需要一個數據庫。為了便於與開發,Play內建了一個叫做H2的資料庫。當然如果需要,我們也可以切換到一個更加健壯的資料庫。你可以選擇設定資料時儲存在記憶體中,還是在檔案系統中(這樣即使你重新啟動,你的資料也會保留)。
在一開始,我們將對應用模型做許多測試和改動。因此,最好選擇儲存在記憶體中,這樣每次啟動,都不會跟舊資料有任何牽連。
開啟yabe/app/application.conf
,解除這一行的註釋:
db=em
- 1
正如你在註釋中看到的一樣,你可以冗餘的配置任何JDBC資料庫,甚至配置連結池。
現在回到瀏覽器並重新整理歡迎頁面。Play將自動啟動資料庫。檢查下面一行是否出現在應用日誌中:
INFO ~ Connected to jdbc:h2:mem:play
- 1
補充
如果執行play run
命令出現下面提示:
解決辦法:
找到play\framework\build.bat
修改
java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M %DEBUG_PARAM% %JAVA_OPTS% -Dfile.encoding=UTF-8 -Dinput.encoding=Cp1252 -Dplay.version="%PLAY_VERSION%" -Dsbt.ivy.home="%~dp0..\repository" -Dplay.home="%~dp0." -Dsbt.boot.properties="%fp%sbt/sbt.boot.properties" %PLAY_OPTS% -jar "%~dp0sbt\sbt-launch.jar" %*
- 1
為
java -XX:+CMSClassUnloadingEnabled %DEBUG_PARAM% -Dfile.encoding=UTF8 -Dplay.version="%PLAY_VERSION%" -Dsbt.ivy.home="%~dp0..\repository" -Dplay.home="%~dp0." -Dsbt.boot.properties="file:///%p%sbt/sbt.boot.properties" -jar "%~dp0sbt\sbt-launch.jar" %*
將play專案匯入myeclipse
前提:已安裝play並配置了環境變數
第一步 :開啟你的專案將下面幾項刪除(沒有就跳過)
第二步:在cmd中來到專案的路徑下(cd,不是來到專案裡,而是專案名前一級目錄),然後輸入play eclipsify +專案名
第三步:匯入