精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Play Framework介紹:Hello World

開發 后端
Play!是一個full-stack(全棧的)Java Web應用框架,包括一個簡單的無狀態MVC模型,具有Hibernate的對象持續,一個基于Groovy的模板引擎,以及建立一個現代Web應用所需的所有東西。

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

Play是一個Rails風格的Java Web框架。先上官網的Hello World,感覺下。運行環境,我換成了Windows ^_^

準備

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

項目創建

打開CMD,執行:

play new helloworld

image

Play new 命令在當前路徑下創建了一個helloworld目錄,其中包含一系列文件和目錄,重要的如下:

app/ 包含應用核心,分為models,controllers和views目錄。.java生活的地方^_^

conf/包含應用的所有配置。application.conf應用主配置.routes定義url路由規則,messages國際化用。

lib/ 包含應用依賴的標準.jar文件。

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

test/包含所有應用的測試程序。測試程序基于JUnit或Selenium。

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

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

這導致兩件重要的事情。首先運行時Play會檢查你對源文件所作的變更并自動加載它們。其次,當發生異常時,Play將創建更好的錯誤報告并附加相關代碼。

運行應用

在cmd中鍵入play run helloworld,play啟動Web Server并監聽9000端口

image

打開瀏覽器鍵入http://localhost:9000,應用顯示了一個缺省的歡迎頁

image

現在,看下此頁是如何顯示的。

應用的主入口點配置在conf/routes文件中。它定義了應用所有可訪問的URL。打開routes文件,會看到***個route:

GET     /    Application.index

它告訴Play,當/路徑收到GET請求后調用Application.indexJava方法。它是controllers.Application.index的縮寫,因為controllers包是隱式的附加的。

創建標準Java應用時,通常使用一個入口點即main方法。Play應用則有多個,一個URL一個。這些方法稱為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擴展了play.mvcController類。它提供了所有Controller需要使用的方法,如index動作中使用的render方法。

index方法定義成public static void,因為Controller永遠無需實例化和返回值。(譯注:為了防止被使用者引入狀態,并讓Controller自然、干凈而如此設計。但副作用是render只能通過throw扔出結果,用異常當GOTO,可謂兵行詭道)。

缺省的index動作調用render方法,通知Play渲染一個模板。模板是app/views目錄下一個簡單的text文件。此處使用Application/index.html

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

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

 

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

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

  1. <!DOCTYPE html> 
  2.  
  3. <html> 
  4.     <head> 
  5.         <title>#{get 'title' /}</title> 
  6.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
  7.         <link rel="stylesheet" type="text/css" media="screen" href="@{'/public/stylesheets/main.css'}"> 
  8.         #{get 'moreStyles' /}  
  9.         <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}"> 
  10.         <script src="@{'/public/javascripts/jquery-1.4.2.min.js'}" type="text/javascript" charset="utf-8"></script> 
  11.         #{get 'moreScripts' /}  
  12.     </head> 
  13.     <body> 
  14.         #{doLayout /}  
  15.     </body> 
  16. </html> 

 

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

 

#p#

創建FORM

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

  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.    
  4. <form action="@{Application.sayHello()}" method="GET">  
  5.     <input type="text" name="myName" />   
  6.     <input type="submit" value="Say hello!" />  
  7. </form> 

 

我們使用@{…}符號請求Play自動產生調用Application.sayHello動作的方法。刷新瀏覽器。

image

Oops,出錯了。因為引用了一個不存在的動作。需要在helloworld/app/controllers/Application.java中創建:

  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參數,它會自動映射到form提交的HTTP請求的myName參數。刷新瀏覽器。

image

輸入name提交,出現另一個錯誤.

image

因為Play渲染此動作的缺省模板時,沒有找到它。我們創建文件helloworld/app/views/Application/sayHello.html

  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.  
  4. <h1>Hello ${myName ?: 'guest'}!</h1>  
  5.    
  6. <a href="@{Application.index()}">Back to form</a> 

 

然后刷新:

image

提供更好的URL

看下提交的url:

http://localhost:9000/application/sayhello?myName=chaos

它不夠RESTful。因為Play通過缺省規則捕獲了此URL

* /{controller}/{action} {controller}.{action}

 

可以編輯helloworld/conf/routes文件在缺省規則前添加一條規則,提供更自然的hello url

GET /hello Application.sayHello

 

image

#p#

自定義布局

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

image

添加驗證

給form添加一個驗證,要求name字段必填。我們通過Play validation實現。編輯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自動檢查myName字段是否填寫。如果驗證失敗,我們加入一條消息到flash scope中并重定向到index動作。flash scope允許在重定向時保持消息。

編輯helloworld/app/views/Application/index.html顯示錯誤消息

  1. #{extends 'main.html' /}  
  2. #{set title:'Home' /}  
  3.    
  4. #{if flash.error}  
  5.     <p style="color:#c00">  
  6.         ${flash.error}  
  7.     </p>  
  8. #{/if}  
  9.  
  10. <form action="@{Application.sayHello()}" method="GET">  
  11.     <input type="text" name="myName" />   
  12.     <input type="submit" value="Say hello!" />  
  13. </form> 

 

輸入空參數并提交,OK起作用了。

image

自動化測試

Selenium Test

在測試模式下運行應用。在cmd中輸入play test helloworld。

image

打開瀏覽器,輸入http://localhost:9000/@tests啟動測試器。

image

執行測試

image

Selenium測試用例通常寫成一個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} 

此測試打開home頁,確認響應中沒有“Application error”。

讓我們來編寫自己的測試。編輯測試內容:

  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} 

重新執行

image

 

 

原文鏈接:http://www.cnblogs.com/Chaos/archive/2011/04/16/2018361.html

【編輯推薦】

  1. Play Framework介紹:主要概念
  2. Java堆內存的10個要點
  3. “Java已死”簡史
  4. Play!在云端:Java PaaS平臺入門
  5. JavaFX 2.0.3發布 帶來兩個全新文檔
責任編輯:林師授 來源: Chaos的博客
相關推薦

2012-02-24 09:53:24

JavaPlay Framew

2012-02-20 14:20:44

JavaPlay Framew

2009-07-30 13:21:17

Scala入門Hello World

2012-03-14 12:29:55

JavaPlay Framwo

2012-02-22 16:06:42

2012-02-24 10:57:43

2012-02-20 14:41:30

JavaPlay Framew

2012-02-22 17:23:51

JavaPlay Framew

2012-02-23 13:13:00

JavaPlay Framew

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2014-12-19 10:07:10

C

2012-02-23 13:48:16

JavaPlay Framew

2012-03-14 09:29:00

Play framewJava

2023-01-06 08:18:44

2023-09-04 07:30:03

Wasm匯編語言

2009-08-11 10:32:23

什么是Groovy

2009-09-16 17:15:19

OSGi Bundle

2011-06-08 14:39:06

Qt 教程

2012-02-23 12:53:40

JavaPlay Framew

2021-11-26 08:22:01

Java動態開發
點贊
收藏

51CTO技術棧公眾號

caoporn成人| 91在线中文| 青青草国产成人av片免费| 中文字幕av日韩| 国产精品嫩草69影院| 345成人影院| 亚洲视频在线一区二区| 国产色综合一区二区三区| 69av视频在线观看| 黄色在线成人| 色诱女教师一区二区三区| 香蕉在线观看视频| 国产成人免费精品| 亚洲成av人片在www色猫咪| 日韩欧美在线观看强乱免费| 国产成人三级在线播放 | 国产欧美精品一区二区三区四区 | 久久琪琪电影院| jizz日本在线播放| 色天天色综合| 日韩欧美在线观看一区二区三区| 国产在线观看福利| 国产啊啊啊视频在线观看| 国产精品女主播av| 欧美日韩精品一区| 天堂成人在线视频| 国产美女精品人人做人人爽| 国产成人鲁鲁免费视频a| 久久久久久蜜桃| 99热国内精品永久免费观看| 亚洲天堂av在线免费| 污片免费在线观看| 欧美日本三级| 8v天堂国产在线一区二区| 亚洲熟妇av一区二区三区| 在线中文字幕电影| 国产精品久久国产精麻豆99网站 | 日韩精品123| 成人小视频免费观看| 91社区国产高清| 国产精品51麻豆cm传媒| 久久精品人人| 5252色成人免费视频| 国产一级在线视频| 午夜精品久久99蜜桃的功能介绍| 中文字幕在线视频日韩| 自拍偷拍亚洲天堂| 精品中文字幕一区二区三区av| 欧美va亚洲va香蕉在线 | 成人av影院在线| 91久久国产自产拍夜夜嗨| 国产精品久久综合青草亚洲AV| 免费成人小视频| 国产精品久久综合av爱欲tv| 日韩欧美国产另类| 日韩电影在线免费观看| 国产国语刺激对白av不卡| 亚洲不卡在线视频| 日韩激情一二三区| 国产精品自拍视频| 91精品中文字幕| 激情综合网天天干| 亚洲在线观看视频| 亚洲精品久久久久久无码色欲四季 | 欧美日韩中文字幕| 国产一区二区三区精彩视频| 中文字幕资源网在线观看免费| 大伊人狠狠躁夜夜躁av一区| 国产男女在线观看| 99久久er| 91精品国产91综合久久蜜臀| 亚洲午夜精品在线观看| 大奶一区二区三区| 亚洲精品动漫100p| 精品人妻一区二区三区日产乱码卜| 人人精品亚洲| 国产亚洲一区二区精品| 国产老头老太做爰视频| 伊人久久大香线蕉av超碰演员| 91精品国产沙发| 中国a一片一级一片| 国产在线精品免费| 狠狠色综合欧美激情| 国产中文字幕在线播放| 国产精品精品国产色婷婷| av久久久久久| 成人直播视频| 欧美丰满嫩嫩电影| fc2成人免费视频| 国产成人ay| 久久国产精彩视频| 国产性70yerg老太| 日韩黄色在线观看| 超碰97人人人人人蜜桃| 韩国福利在线| 一区二区欧美视频| 又色又爽又高潮免费视频国产| 中文成人在线| 亚洲精品一区二区三区不| 国产色无码精品视频国产| 激情综合激情| 成人高清视频观看www| 丰满熟妇乱又伦| 中文字幕不卡在线观看| 黄色一级片黄色| 国产精品麻豆成人av电影艾秋| 欧美绝品在线观看成人午夜影视 | 国产欧美一区二区精品秋霞影院| 今天免费高清在线观看国语| 在线成人av观看| 日韩女优电影在线观看| youjizz亚洲女人| 亚洲精品视频啊美女在线直播| 国产精品国产亚洲伊人久久| 欧美天堂在线视频| 成人欧美一区二区三区在线播放| 欧美一区二区三区爽大粗免费| 精品一级视频| 中文字幕精品—区二区| aaa人片在线| 国产精品一级黄| 亚洲韩国在线| 久九九久频精品短视频| 亚洲福利视频专区| 欧产日产国产v| 精品在线观看免费| 日韩高清av| 韩日成人影院| 亚洲精品一区中文| 日韩精品视频免费看| 国产白丝精品91爽爽久久 | 亚洲国产日本| 99九九电视剧免费观看| 高清免费电影在线观看| 欧美图片一区二区三区| 久久久无码人妻精品一区| 黄色综合网站| 国产精品入口免费| 久久大胆人体| 亚洲精品一区二区三区福利| 欧美片一区二区| 国产成人在线看| 欧美日韩一级在线| 成人动漫视频在线观看| 日韩在线中文视频| 国产精品乱码一区二区| 国产精品电影一区二区| 向日葵污视频在线观看| 欧美一级淫片| 国产在线拍偷自揄拍精品| 一广人看www在线观看免费视频| 欧美亚洲免费在线一区| 国产又粗又黄又猛| 捆绑调教美女网站视频一区| 亚洲午夜精品久久久中文影院av| 日韩欧美三区| 欧美精品在线观看91| www.爱爱.com| 亚洲va天堂va国产va久| 好男人香蕉影院| 国产精品久久久久9999高清| 欧美主播一区二区三区美女 久久精品人 | 超碰人人人人人人| 亚洲丰满少妇videoshd| 精品久久久久久中文字幕人妻最新| 亚洲永久免费| 亚洲成人自拍视频| 伊人国产精品| 欧美福利视频网站| 人人九九精品| 欧美日本乱大交xxxxx| 欧美成人精品欧美一级私黄| 不卡的看片网站| 免费午夜视频在线观看| 久久精品不卡| 国产欧美亚洲日本| 日本一区二区三区视频在线| 久久中文字幕国产| 欧洲精品久久一区二区| 在线观看三级视频欧美| 中文字幕五月天| www.99精品| 黄色aaa级片| 国产精品啊啊啊| 久久综合狠狠综合久久综青草| 日韩一区精品| 久久99精品久久久久久噜噜 | 中文字幕在线2018| 亚洲综合区在线| 天天躁日日躁aaaxxⅹ| 国产在线麻豆精品观看| 欧美亚洲日本一区二区三区| 俺要去色综合狠狠| 岛国视频一区免费观看| 亚洲承认视频| 欧美激情一区二区久久久| 国产在线网站| 欧美mv日韩mv| 在线观看毛片视频| 亚洲国产aⅴ成人精品无吗| 国产一区二区三区精品在线| 国产91丝袜在线播放九色| 久久综合久久色| 欧美日韩伊人| 一区二区三区av在线| 精品精品精品| 亚洲一区二区三区在线视频| 午夜精品久久久久久久久久蜜桃| 欧美精品在线观看| 在线免费观看的av网站| 日韩精品在线播放| 国产福利资源在线| 欧美人与z0zoxxxx视频| 日本黄色一级视频| 五月婷婷激情综合| 91嫩草|国产丨精品入口| 日本一区二区三区免费乱视频| 欧美xxxx×黑人性爽| 国产一区二区视频在线| 亚欧激情乱码久久久久久久久| 亚洲一区二区免费看| 国产精品视频网站在线观看| 欧美xxav| 亚洲精品国产一区| 猛男gaygay欧美视频| 亚洲欧美自拍一区| 91久久精品国产91性色tv| 永久看看免费大片| 男人的天堂亚洲一区| 久久久久久久久久久久久国产精品| 国产精品v日韩精品v欧美精品网站 | 欧洲一区二区视频| sm捆绑调教国产免费网站在线观看| 久久视频免费在线播放| 午夜视频在线| 最新国产精品亚洲| 999在线视频| 一本色道久久综合狠狠躁篇怎么玩| 五月婷婷在线播放| 日韩av在线免播放器| 欧美 日韩 国产 在线| 欧美tickling挠脚心丨vk| 性生交生活影碟片| 精品日韩欧美在线| 成人久久精品人妻一区二区三区| 精品久久一区二区三区| 亚洲爱情岛论坛永久| 日韩欧美国产电影| 亚洲精品无码久久久| 欧美mv和日韩mv的网站| 日韩中文字幕综合| 亚洲福利影片在线| 污污视频在线免费看| 亚洲福利视频二区| 少妇性bbb搡bbb爽爽爽欧美| 亚洲男人天堂网| 成人在线免费观看| 中文综合在线观看| 成人短视频在线观看| 久久6精品影院| 大黄网站在线观看| 欧美中文在线观看国产| 欧美gay视频| 国产精品视频自在线| 成人永久在线| 少妇高潮喷水久久久久久久久久| 成人直播在线观看| 高清国产一区| 欧美色图婷婷| 日本一区免费看| 成人精品影院| 爱爱爱视频网站| 好看不卡的中文字幕| 欧美视频在线免费播放| 久久精品九九| 九九九九九国产| 粉嫩av亚洲一区二区图片| 久久久久国产精品区片区无码| 久久久综合九色合综国产精品| av电影网站在线观看| 成人欧美一区二区三区1314| 国产大片中文字幕| 欧美性色黄大片| 超碰福利在线观看| 亚洲一级片在线看| 伊人福利在线| 国产精品久久二区| 麻豆精品在线| 区一区二区三区中文字幕| 天天色综合色| 一区二区传媒有限公司| 麻豆国产欧美日韩综合精品二区| 国产亚洲精品成人a| 国产清纯在线一区二区www| 放荡的美妇在线播放| 一本一本久久a久久精品综合麻豆| 91在线公开视频| 亚洲毛片在线观看| 宅男在线观看免费高清网站| 国产精品999999| 国产精品巨作av| 日本高清xxxx| 日本在线不卡视频一二三区| 中国特级黄色大片| 国产精品国产三级国产aⅴ原创| 日韩av片在线播放| 正在播放一区二区| 岛国大片在线观看| 性欧美暴力猛交69hd| 伊人久久大香伊蕉在人线观看热v| 精品无码久久久久久久动漫| 亚洲精品一区二区妖精| 无码无遮挡又大又爽又黄的视频| 国产成人8x视频一区二区| 国产视频123区| 日本韩国欧美一区| 五十路在线观看| 欧美高清无遮挡| 国产精品亚洲欧美一级在线| 日本日本精品二区免费| 一本综合精品| 中文字幕无人区二| 亚洲欧洲制服丝袜| 在线免费观看视频网站| 国产一区二区三区四区福利| 理论片午夜视频在线观看| 99国精产品一二二线| 99久久亚洲精品蜜臀| 91看片在线免费观看| 国产无遮挡一区二区三区毛片日本| 激情综合网五月婷婷| 精品久久一区二区| 男女在线观看视频| www.久久爱.cn| 欧美精品观看| 九色91porny| 夜夜亚洲天天久久| www.com欧美| 欧美国产日韩中文字幕在线| 欧美日韩中出| 波多野结衣 作品| 国产精品亚洲专一区二区三区 | 欧美电影免费| 日本黄大片一区二区三区| 中文字幕av资源一区| 国产精品高清无码| 在线观看国产成人av片| 欧美成人福利| 亚洲欧美一二三| 国产乱人伦偷精品视频免下载| 91久久国产综合| 日韩欧美aaaaaa| 国产精品一二三产区| 欧美18视频| 轻轻草成人在线| 三级黄色录像视频| 日韩一区二区中文字幕| 国内小视频在线看| 久久久久se| 免费人成在线不卡| 在线日韩国产网站| 日韩西西人体444www| 高清电影在线免费观看| 黑人另类av| 日本午夜一区二区| 九九精品视频免费| 精品国产免费一区二区三区四区| 2001个疯子在线观看| 久久天天狠狠| 麻豆精品一区二区综合av| 婷婷色中文字幕| 亚洲精品成人av| 国内精品伊人| 男人天堂新网址| 国产欧美一区二区三区在线看蜜臀 | 欧美国产在线看| 国产网站欧美日韩免费精品在线观看 | 亚洲精品国产无套在线观| 蜜臀av中文字幕| 国产精品观看在线亚洲人成网| 欧美在线三级| 国产艳俗歌舞表演hd| 欧美三级日韩在线| 国产丝袜在线播放| 色播亚洲婷婷| 国产高清久久久| 高潮无码精品色欲av午夜福利| 欧美成人性色生活仑片| 日韩有码av| www.午夜av| 91福利区一区二区三区| 亚洲区欧洲区| 日韩影视精品| 99久久综合色| 国产伦理一区二区| 国产成人a亚洲精品| 亚洲调教视频在线观看| 在线看片中文字幕| 亚洲精品国产综合久久| 国产精品777777在线播放|