日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
PlayFramework介紹:HelloWorld

本文翻譯自官網(wǎng)。原文見:http://www.playframework.org/documentation/1.1.1/firstapp

萬寧網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,萬寧網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為萬寧上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的萬寧做網(wǎng)站的公司定做!

Play是一個(gè)Rails風(fēng)格的Java Web框架。先上官網(wǎng)的Hello World,感覺下。運(yùn)行環(huán)境,我換成了Windows ^_^

準(zhǔn)備

安裝 Java 5 以上版本及Play。安裝指導(dǎo)見:http://www.playframework.org/documentation/1.1.1/install

項(xiàng)目創(chuàng)建

打開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國(guó)際化用。

lib/ 包含應(yīng)用依賴的標(biāo)準(zhǔn).jar文件。

public/包含所有外部可訪問的資源:js,css和image。

test/包含所有應(yīng)用的測(cè)試程序。測(cè)試程序基于JUnit或Selenium。

注:Play要求所有文件必須是UTF-8編碼。

等等應(yīng)用的.class文件在哪兒。恩,Play不使用class文件而是直接讀取Java源文件,并使用Eclipse compiler編譯他們。

這導(dǎo)致兩件重要的事情。首先運(yùn)行時(shí)Play會(huì)檢查你對(duì)源文件所作的變更并自動(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請(qǐng)求后調(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:

 
 
 
 
  1. package controllers;  
  2.  
  3. import play.*;  
  4. import play.mvc.*;  
  5.  
  6. import java.util.*;  
  7.  
  8. import models.*;  
  9.  
  10. public class Application extends Controller {  
  11.  
  12.     public static void index() {  
  13.         render();  
  14.     }  
  15.  

 

看到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è)簡(jiǎn)單的text文件。此處使用Application/index.html

打開helloworld/app/views/Application/index.html文件:

 
 
 
 
  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.  
  4. #{welcome /} 

 

其中的內(nèi)容是Play tag,類似JSP taglib.#{welcome/}tag生成了之前看到的歡迎消息。#{extends/}tags告訴Play此模板集成另一個(gè)main.html的模板.模板繼承可用來創(chuàng)建復(fù)雜的web也并重用公共部分。

打開helloworld/app/views/main.html模板

 
 
 
 
  1.  
  2.  
  3.  
  4.      
  5.         #{get 'title' /} 
  6.          
  7.          
  8.         #{get 'moreStyles' /}  
  9.          
  10.          
  11.         #{get 'moreScripts' /}  
  12.      
  13.      
  14.         #{doLayout /}  
  15.      
  16.  

 

看到#{doLayout/}tag嗎?是Application/index.html插入的位置。

#p#

創(chuàng)建FORM

編輯helloworld/app/views/Application/index.html模板

 
 
 
 
  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.    
  4.  
  5.        
  6.       
  7.  

 

我們使用@{…}符號(hào)請(qǐng)求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)建:

 
 
 
 
  1. package controllers;  
  2.  
  3. import play.mvc.*;  
  4.  
  5. public class Application extends Controller {  
  6.  
  7.     public static void index() {  
  8.         render();  
  9.     }  
  10.       
  11.     public static void sayHello(String myName){  
  12.         render(myName);  
  13.     }  

 

我們聲明了myName參數(shù),它會(huì)自動(dòng)映射到form提交的HTTP請(qǐng)求的myName參數(shù)。刷新瀏覽器。

輸入name提交,出現(xiàn)另一個(gè)錯(cuò)誤.

因?yàn)镻lay渲染此動(dòng)作的缺省模板時(shí),沒有找到它。我們創(chuàng)建文件helloworld/app/views/Application/sayHello.html

 
 
 
 
  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.  
  4. Hello ${myName ?: 'guest'}!

     
  5.    
  6. 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 url

GET /hello Application.sayHello

 

#p#

自定義布局

可以修改模板更改布局。編輯helloworld/app/views/main.html文件:

添加驗(yàn)證

給form添加一個(gè)驗(yàn)證,要求name字段必填。我們通過Play validation實(shí)現(xiàn)。編輯helloworld/app/controllers/Application.java,在sayHello action處:

 
 
 
 
  1. public static void sayHello(@Required String myName) {  
  2.         if (validation.hasErrors()) {  
  3.             flash.error("Oops, please enter your name!");  
  4.             index();  
  5.         }  
  6.         render(myName);  
  7.     } 

 

并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ò)誤消息

 
 
 
 
  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.    
  4. #{if flash.error}  
  5.       
  6.         ${flash.error}  
  7.     

     
  8. #{/if}  
  9.  
  10.  
  11.        
  12.       
  13.  

 

輸入空參數(shù)并提交,OK起作用了。

自動(dòng)化測(cè)試

Selenium Test

在測(cè)試模式下運(yùn)行應(yīng)用。在cmd中輸入play test helloworld。

打開瀏覽器,輸入http://localhost:9000/@tests啟動(dòng)測(cè)試器。

執(zhí)行測(cè)試

Selenium測(cè)試用例通常寫成一個(gè)html文件。Play使用Play模板引擎生成這些文件。helloworld/test/Application.test.html文件:

 
 
 
 
  1. *{ You can use plain selenium command using the selenium tag }*  
  2.  
  3. #{selenium}  
  4.     // Open the home page, and check that no error occured  
  5.     open('/')  
  6.     assertNotTitle('Application error')  
  7. #{/selenium} 

此測(cè)試打開home頁,確認(rèn)響應(yīng)中沒有“Application error”。

讓我們來編寫自己的測(cè)試。編輯測(cè)試內(nèi)容:

 
 
 
 
  1. *{ You can use plain selenium command using the selenium tag }*  
  2.  
  3. #{selenium}  
  4.     // Open the home page, and check that no error occurred  
  5.     open('/')  
  6.     assertNotTitle('Application error')  
  7.       
  8.     // Check that it is the form  
  9.     assertTextPresent('The Hello world app.')  
  10.       
  11.     // Submit the form  
  12.     clickAndWait('css=input[type=submit]')  
  13.       
  14.     // Check the error  
  15.     assertTextPresent('Oops, please enter your name!')  
  16.       
  17.     // Type the name and submit  
  18.     type('css=input[type=text]', 'bob')  
  19.     clickAndWait('css=input[type=submit]')  
  20.       
  21.     // Check the result  
  22.     assertTextPresent('Hello bob!')  
  23.     assertTextPresent('The Hello world app.')  
  24.       
  25.     // Check the back link  
  26.     clickAndWait('link=Back to form')  
  27.       
  28.     // Home page?  
  29.     assertTextNotPresent('Hello bob!')  
  30. #{/selenium} 

重新執(zhí)行

 


分享名稱:PlayFramework介紹:HelloWorld
分享路徑:http://m.5511xx.com/article/dhhdcdp.html