摘要:確保你的文本編輯器已經(jīng)做了相應的配置。第一個,會自動監(jiān)測源代碼的改變并在運行時自動重載。檢查下面的一行是否出現(xiàn)在應用日志中使用版本控制系統(tǒng)來追蹤變化當你開發(fā)一個項目時,最好使用版本控制系統(tǒng)來存儲你的源代碼。
Play是一個Java Web敏捷開發(fā)的框架
http://www.playframework.com/documentation/1.2.7/home
之所以要翻譯這個教程,是因為實訓的時候敲定用這個作為框架,于是我把相關教程翻譯給小伙伴學習學習。現(xiàn)在就干脆放上來給大家分享分享
開始項目 介紹在這個教程中,你將通過從頭到尾開發(fā)一個真正的Web應用來學習Play框架,在這個應用中,我們將嘗試用上你將在真實項目中需要的每樣技術,同時介紹Play應用開發(fā)的最佳實踐。
我們把教程分割成相互獨立的各部分。每個部分將介紹更為復雜的特性,并提供真實項目需要的每樣東西:驗證,錯誤處理,框架安全,自動化測試組件,一個高大上的用戶界面,一個管理面板,等等。
在本教程中的所有代碼都能被用于你的項目。我們鼓勵你復制粘貼代碼片段,整份搬去用也沒所謂。
項目我們將開發(fā)(又一個)博客引擎。這不是一個非常有想象力的選擇,但是它將允許我們探索開發(fā)一個現(xiàn)代Web應用的大多數(shù)技術。
為了讓過程更加燃一點,我們將對不同的角色(編輯者,管理員)設置不同的權限。
這個博客引擎將以yabe為名。
前提這個教程也已作為范例隨下載包贈送。你可以在samples-and-tests/yabe/文件夾下找到成品代碼。
首先,確保你已經(jīng)安裝了Java平臺。Play需要Java 5或以上的版本。
由于我們將需要頻繁使用命令行,最好還是使用類Unix的操作系統(tǒng)。如果你用的是Windows,那也沒問題;就是打命令的時候需要打多一點。
我們將假定你已經(jīng)有Java和Web開發(fā)(特別是HTML,CSS和Javascript)經(jīng)驗。不過,你不需要熟悉JavaEE所有組件。Play是一個全棧Java框架,它提供了或者封裝了你將需要的全部Java API。沒用必要知道如何配置JPA實體管理器或部署一個JavaEE組件。
你將需要一個文本編輯器。如果更喜歡使用大而全的Java IDE,比如Eclipse或NetBeans,你當然可以用它。不過即使使用簡單的文本編輯器,比如Textmate,Emacs或Vim,你也可以玩轉Play。因為框架本身會處理好編譯和部署的過程。我們很快就會看到這一點了……
在教程的后面,我們將使用Lighttpd和MySQL來展示如何在生產(chǎn)環(huán)境部署一個Play應用。但即使你沒用安裝這些,play也可以運行,這不是個問題。
安裝Play安裝過程如絲般順滑。從下載頁面下載最新的二進制包,然后在你喜歡的地方解壓它。
如果你用的是Windows,最好避免在路徑中混入空格。比如c:play就是個比c:Documents And Settingsuserplay更好的選擇。
為了方便操作,你需要添加Play文件夾到你的系統(tǒng)路徑中。這樣你就不需要在play命令前面敲一大通路徑名了。要想檢查安裝是否成功,打開一個新的命令行窗口,敲下play;應該會出來play的基本使用幫助。
創(chuàng)建項目現(xiàn)在Play已經(jīng)安好了,是時候開始寫博客應用。創(chuàng)建一個Play應用非常簡單,僅需要play命令行工具。之后會生成Play應用的基本架構。
打開一個新的命令行并敲入:
~$ play new yabe
它會提醒輸入應用的全名。輸入Yet Another Blog Engine。
play new命令創(chuàng)建了一個新的文件夾yabe/外加一系列文件和文件夾。其中包括下面各部分:
app/ 包括應用的核心,劃分為models,controllers和views文件夾。它也可以包括其他Java的包。這是.java源代碼文件所在之處。
conf/ 包括所有的應用配置文件,特別是主application.conf文件,路由定義文件和用于國際化的信息文件。
lib/ 包括所有可選的Java庫,比如標準的.jar。
public/ 包括所有可以公開的資源,比如Javascript文件,樣式表和圖片。
test/ 包括所有的應用測試。測試可以是Java的JUnit測試或者Selenium測試。
因為Play只使用UTF-8編碼,故所有的文本文件都需要使用UTF-8編碼。確保你的文本編輯器已經(jīng)做了相應的配置。
如果你開發(fā)過Java應用,你可能會奇怪.class文件到哪兒去了。答案是……沒有.class文件了:Play并不使用任何class文件;相反它直接處理Java源代碼。實際上我們使用Eclipse的編譯器來即時編譯Java源代碼。
這導致了開發(fā)過程中的兩點重要的改進。第一個,Play會自動監(jiān)測Java源代碼的改變并在運行時自動重載。第二個,當一個Java異常發(fā)生時,Play能向你展示更好的錯誤報告 - 帶對應的源代碼的哦~
運行應用事實上Play在應用的tmp/文件夾下有字節(jié)碼的緩存,但只用于加速重新啟動項目的過程。如果需要,你可以用play clean清空緩存。
現(xiàn)在看一下新創(chuàng)建的應用。回到命令行,切換到新創(chuàng)建的yabe/文件夾并輸入play run。Play將加載應用,并在localhost:9000啟動一個服務器。
用瀏覽器打開http://localhost:9000,你將看到新的應用。一個新的應用用一個標準的歡迎頁面,告訴你一切安好。
下面看看一個新應用是如何展示這個頁面的。
你的應用的主入口是conf/routes文件。這個文件定義了應用中所有合法的URL。如果你打開這個文件,就會看到第一個"route":
GET / Application.index
這里簡單地告訴Play,當服務器收到對/路徑的一個GET請求,它要調用Java方法Application.index。在這個例子中,Application.index是controllers.Application.index的縮寫,因為controllers包是默認在內的。
當你創(chuàng)建單個Java應用時,你通常用main方法定義一個單一入口:
public static void main(String[] args) { ... }
Play應用有多個入口,每個URL對應一個。我們稱之為action方法。action方法定義于被稱為controllers的類中。
讓我們看一下controllers.Application控制器長什么樣子。打開yabe/app/controllers/Application.java:
package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { render(); } }
注意控制器類拓展了play.mvc.Controller。這個類提供了許多對控制器有用的方法,比如我們在index action用到的render()。
這個index action被定義為public static void方法。action方法都需要這樣定義。你可以看到這些方法都是static的,因為控制器類永遠不會實例化。它們同時也是public的,這樣框架才能調用它們來響應URL請求。它們總是返回void。
這個index action很簡單:它調用render()方法來渲染模板。使用模板是大多數(shù)情況下生成HTTP響應的方式。(但不是唯一的方式)
模板是位于/app/views的文本文件。因為我們沒有指定一個模板,這個action就會使用默認的Application/index.html。
打開/yabe/app/views/Application/index.html看看模板長啥樣:
#{extends "main.html" /} #{set title:"Home" /} #{welcome /}
模板的內容簡單明了。事實上,你看到的全部是Play標簽。Play標簽就像是JSP標簽。#{welcome /}標簽生成了你看到的歡迎信息。
#{extends /}標簽告訴Play,這個模板是繼承自另一個叫main.html的模板。模板繼承是強大的特性,它允許你通過重用組件來創(chuàng)建復雜的Web頁面。
打開/yabe/app/views/main.html:
#{get "title" /} #{get "moreStyles" /} #{get "moreScripts" /} #{doLayout /}
你看到靠近底部的#{doLayout /}標簽了嗎?這是插入Application/index.html的內容的地方。
我們來看看Play如何自動重新加載控制器文件。打開yabe/app/controllers/Application.java,刪掉render()后面的分號(來制造一個錯誤)
public static void index() { render() }
在瀏覽器刷新頁面。你可以看到Play監(jiān)測到文件的變化,并重載了應用控制器。但因為制造了錯誤,你將看到一個編譯錯誤。
Ok,現(xiàn)在更正錯誤,做一個真正的修改:
public static void index() { System.out.println("Yop"); render(); }
這次,Play正確地重載了控制器,替換掉JVM中的舊代碼。每次請求/都會在控制臺輸出"Yop"信息。
你可以移開那行輸出代碼,現(xiàn)在修改yabe/app/views/Application/index.html模板,替換掉歡迎信息:
#{extends "main.html" /} #{set title:"Home" /}A blog will be here
如果Java代碼改變了,只需刷新頁面,就能看到修改結果。
配置數(shù)據(jù)庫我們還沒有開始寫博客應用呢。你可以選擇使用文本編輯器或者IDE,比如Eclipse或NetBeans。如果你想使用IDE,參閱配置你喜歡的IDE。
在開始碼代碼之前還要做多一件事。作為博客引擎,我們需要一個數(shù)據(jù)庫。為了便于開發(fā),Play內置了一個叫H2的數(shù)據(jù)庫。當然如果需要,我們也可以切換到一個更加健壯的數(shù)據(jù)庫。你可以選擇設置數(shù)據(jù)是存儲在內存中,還是在文件系統(tǒng)中(這樣即使應用重新啟動,你的數(shù)據(jù)也會保留)。
在一開始,我們將對應用模型做許多測試和改動。因此,最好選擇存儲在內存中,這樣每次啟動,都不會跟舊數(shù)據(jù)有任何牽連。
打開yabe/conf/application.conf,解除這一行的注釋:
db=mem
正如你在注釋中看到的一樣,你可以容易地配置任何JDBC數(shù)據(jù)庫,甚至配置連接池。
這個教程是按照純內存數(shù)據(jù)庫撰寫的;如何在其他數(shù)據(jù)庫使用JPA的內容超出了本教程的范疇。
現(xiàn)在,回到瀏覽器并刷新歡迎頁面。Play將自動啟動數(shù)據(jù)庫。檢查下面的一行是否出現(xiàn)在應用日志中:
INFO ~ Connected to jdbc:h2:mem:play使用版本控制系統(tǒng)來追蹤變化
當你開發(fā)一個項目時,最好使用版本控制系統(tǒng)(VCS)來存儲你的源代碼。如果發(fā)生什么問題,它允許你還原到上一個版本。同時它使得多人協(xié)作變得更方便,并且允許簽出應用的各個版本。
當在VCS中存儲Play應用代碼時,記住把tmp/,modules/,lib/,test-result/和logs文件夾排除在外。
如果你正在使用Eclipse,和play eclipsify命令,那么你也應該把.classpath和eclipse/排除在外。
Bazaar這里我們將用Bazaar作為例子。Bazaar是一個分布式版本控制系統(tǒng)。
如何安裝Bazaar超出了本教程的范疇,但無論是何種系統(tǒng),安裝都很簡單。一旦你安裝好了,切到博客文件夾,并輸入命令初始化應用版本:
$ bzr init $ bzr ignore tmp $ bzr ignore modules $ bzr ignore lib $ bzr ignore test-result $ bzr ignore logs
現(xiàn)在我們可以提交我們的博客引擎的第一個版本:
$ bzr add $ bzr commit -m "YABE initial version"Git
Git是另一個分布式版本控制系統(tǒng),查看它的文檔來獲取更多信息。
在應用的根目錄下創(chuàng)建一個git版本庫:
$ git init
創(chuàng)建包括下面各項的.gitignore:
/tmp /modules /lib /test-result /logs
加入應用的代碼,然后提交:
$ git add . $ git commit -m "YABE initial version"
版本1已經(jīng)提交上去,現(xiàn)在我們的應用已經(jīng)有了個堅實的基礎。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64078.html
摘要:對的詳細配置已經(jīng)超出了本教程的范圍,但大體上看上去像這樣然后在中加入下面一行,讓本地的反向代理能夠連接上你的應用這才只是個開始如果一路上你一直跟著本教程,你應該已經(jīng)懂得如何開發(fā)一個應用了。 部署應用 如今我們已經(jīng)完成了博客引擎了。讓我們來看一下一些部署Play應用的步驟。 定義一個框架ID 一般,你需要部署你的應用到一臺跟開發(fā)時不一樣的電腦。這臺電腦(很有可能是臺服務器)上面的P...
摘要:設置驗證碼任何人都可以在我們的博客下發(fā)布評論,所以我們需要避免非人類用戶來擾亂秩序。一個簡單的防范方法是設置驗證碼。然后我們修改表單來顯示驗證碼,并把寫入隱藏的域里面。檢查驗證碼功能是否完成了。 設置驗證碼 任何人都可以在我們的博客下發(fā)布評論,所以我們需要避免非人類用戶來擾亂秩序。一個簡單的防范方法是設置驗證碼。 生成驗證碼 如何利用Play框架來生成驗證碼?簡單來說,我們需要增...
摘要:瀏覽和提交評論博客主頁現(xiàn)在已經(jīng)完成,接下來要完成博客正文頁面。整個頁面將展示當前文章的所有評論,還包括一個用于提交新的評論的表單。刷新瀏覽器,檢查這次是否使用了正確的。給模板添加表單在后面試下提交新的評論。 瀏覽和提交評論 博客主頁現(xiàn)在已經(jīng)完成,接下來要完成博客正文頁面。整個頁面將展示當前文章的所有評論,還包括一個用于提交新的評論的表單。 創(chuàng)建show action 要顯示文章內...
摘要:通過來實現(xiàn)一個基本的管理面板目前,我們還沒法使用博客的來寫新的文章,或修改評論。提供了一個即開即用的模塊,可以快速生成一個基本的管理面板。這是因為默認是以的輸出來得到一個模型對象的表示。在本教程的最后一章,你會學到關于本地化信息的更多東西。 通過CRUD來實現(xiàn)一個基本的管理面板 目前,我們還沒法使用博客的UI來寫新的文章,或修改評論。Play提供了一個即開即用的CRUD模塊,可以快速...
摘要:完成應用測試我們已經(jīng)完成了我們想要創(chuàng)建的博客引擎。當然我們已經(jīng)完成了測試所有模型層的功能。評估代碼覆蓋率當然我們還沒有完成應用所需的所有測試用例。如你所見,我們遠遠沒有完成對應用的全面測試。 完成應用測試 我們已經(jīng)完成了我們想要創(chuàng)建的博客引擎。不過這個項目尚未完全結束。為了保證代碼的質量,我們需要添加更多的測試。 當然我們已經(jīng)完成了測試所有模型層的功能。所以博客引擎的核心功能已經(jīng)被...
閱讀 2472·2021-11-24 09:39
閱讀 3518·2019-08-30 15:53
閱讀 594·2019-08-29 15:15
閱讀 2903·2019-08-26 13:23
閱讀 3212·2019-08-26 10:48
閱讀 643·2019-08-26 10:31
閱讀 748·2019-08-26 10:30
閱讀 2359·2019-08-23 18:32