play框架04--
1、路由
Play框架中的路由器是負責將傳入的HTTP請求對映為Action呼叫(即控制器中被宣告為public static void的方法)的元件。HTTP請求被MVC框架視為事件,其主要包括以下兩塊內容:
- 請求路徑(比如/clients/1542,/photos/list),其中可以包含查詢字串。
- HTTP方法(GET,POST,PUT,DELETE)。
Play路由器使用的配置檔案為conf/routes,該檔案列出了應用需要的所有路由規則。每條路由由HTTP方法和與Java呼叫相關聯的URI組成。以下是路由配置的例子:
GET路由配置總是從HTTP方法開始,URI作為中間部分,最後的元素是Java呼叫。在路由檔案中可以使用#進行註釋:/clients/{id} Clients.show
# Display a client
GET /clients/{id} Clients.show
1.1 HTTP方法 #
HTTP協議支援以下所列的方法,用於指定客戶請求伺服器的動作,其中GET和POST是最為常用的兩種方法:
- GET
- POST
- PUT
- DELETE
- HEAD
Play同時也支援以WebSocket的方式來呼叫伺服器端的Action方法
如果在路由檔案中指定*作為HTTP方法,那麼這個路由會匹配任何HTTP請求:
* /clients/{id}Clients.show
使用上述的路由配置,以下兩個HTTP請求都會被框架接受:
GET /clients/1541
PUT /clients/1212
1.2 URI表示式#
URI表示式定義了路由規則需要的請求路徑,請求路徑中允許存在動態內容,但必須被宣告在{}中。
/clients/all以上的路由配置只能精確匹配到:
/clients/all
但是如果以包含動態部分配置路由規則:
/clients/{id}則可以分別匹配:
/clients/12121和
/clients/toto
如果某條路由配置的URI中需要包含多個動態部分,可以採用下例方法進行配置:
/clients/{id}/accounts/{accountId}
預設情況下,動態部分的匹配策略採用的是正則表示式/[^/]+/。也可以為動態部分定義自己的正則表示式,以下是使用正則表示式的例子。
路由規則只允許接受id為數字的值:
/clients/{<[0-9]+>id}
路由規則確保id是長度為4到10字元的小寫單詞:
/clients/{<[a-z]{4,10}>id}
正則表示式的使用非常靈活,還可以定義更多的路由規則,本節就不做贅述了。
注意:動態部分指定後,控制器可以在HTTP引數map中獲取該值。
預設情況下,Play將URI尾部的斜線(“/”)作為重要的組成部分,因為有無“/”將會出現不同的結果。比如:
GET /clients Clients.index
該路由規則會匹配/clients,而不是/clinets/(注意這裡的區別),但可以通過在斜線後面增加問號來同時匹配兩個URI:
GET /clients/? Clients.index注意:
URI除了尾斜線不允許有其他可選的部分。
1.3 定義Java呼叫#
路由定義的最後部分為需要呼叫的Java方法:控制器中必須定義指定的Action方法,否則會提示找不到控制器方法的錯誤資訊;必須宣告為public static void方法;控制器需作為play.mvc.Controller的子類定義在controllers包中。
如果控制器沒有在controllers包中定義,在配置路由規則時可以在其名稱之前增加Java包(比如admin.Dashboard.index)的說明。由於controllers包本身被Play預設包含,所以使用者在配置路由時不需要顯式地指定。
GET /admin admin.Dashboard.index
1.4 404作為Action#
可以直接使用404作為路由配置中的Action部分。如果這樣進行配置,對應的URL路徑就會被Play應用所忽略。比如:
# 忽略favicon請求
GET /favicon.ico 404
1.5 指定靜態引數#
在某些情況下,可能會需要基於不同的引數值定義特殊路由。以下是預先定義好的Action:
public static void page(String id) {
Page page = Page.findById(id);
render(page);
}
針對該Action,常規的路由配置為:
GET /pages/{id} Application.page
現在給引數id=home的頁面指定一條特殊的URL,需要通過設定靜態引數來實現:
GET /home Application.page(id:'home')
GET /pages/{id} Application.page
當引數id=home時,兩條路由配置等價,但是由於前者具有較高的優先順序,所以被作為預設的URL來呼叫Application.page。
1.6 變數和指令碼#
與模板中的使用方法類似,在routes檔案中可以使用${...}作為變量表達式,使用%{...}作為指令碼表示式,比如:
%{ context = play.configuration.getProperty('context', '') }%
# 主頁
GET ${context} Secure.login
GET ${context}/ Secure.login
在路由檔案中定義變數和指令碼的典型例子是CRUD模組的routes檔案。該檔案中使用crud.types標籤對model型別進行迭代,為每種型別生成控制器路由定義。以後文章會詳細介紹CRUD模組的使用。
#{crud.types}
GET /? ${type.controllerClass.name.substring(12).replace('$','')}.index
GET /${type.controllerName} ${type.controllerClass.name.substring(12).replace('$','')}.list
GET /${type.controllerName}/new ${type.controllerClass.name.substring(12).replace('$','')}.blank
GET /${type.controllerName}/{id} ${type.controllerClass.name.substring(12).replace('$','')}.show
GET /${type.controllerName}/{id}/{field} ${type.controllerClass.name.substring(12).replace('$','')}.attachment
GET /${type.controllerName}/{id}/edit ${type.controllerClass.name.substring(12).replace('$','')}.edit
POST /${type.controllerName} ${type.controllerClass.name.substring(12).replace('$','')}.create
POST /${type.controllerName}/{id} ${type.controllerClass.name.substring(12).replace('$','')}.save
DELETE /${type.controllerName}/{id} ${type.controllerClass.name.substring(12).replace('$','')}.delete
#{/crud.types}
Play會按照宣告的順序,優先選擇最先宣告的路由,比如:
GET /clients/all Clients.listAll
GET /clinets/{id} Clients.show
在上例的路由配置中,雖然請求/clients/all可以同時匹配這兩條路由配置,但按照宣告的優先順序會被第一條路由攔截,並呼叫相應的Clients.listAll方法。
如果id引數需要匹配5個數字,在不使用重複規則的前提下,只能連續使用五個\d元字元,而使用重複規則後,規則的如下:
GET /clinets/{<\d{5}>id} Clients.index
以下路由規則匹配2個大寫字母以及3-4個數字:
GET /clinets/{<[A-Z]{2}[0-9]{3,4}>id} Clients.index
1.7 staticDir:mapping#
Play的路由配置使用特殊的Action(staticDir)將存放靜態資源的public目錄開放。該目錄裡包含的資源可以是圖片,Javascript,Stylesheet等,這些資源將直接響應給客戶端,並不需要伺服器做進一步加工處理:
GET /public/ staticDir:public
當客戶端請求/public/*路徑時,Play會從應用的public資料夾中獲取相應的靜態資源。這裡的優先順序與標準路由配置一樣適用。
1.8 staticFile:mapping#
還可以直接將URL路徑對映為靜態檔案:
相關推薦
play框架04--
1、路由 Play框架中的路由器是負責將傳入的HTTP請求對映為Action呼叫(即控制器中被宣告為public static void的方法)的元件。HTTP請求被MVC框架視為事件,其主要包括以下兩塊內容: 請求路徑(比如/clients/1542,/photos/list),其中
基於OpenGL編寫一個簡易的2D渲染框架-04 繪制圖片
著色器 drawtext 結構 渲染 images ron renderer make 制圖 閱讀文章前需要了解的知識,紋理:https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/
MUI框架-04-切換頁面頭部文字重疊
開發 圖片 height sdn watermark 完美解決 個人 title src MUI框架-04-切換頁面頭部文字重疊 從現在開始就只分享 MUI 框架開發時遇到的問題了 開發不懂請查看:官方文檔 問題情況 切換頁面 title 文字重疊,覆蓋 截圖:
play框架在idea開發工具上的簡單配置
新公司使用的是play框架,並使用idea作為開發工具,作為一名一貫使用SSM+eclipse黨來說,真心的迷糊啊,初期各種配置搞得人慾仙欲死,欲罷不能,欲哭無淚! idea這裡的基本使用就不做贅述
Vue 框架-04-計算屬性 computed
Vue 框架-04-計算屬性 計算屬性是什麼? 大家可以去看官網解釋:計算屬性和偵聽器 今天的第一個小例項: 為啥先放折磨一個例項,之前資料繫結的就已經可以實現了,看起來那麼簡單,就是為了告訴大家,當點選第一個按鈕【Add to A】的時候, Age + A = 這
階段01Java基礎day18集合框架04
18.01_集合框架(Map集合概述和特點) A:Map介面概述 檢視API可以知道: 將鍵對映到值的物件 一個對映不能包含重複的鍵 每個鍵最多隻能對映到一個值 B:Map介面和Collection介面的不同
play框架08--Job非同步處理
8.1、Job實現 在Play中建立Job只需要繼承play.jobs.Job類: package jobs; import play.jobs.*; public class MyJob extends Job { &nbs
play框架07--域模型
7.1屬性模擬 檢視Play提供的示例應用,模型類裡面會頻繁地使用宣告為public的變數。即使是經驗尚淺的Java開發者,也懂得慎用public型別的變數。在Java開發中(當然還有其他的面嚮物件語言),實踐經驗是這樣告訴我們的:將所有的成員變數宣告為私有,只提供獲取與
play框架06--模板語法、模板繼承
Play具有高效的模板體系,採用Groovy作為其表示式語言,允許動態生成HTML、XML、JSON或者任何基於文字格式的文件,並且具有建立可重用標籤(tag)的功能。模板儲存在Play應用的app/views目錄下。 1、模板語法 與其他的語言一樣
play框架05--控制層--action、攔截器
5.4Action鏈 Play中的Action鏈與Servlet API中的forward不盡相同。Play的每次HTTP請求只能呼叫一個Action,如果需要呼叫其他的Action,那麼必須將瀏覽器重定向到相應的URL。在這種情況下,瀏覽器的URL始終與正在執行的Action保
play框架05--控制層--結果返回
5.3結果返回 Action方法需要對客戶端作出HTTP響應,最簡單的方法就是傳送結果物件。當物件傳送後,常規的執行流程就會中斷。以下面這段程式碼為例,最後一句System.out.println的輸出不會被執行: public static void show(
play框架05--控制層
5.1、概述 Play的控制層位於應用的controllers包中,其中的Java類即為控制器(Controller)。如圖4.1所示,Application.java和MyController.java都屬於控制層。 (圖4.1 控制器為controllers包中的Jav
play框架03--建立專案
安裝Play 從下載頁面下載最新的二進位制包,然後在你喜歡的地方解壓它。 如果你用的是Windows,最好避免在路徑中混入空格。比如c:\play就是個比c:\Documents And Settings\user\play更好的選擇。 1 為了方便操作,你需要新增Pl
play框架02--細說目錄結構
play的目錄結構製作的相當精簡,以下是從play官網截下的圖片: app → Application
play框架01--介紹
概論: Play框架顛覆了臃腫的企業級Java EE規範,以Restful為目標並專注於開發效率,是Java敏捷開發的最佳參考方案。開發者只要具備Java以及資料庫的相關基礎知識就可以輕鬆上手,從而讓Web應用開發變得更加容易,提高專案催化速度。
Play框架_Java記憶體溢位之PermGen OOM深入分析
配置:引數: -Xmx1024m -Xms1024m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:-UseSplitVerifier{ 解決 JD
play框架 JOB
Job 由於Play是Web應用框架,所以大部分的應用邏輯是由響應HTTP請求的控制器來完成的。但是有時候我們需要在HTTP請求之外執行一些應用邏輯操作,比如初始化工作,維護任務或者在不阻塞HTTP請求執行池的情況下執行一些時間花費較長的任務。這時就可以利用P
idea配置play框架
原文地址 注意:第五步最後一張圖片’D;\work\yours’不完整。 補充: 轉載正文: 1)解壓,解壓之後需要配置環境變數,如下: 2)在dos命令敲:play ,如果出現如下圖所示,即為配置成功, 3)在一個資料夾下,進入dos命令,輸入:play
play框架入門(1)
2015-06-03 周海漢 2015.6.3 概述: play框架是用scala寫的scala和java的框架,支援高併發,web和JPA。play框架得到一些網際網路新興企業的喜愛,相較spring,struts和hib
Play框架獲取資料單個欄位與獲取部分欄位集合
Play 框架不提供針對某一個欄位求和方法,那麼一般出現這種情況都會去寫原生sql去執行,非常簡單: String sql = "select sum(count) as count from book "; Long sum; Object sumFlag = JPA.em().cre