本篇內(nèi)容介紹了“Play Framework怎么用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都做網(wǎng)站、趙縣網(wǎng)絡(luò)推廣、成都小程序開發(fā)、趙縣網(wǎng)絡(luò)營銷、趙縣企業(yè)策劃、趙縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供趙縣建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
準(zhǔn)備
安裝 Java 5 以上版本及Play。
項目創(chuàng)建
打開CMD,執(zhí)行:
play new helloworld
Play new 命令在當(dāng)前路徑下創(chuàng)建了一個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)致兩件重要的事情。首先運行時Play會檢查你對源文件所作的變更并自動加載它們。其次,當(dāng)發(fā)生異常時,Play將創(chuàng)建更好的錯誤報告并附加相關(guān)代碼。
運行應(yīng)用
在cmd中鍵入play run helloworld,play啟動Web Server并監(jiān)聽9000端口
打開瀏覽器鍵入http://localhost:9000,應(yīng)用顯示了一個缺省的歡迎頁
現(xiàn)在,看下此頁是如何顯示的。
應(yīng)用的主入口點配置在conf/routes文件中。它定義了應(yīng)用所有可訪問的URL。打開routes文件,會看到***個route:
GET / Application.index
它告訴Play,當(dāng)/路徑收到GET請求后調(diào)用Application.indexJava方法。它是controllers.Application.index的縮寫,因為controllers包是隱式的附加的。
創(chuàng)建標(biāo)準(zhǔn)Java應(yīng)用時,通常使用一個入口點即main方法。Play應(yīng)用則有多個,一個URL一個。這些方法稱為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擴展了play.mvcController類。它提供了所有Controller需要使用的方法,如index動作中使用的render方法。
index方法定義成public static void,因為Controller永遠無需實例化和返回值。(譯注:為了防止被使用者引入狀態(tài),并讓Controller自然、干凈而如此設(shè)計。但副作用是render只能通過throw扔出結(jié)果,用異常當(dāng)GOTO,可謂兵行詭道)。
缺省的index動作調(diào)用render方法,通知Play渲染一個模板。模板是app/views目錄下一個簡單的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此模板集成另一個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' /}
我們使用@{…}符號請求Play自動產(chǎn)生調(diào)用Application.sayHello動作的方法。刷新瀏覽器。
Oops,出錯了。因為引用了一個不存在的動作。需要在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ù),它會自動映射到form提交的HTTP請求的myName參數(shù)。刷新瀏覽器。
輸入name提交,出現(xiàn)另一個錯誤.
因為Play渲染此動作的缺省模板時,沒有找到它。我們創(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。因為Play通過缺省規(guī)則捕獲了此URL
* /{controller}/{action} {controller}.{action}
可以編輯helloworld/conf/routes文件在缺省規(guī)則前添加一條規(guī)則,提供更自然的hello url
GET /hello Application.sayHello
自定義布局
可以修改模板更改布局。編輯helloworld/app/views/main.html文件:
添加驗證
給form添加一個驗證,要求name字段必填。我們通過Play validation實現(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自動檢查myName字段是否填寫。如果驗證失敗,我們加入一條消息到flash scope中并重定向到index動作。flash scope允許在重定向時保持消息。
編輯helloworld/app/views/Application/index.html顯示錯誤消息
#{extends 'main.html' /} #{set title:'Home' /} #{if flash.error}${flash.error}
#{/if}
輸入空參數(shù)并提交,OK起作用了。
自動化測試
Selenium Test
在測試模式下運行應(yīng)用。在cmd中輸入play test helloworld。
打開瀏覽器,輸入http://localhost:9000/@tests啟動測試器。
執(zhí)行測試
Selenium測試用例通常寫成一個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}
此測試打開home頁,確認(rèn)響應(yīng)中沒有“Application error”。
讓我們來編寫自己的測試。編輯測試內(nèi)容:
*{ You can use plain selenium command using the selenium tag }* #{selenium} // Open the home page, and check that no error occurred open('/') assertNotTitle('Application error') // Check that it is the form assertTextPresent('The Hello world app.') // Submit the form clickAndWait('css=input[type=submit]') // Check the error assertTextPresent('Oops, please enter your name!') // Type the name and submit type('css=input[type=text]', 'bob') clickAndWait('css=input[type=submit]') // Check the result assertTextPresent('Hello bob!') assertTextPresent('The Hello world app.') // Check the back link clickAndWait('link=Back to form') // Home page? assertTextNotPresent('Hello bob!') #{/selenium}
重新執(zhí)行
“Play Framework怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!