freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

play框架手冊(cè)(編輯修改稿)

2025-07-04 08:10 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 成某些URLRouter可以用于在一個(gè)java調(diào)用里生成一個(gè)URL。因此,你就可以把所有的URI范示集中到一個(gè)配置文件里,這樣,在重構(gòu)應(yīng)用程序時(shí),你就更有把握了。比如,下面的路由定義:GET /clients/{id} 在代碼里,同樣可以生成URL,:(id, 1541)。String url = (, map).url。//結(jié)果為 GET /clients/1541URL生成器已經(jīng)被集成到許多框架的組件里。比如,如果你添加的參數(shù)并沒有包含到URI范示里,那么這些參數(shù)將加到查詢字符串里:(id, 1541)。(display, full)。//結(jié)果為:GET /clients/1541?display=fullString url = (, map).url。優(yōu)先權(quán)順序再次用于查找最特別的路由,以生成URL。設(shè)置內(nèi)容風(fēng)格(CSS) response選擇合適的media type。 這個(gè)值通過文件擴(kuò)展名確定哪個(gè)視圖模板將會(huì)被使用。 play請(qǐng)求的默認(rèn)格式為html。因此,index()。如果指定了一個(gè)不同的格式,就需要選擇對(duì)應(yīng)格式的模板。你可以在調(diào)用render方法前以編程的方式設(shè)定格式。比如,為了使用媒體類型為text/css的CSS,你可這樣處理: = css。 然而,更清晰的方法就是在rourtes文件里使用URL來指定格式。你可以通過為控制器方法指定格式來特定的路由添加格式,比如:下面的路由將處理來自/,()方法將設(shè)置格式為xml。GET / (format:39。xml39。) 類似的還有:GET /stylesheets/dynamic_css (format:39。css39。)在下面的路由里,Play也可直接從URL里提取格式: GET /index.{format} 在這個(gè)路由里,/,同時(shí)使用XML模板進(jìn)行渲染; /。 Play也可使用內(nèi)容協(xié)商自動(dòng)設(shè)置格式。HTTP 內(nèi)容協(xié)商 negotiationplay和其他RESTful架構(gòu)一樣,直接使用提供的功能,而不是試著隱藏或是在其之上放置一個(gè)抽象層。的內(nèi)容協(xié)商(Content negotiation)特性允許服務(wù)器依照客戶端請(qǐng)求的媒體類型為同一個(gè)URL提供不同的媒體類型media types??蛻舳颂囟ǖ目山邮艿膬?nèi)容類型是通過Accept header確定的,比如需要一個(gè)xml response就定義為:Accept: application/xml客戶端可以指定多個(gè)媒體類型,并且可以指定(*/*)來表示可接受任意媒體類型: Accept: application/xml, image/png, */*傳統(tǒng)的Web瀏覽器總是在其Accept header里包含了通配符:這樣,他們就可以接收任意媒體類型,當(dāng)然包括play提供的默認(rèn)html類型。內(nèi)容協(xié)商更多是用于定制的客戶端,比如一個(gè)要求返回JSON的Ajax請(qǐng)求,或一個(gè)ebook閱讀器需要的PDF或EPUB版本的文檔。從 headers開始設(shè)置內(nèi)容類型 如果Accept header包含了text/html或application/xhtml以及作為*/*通配符的結(jié)果時(shí), Play選擇其默認(rèn)格式html。如果通配符值為空時(shí),默認(rèn)格式將不被選擇。Play對(duì)html, txt, json和 xml媒體格式提供了內(nèi)建支持。比如,下面定義了一個(gè)用于渲染某些數(shù)據(jù)的控制器方法: public static void index() { final String name = Peter Hilton。 final String organisation = Lunatech Research。 final String url = 。 render(name, organisation, url)。 } 在一個(gè)瀏覽器里,如果請(qǐng)求的URL映射到這個(gè)方法時(shí),因?yàn)闉g覽器發(fā)送的Accept header里包含了text/html值。通過設(shè)置請(qǐng)求格式為xml,Play響應(yīng)的結(jié)果Accept header類型為:text/xml,比如: ?xml version=? contact name${name}/name organisation${organisation}/organisation url${url}/url /contact Accept header內(nèi)建的格式對(duì)應(yīng)的格式以及對(duì)應(yīng)的模板文件見下表(以index()控制器方法為例):Accept header Format Template file name Mapping null null Default template extension for null format image/png null 媒體類型沒有映射到格式 */*, image/png html 默認(rèn)媒體類型映射到html格式 text/html html Builtin format application/xhtml html Builtin format text/xml xml Builtin format application/xml xml Builtin format text/plain txt Builtin format text/javascript json Builtin format application/json, */* json Builtin format, default media type ignored 定制格式 通過檢查請(qǐng)求header和設(shè)置相應(yīng)用的格式,可以為自己的自定義類型添加內(nèi)容協(xié)商,因此只需在請(qǐng)求選擇相應(yīng)的媒體類型時(shí)設(shè)置這個(gè)自定義格式即可。比如,為了在控制器里實(shí)現(xiàn)帶有text/xvcard的vCard功能,需要所有請(qǐng)求處理之前對(duì)定制格式進(jìn)行檢查: @Before static void setFormat() { if ((accept).value().equals(text/xvcard)) { = vcf。 } } 現(xiàn)在,一個(gè)Accept: text/xvcard ,比如:BEGIN:VCARD VERSION: N:${name} FN:${name} ORG:${organisation} URL:${url} END:VCARD 繼續(xù)討論當(dāng)Router明確了哪個(gè)java調(diào)用將用于處理已經(jīng)接收的請(qǐng)求,play就會(huì)調(diào)用這個(gè)java調(diào)用。見Controllers 節(jié),以了解控制器是如何工作的。在Play框架中,商業(yè)邏輯在domain model層里進(jìn)行管理,Web客戶端不能直接調(diào)用這些代碼,domain對(duì)象的功能作為URI資源暴露出來??蛻舳耸褂肏TTP協(xié)議提供的統(tǒng)一API來暗中操作這些底層的商業(yè)邏輯實(shí)現(xiàn)資源的維護(hù)。然而,這些domain對(duì)象到資源的映射并不是雙向注入的:它可以表示成不同級(jí)別的粒度,一些資源可能是虛擬的,某些資源的別名或許已經(jīng)定義了…這正是控制器層發(fā)揮的作用:它在模型對(duì)象和傳輸層事件之間提供了粘合代碼。和模型層一樣,控制器也是純java書寫的代碼,這樣控制器層就很容易訪問和修改model對(duì)象。和接口類似,控制器是一個(gè)面向Request/Response的程序??刂破鲗訙p少了和模型層之間的阻抗。注意!不同的策略具有不同的架構(gòu)模型。一些協(xié)議可以讓你直接訪問模型對(duì)象。典型代表就是EJB和Corba協(xié)議,這種架構(gòu)風(fēng)格使用的是RPC(遠(yuǎn)程過程調(diào)用),這樣的通信風(fēng)格和web架構(gòu)很難兼容。SOAP協(xié)議則試著通過web訪問model對(duì)象。這是另外一個(gè)rpc類型的協(xié)議,這種情況,soap使用作為傳輸協(xié)議,這不是一種應(yīng)用程序協(xié)議。由于web規(guī)則并不是完全面向?qū)ο蟮?,所以在這些協(xié)議下,針對(duì)不同的語言,需要不同的適配器??刂破鞲庞[一個(gè)controller就是一個(gè)java類,位于controller包下。示例:package controllers。 import 。import 。 public class Clients extends Controller { public static void show(Long id) { Client client = (id)。 render(client)。 } public static void delete(Long id) { Client client = (id)。 ()。 } }控制器中的每個(gè)public、static方法叫做Action(動(dòng)作)。action動(dòng)作方法簽名總是如下:public static void action_name(params...)。在action方法簽名里可以定義參數(shù),這些參數(shù)值會(huì)被框架自動(dòng)從相應(yīng)的參數(shù)里找到。通常情況下,一個(gè)action方法不包括return字段,方法退出是通過調(diào)用result方法完成的,在上面的示例里,render()就是一個(gè)result方法,用于執(zhí)行和顯示一個(gè)模板。獲取參數(shù)一個(gè)HTTP請(qǐng)求包含有數(shù)據(jù)。這些數(shù)據(jù)可以從如下渠道提?。?URI路徑:比如/clients/1541請(qǐng)求, 1541就是URI范示的動(dòng)態(tài)部分 請(qǐng)求字符串:/clients?id=1541 請(qǐng)求體:如果是通過html窗體發(fā)送的請(qǐng)求,請(qǐng)求體就包含有以xurlformencoded方式編碼的窗體數(shù)據(jù)所有這些情況下,play都會(huì)自動(dòng)進(jìn)行數(shù)據(jù)提取,并存入同一個(gè)MapString, String[] ,這里面包含有所有的HTTP參數(shù)。key就是參數(shù)名name,具體從以下方式確定: URI范示的動(dòng)態(tài)部分名稱(和在routes文件里指定的一樣) 查詢字符串里的namevalue pair中的name xurlformencoded體的內(nèi)容使用params mapparams對(duì)象是一個(gè)可用于任何控制器類的變量(),這個(gè)對(duì)象包含了所有從當(dāng)前請(qǐng)求找到的參數(shù)。比如:public static void show() { String id = (id)。 String[] names = (names)。}你也可以讓Play幫助完成類型轉(zhuǎn)換:public static void show() { Long id = (id, )。}請(qǐng)等一等,你有更好的方式完成類型轉(zhuǎn)換,如下:還可以從action方法簽名實(shí)現(xiàn)轉(zhuǎn)換你可以直接從action方法簽名里取回參數(shù)。但Java參數(shù)的名稱必須和參數(shù)的名稱相同:比如下面的請(qǐng)求:/clients?id=1451一個(gè)action方法可以通過在其方法簽名里聲明一個(gè)id參數(shù)來取回id參數(shù)值:public static void show(String id) { (id)。 }還可以使用其他java類型,比如String。在這種情況下,框架將試著預(yù)測(cè)參數(shù)值的正確類型:public static void show(Long id) { (id)。 }如果某個(gè)參數(shù)具有多個(gè)值,則可以聲明一個(gè)數(shù)組參數(shù):public static void show(Long[] id) { for(String anId : id) { (anid)。 }}或是一個(gè)集合類型:public static void show(ListLong id) { for(String anId : id) { (anid)。 }}例外情況!如果在action方法參數(shù)里找不到參數(shù)對(duì)應(yīng)的參數(shù),則相應(yīng)的方法參數(shù)將默認(rèn)設(shè)置為默認(rèn)值(對(duì)象類型為null,數(shù)字類型為0)。如果能夠在action方法參數(shù)里找到對(duì)應(yīng)參數(shù),但框架不能預(yù)測(cè)需要的java類型, play將在validation error集合里增加一個(gè)錯(cuò)誤,并使用默認(rèn)值。高級(jí)HTTP Java綁定簡(jiǎn)單類型所有本地的和通用的java類型都是自動(dòng)進(jìn)行綁定的:int, long, boolean, char, byte, float, double, Integer, Long, Boolean, Char, String, Byte, Float, Double注意:如果請(qǐng)求的參數(shù)丟失或自動(dòng)類型轉(zhuǎn)換失敗,對(duì)象類型將置null,簡(jiǎn)單類型將設(shè)置為其默認(rèn)值。Date類型如果日期的字符串輸出匹配下面的范示,日期對(duì)象將進(jìn)行自動(dòng)綁定: yyyyMMdd’T’hh:mm:ss’Z39。 // ISO8601 + 時(shí)區(qū) yyyyMMdd’T’hh:mm:ss // ISO8601 yyyyMMdd yyyyMMdd’T’hhmmss yyyyMMddhhmmss dd39。/‘MM’/39。yyyy ddMMyyyy ddMMyyyy MMddyy MMddyy MM39。/‘dd’/39。yy使用@As注釋,你可以指定日期格式:archives?from=21/12/1980public static void articlesSin
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1