Play_framework最新教程.doc_第1頁
Play_framework最新教程.doc_第2頁
Play_framework最新教程.doc_第3頁
Play_framework最新教程.doc_第4頁
Play_framework最新教程.doc_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2012年最新整理的Play framework框架學(xué)習(xí)文檔Play framework框架學(xué)習(xí)文檔1一、什么是Playframework3二、playframework框架的優(yōu)點(diǎn)4三、Play FrameWork開發(fā)入門51、準(zhǔn)備工作52、新建項(xiàng)目53、環(huán)境變量配置74、MVC模型8app/controllers9app/models9app/views95、應(yīng)用程序布局9app目錄9.class文件在哪兒?9public目錄10conf目錄10lib目錄106、創(chuàng)建簡單的helloworld程序10運(yùn)行應(yīng)用11創(chuàng)建FORM15提供更好的URL18自定義布局19添加驗(yàn)證19自動(dòng)化測試21一、什么是Playframework Play Framework是一個(gè)功能完整的Java Web開發(fā)框架。采用RESTful架構(gòu)設(shè)計(jì),簡便靈活。Play Framework使用MVC模式作為Web層,集成Hibernate管理持久層,Play Framework還使用一個(gè)基于Groovy的模板引擎。 Play Framework讓開發(fā)者無須重新編譯打包發(fā)布應(yīng)用,即可看到修改后的效果,方便開發(fā)人員調(diào)試應(yīng)用。 Play Framework采用了無狀態(tài)模型,是一個(gè)真正意義上的“無共享”系統(tǒng),能夠在多個(gè)服務(wù)器上部署多個(gè)Play Framework的實(shí)例,所有實(shí)例都不會(huì)互相干擾。 Play Framework采用了Groovy作為模板引擎,讓表示層真正做到了開發(fā)高效簡潔 Play Framework擁有精確的錯(cuò)誤定位機(jī)制,當(dāng)錯(cuò)誤發(fā)生的時(shí)候,可以精確的定位到錯(cuò)誤代碼的位置。 Play Framework的速度很快,啟動(dòng)快,運(yùn)行的速度也十分快。注:RESTful架構(gòu):REST (REpresentation State Transfer) 描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一。REST 指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTfulWeb 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請求之間是無狀態(tài)的。從客戶端到服務(wù)器的每個(gè)請求都必須包含理解請求所必需的信息。如果服務(wù)器在請求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。此外,無狀態(tài)請求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境??蛻舳丝梢跃彺鏀?shù)據(jù)以改進(jìn)性能。另一個(gè)重要的 REST 原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。通過將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。 當(dāng) REST 架構(gòu)的約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)可以擴(kuò)展到大量客戶端的應(yīng)用程序。它還降低了客戶端和服務(wù)器之間的交互延遲。統(tǒng)一界面簡化了整個(gè)系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見性。REST 簡化了客戶端和服務(wù)器的實(shí)現(xiàn)。詳細(xì)介紹:/view/5798116.htmGroovy模塊引擎:Groovy是一種新興的 Java 2 平臺(tái)語言。Groovy 代碼能夠與 Java 代碼很好地結(jié)合,也能用于擴(kuò)展現(xiàn)有代碼。目前的 Groovy 版本是 1.6.3,在 Java 1.4 和 Java 5 平臺(tái)上都能使用,也能在 Java 6 上使用。 Groovy 是 JVM 的一個(gè)替代語言 替代 是指可以用 Groovy 在 Java 平臺(tái)上進(jìn)行 Java 編程,使用方式基本與使用 Java 代碼的方式相同。注意:不是指Groovy替代java,而是指Groovy和java很好的結(jié)合編程 是一個(gè)基于 Java虛擬機(jī)的敏捷 動(dòng)態(tài)語言。 構(gòu)建在強(qiáng)大的Java語言之上 并 添加了從Python,Ruby和Smalltalk等語言中學(xué)到的 諸多特征。 為Java開發(fā)者提供了 現(xiàn)代最流行的編程語言特性,而且學(xué)習(xí)成本很低(幾乎為零)。 支持DSL(Domain Specific Languages領(lǐng)域定義語言)和其它簡潔的語法,讓你的代碼變得易于閱讀和維護(hù)。 Groovy擁有處理原生類型,面向?qū)ο笠约耙粋€(gè)Ant DSL,使得創(chuàng)建Shell Scripts變的非常簡單。 在開發(fā)Web,GUI,數(shù)據(jù)庫或控制臺(tái)程序時(shí) 通過 減少框架性代碼 大大提高了開發(fā)者的效率。 支持單元測試和模擬(對象),可以 簡化測試。 無縫集成 所有已經(jīng)存在的 Java對象和類庫。 直接編譯成Java字節(jié)碼,這樣可以在任何使用Java的地方 使用Groovy。 Groovy 的一個(gè)好處是,它的語法與 Java 語言的語法很相似。雖然 Groovy 的語法源于 Smalltalk 和 Ruby 這類語言的理念,但是可以將它想像成 Java 語言的一種更加簡單、表達(dá)能力更強(qiáng)的變體。(在這點(diǎn)上,Ruby 與 Groovy 不同,因?yàn)樗恼Z法與 Java 語法差異很大。) 許多 Java 開發(fā)人員非常喜歡 Groovy 代碼和 Java 代碼的相似性。從學(xué)習(xí)的角度看,如果知道如何編寫 Java 代碼,那就已經(jīng)了解 Groovy 了。Groovy 和 Java 語言的主要區(qū)別是:完成同樣的任務(wù)所需的 Groovy 代碼比 Java 代碼更少。(有時(shí)候會(huì)少很多!)二、playframework框架的優(yōu)點(diǎn)1) 修改代碼及時(shí)生效!編輯java文件,保存,刷新瀏覽器,即可看到效果!無須編譯,部署,重啟服務(wù)器。2) 全棧式集成Hibernate,OpenID,Memcached還有強(qiáng)大的插件系統(tǒng),提供了創(chuàng)建一個(gè)酷炫的web應(yīng)用所需要的一切。3) 無狀態(tài)模式4) Play是一個(gè)真正的“Share nothing”的系統(tǒng)。適合REST,通過在多臺(tái)服務(wù)器運(yùn)行同一個(gè)應(yīng)用的多個(gè)實(shí)例,可以很容易地實(shí)現(xiàn)容量擴(kuò)展。5) 快速的解決錯(cuò)誤當(dāng)發(fā)生錯(cuò)誤時(shí),Play會(huì)向你準(zhǔn)確展示源代碼中產(chǎn)生問題的那一行代碼,即使是發(fā)生在模板中。6) 高校的模塊系統(tǒng)一個(gè)簡單的基于Groovy作為表達(dá)式語言的模塊系統(tǒng)。它提供了模塊的繼承,包含和標(biāo)簽的功能。7) 有趣&高校幫助你節(jié)省等待java應(yīng)用重啟的時(shí)間,提高生產(chǎn)效率,更快地完成工程。8) 異步基于非阻塞IO模型,允許創(chuàng)建基于長輪詢和WebSockets的現(xiàn)代WebSockets的現(xiàn)代Web應(yīng)用。9) 純粹的Java使用Java進(jìn)行編碼,可以使用任何的Java庫,可以使用你喜歡的IDE,可以與eclipse或者netbeans優(yōu)雅地結(jié)合。三、Play FrameWork開發(fā)入門1、準(zhǔn)備工作官方網(wǎng)站:下載最新版本的play-1.2.3.zip開發(fā)包。將下載的包解壓,解壓后的路徑最好不要包括空格、中文之類的,好像會(huì)有問題。2、新建項(xiàng)目將下載的play-1.2.3.zip開發(fā)包解壓并進(jìn)行環(huán)境變量的配置(也可不需要配置環(huán)境變量,但要在運(yùn)行時(shí)要完整絕對路徑)打開cmd命令窗口,鍵入cd play壓縮目錄,接著輸入play new 新建項(xiàng)目名稱,運(yùn)行項(xiàng)目輸入play run 項(xiàng)目名稱。如果沒有報(bào)錯(cuò)證明項(xiàng)目可以運(yùn)行,接著輸入 play eclipsify 項(xiàng)目名稱,才可導(dǎo)入項(xiàng)目到eclipsify,打開eclipse,導(dǎo)入剛才新建的項(xiàng)目即可。3、環(huán)境變量配置Path: C:Program FilesJavajdk1.6.0_21bin;CLASSPATH: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;JAVA_HOME: C:JDK(jdk安裝路徑)4、MVC模型Play應(yīng)用遵循Web架構(gòu)使用的MVC架構(gòu)模式。它將應(yīng)用分離到不同的層中:表現(xiàn)層(Presentation)和模型層(Model)。表現(xiàn)層進(jìn)一步分為視圖(View)和控制器(Controller)。 Model 是應(yīng)用所處理信息的領(lǐng)域表述(Domain-Specific Representation)。絕大多數(shù)應(yīng)用使用持久化機(jī)制如數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)。但是MVC并沒有特別提到數(shù)據(jù)訪問層,因?yàn)樗鼘儆谙聦樱赡P头庋b。 View 將模型渲染成適合交互的表單,通常是用戶界面。一個(gè)模型可有多個(gè)不同目的視圖。Web應(yīng)用中,View通常以HTML,XML或JSON形式呈現(xiàn),也可能是二進(jìn)制的Chart。 Controller處理事件(通常是用戶動(dòng)作),并對模型做相應(yīng)改變。Web應(yīng)用中,事件通常是HTTP請求:Controller監(jiān)聽HTTP請求,從其中提取數(shù)據(jù),如查詢字符串參數(shù),請求頭,然后改變下層模型對象。 Play將此三層分在app目錄下的不同package中。app/controllers一個(gè)Controller就是一個(gè)Java 類,它的靜態(tài)公共方法則是動(dòng)作(Action)。動(dòng)作是接收HTTP請求后的Java處理入口點(diǎn)。Controller類實(shí)際是面向過程的,非OO。Action從HTTP請求中提取數(shù)據(jù),讀或更新Model對象,然后返回一個(gè)包裝成HTTP響應(yīng)(HTTP Response)的結(jié)果。app/modelsModel是一組具有所有OO特性的Java類。包含數(shù)據(jù)結(jié)構(gòu)和應(yīng)用可使用的操作。(譯注:即充血模型)。支持通過JPA持久化。app/views應(yīng)用的視圖由Play的模板系統(tǒng)生成。Controller從Model獲取數(shù)據(jù),然后使用模板呈現(xiàn)它。此package包含HTML,XML等模板文件,用作動(dòng)態(tài)生成模型的表述(Representation)。5、應(yīng)用程序布局app目錄包含所有可執(zhí)行的工件:Java源代碼和視圖模板。其下有三個(gè)標(biāo)準(zhǔn)package,每個(gè)代表MVC的一層。你也能添加你自己的包,如示例的utils包。View pacakge可以在分子packages: tags 存儲(chǔ)應(yīng)用的ta。如可重用的模板片段。 一個(gè)Controller一個(gè)view目錄,按慣例,每個(gè)Controller的相關(guān)模板存儲(chǔ)在自己的子目錄中。 .class文件在哪兒?Play在運(yùn)行時(shí)編譯Java源代碼,并將編譯的類緩存在tmpbytecode目錄下。Play應(yīng)用的可執(zhí)行工件時(shí).java源文件,不是已編譯的.class(譯注:包括jar文件)。public目錄存儲(chǔ)靜態(tài)的、由Web服務(wù)器直接處理的資源。分為三個(gè)子目錄:images,stylesheets和javascripts,分別放圖片,css和js。conf目錄包含應(yīng)用的所有配置文件。兩個(gè)必須文件為: application.conf: 應(yīng)用主配置文件,包含所有標(biāo)準(zhǔn)的配置選項(xiàng)。 routes:url路由規(guī)則定義文件。 此目錄包含在Java ClassPath中。lib目錄存放應(yīng)用依賴的標(biāo)準(zhǔn)Java類庫。此目錄自動(dòng)添加到Java classpath中。6、創(chuàng)建簡單的helloworld程序打開CMD,執(zhí)行:play new helloworld Play new 命令在當(dāng)前路徑下創(chuàng)建了一個(gè)helloworld目錄,其中包含一系列文件和目錄,重要的如下:app/ 包含應(yīng)用核心,分為models,controllers和views目錄。.java生活的地方_conf/包含應(yīng)用的所有配置。application.conf應(yīng)用主配置.routes定義url路由規(guī)則,messages國際化用。lib/ 包含應(yīng)用依賴的標(biāo)準(zhǔn).jar文件。public/包含所有外部可訪問的資源:js,css和image。test/包含所有應(yīng)用的測試程序。測試程序基于JUnit或Selenium。注:Play要求所有文件必須是UTF-8編碼。等等應(yīng)用的.class文件在哪兒。恩,Play不使用class文件而是直接讀取Java源文件,并使用Eclipse compiler編譯他們。這導(dǎo)致兩件重要的事情。首先運(yùn)行時(shí)Play會(huì)檢查你對源文件所作的變更并自動(dòng)加載它們。其次,當(dāng)發(fā)生異常時(shí),Play將創(chuàng)建更好的錯(cuò)誤報(bào)告并附加相關(guān)運(yùn)行應(yīng)用在cmd中鍵入play run helloworld,play啟動(dòng)Web Server并監(jiān)聽9000端口打開瀏覽器鍵入http:/localhost:9000/,應(yīng)用顯示了一個(gè)缺省的歡迎頁現(xiàn)在,看下此頁是如何顯示的。應(yīng)用的主入口點(diǎn)配置在conf/routes文件中。它定義了應(yīng)用所有可訪問的URL。打開routes文件,會(huì)看到第一個(gè)route:GET / Application.index它告訴Play,當(dāng)/路徑收到GET請求后調(diào)用Application.indexJava方法。它是controllers.Application.index的縮寫,因?yàn)閏ontrollers包是隱式的附加的。創(chuàng)建標(biāo)準(zhǔn)Java應(yīng)用時(shí),通常使用一個(gè)入口點(diǎn)即main方法。Play應(yīng)用則有多個(gè),一個(gè)URL一個(gè)。這些方法稱為action方法。定義action方法的類稱為controller。打開helloworld/app/controllers/Application.java:package controllers;import play.*;import play.mvc.*;import java.util.*;import models.*;public class Application extends Controller public static void index() render(); 看到Application擴(kuò)展了play.mvcController類。它提供了所有Controller需要使用的方法,如index動(dòng)作中使用的render方法。index方法定義成public static void,因?yàn)镃ontroller永遠(yuǎn)無需實(shí)例化和返回值。(譯注:為了防止被使用者引入狀態(tài),并讓Controller自然、干凈而如此設(shè)計(jì)。但副作用是render只能通過throw扔出結(jié)果,用異常當(dāng)GOTO,可謂兵行詭道)。缺省的index動(dòng)作調(diào)用render方法,通知Play渲染一個(gè)模板。模板是app/views目錄下一個(gè)簡單的text文件。此處使用Application/index.html打開helloworld/app/views/Application/index.html文件:#extends main.html /#set title:Home /#welcome /其中的內(nèi)容是Play tag,類似JSP taglib.#welcome/tag生成了之前看到的歡迎消息。#extends/tags告訴Play此模板集成另一個(gè)main.html的模板.模板繼承可用來創(chuàng)建復(fù)雜的web也并重用公共部分。打開helloworld/app/views/main.html模板 #get title / #get moreStyles / #get moreScripts / #doLayout / 看到#doLayout/tag嗎?是Application/index.html插入的位置。創(chuàng)建FORM編輯helloworld/app/views/Application/index.html模板#extends main.html /#set title:Home / 我們使用符號(hào)請求Play自動(dòng)產(chǎn)生調(diào)用Application.sayHello動(dòng)作的方法。刷新瀏覽器。Oops,出錯(cuò)了。因?yàn)橐昧艘粋€(gè)不存在的動(dòng)作。需要在helloworld/app/controllers/Application.java中創(chuàng)建:package controllers;import play.mvc.*;public class Application extends Controller public static void index() render(); public static void sayHello(String myName) render(myName); 我們聲明了myName參數(shù),它會(huì)自動(dòng)映射到form提交的HTTP請求的myName參數(shù)。刷新瀏覽器。輸入name提交,出現(xiàn)另一個(gè)錯(cuò)誤.因?yàn)镻lay渲染此動(dòng)作的缺省模板時(shí),沒有找到它。我們創(chuàng)建文件helloworld/app/views/Application/sayHello.html#extends main.html /#set title:Home /Hello $myName ?: guest! Back to form然后刷新:提供更好的URL看下提交的url:http:/localhost:9000/application/sayhello?myName=chaos它不夠RESTful。因?yàn)镻lay通過缺省規(guī)則捕獲了此URL* /controller/action controller.action可以編輯helloworld/conf/routes文件在缺省規(guī)則前添加一條規(guī)則,提供更自然的hello urlGET /hello Application.sayHello自定義布局可以修改模板更改布局。編輯helloworld/app/views/main.html文件:添加驗(yàn)證給form添加一個(gè)驗(yàn)證,要求name字段必填。我們通過Play validation實(shí)現(xiàn)。編輯helloworld/app/controllers/Application.java,在sayHello action處:public static void sayHello(Required String myName) if (validation.hasErrors() flash.error(Oops, please enter your name!); index(); render(myName); 并import play.data.validation.*。Required告訴Play自動(dòng)檢查myName字段是否填寫。如果驗(yàn)證失敗,我們加入一條消息到flash scope中并重定向到index動(dòng)作。flash scope允許在重定向時(shí)保持消息。編輯helloworld/app/views/Application/index.html顯示錯(cuò)誤消息#extends main.html /#set title:Home / #if flash.error $flash.error #/if 輸入空參數(shù)并提交,OK起作用了。自動(dòng)化測試Selenium Test在測試模式下運(yùn)行應(yīng)用。在cmd中輸入play test helloworld。打開瀏覽器,輸入http:/localhost:9000/tests啟動(dòng)測試器。執(zhí)行測試Selenium測試用例通常寫成一個(gè)html文件。Play使用Play模板引擎生成這些文件。helloworld/test/Application.test.html文件:* You can use plain selenium command using the selenium tag *#selenium / Open the home page, and check that no error occured open(/) assertNotTitle(Application error)#/selenium此測試打開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論